Composant de bascule « wide » vers « tidy ». Deplie un tableau ou une dimension (souvent le temps) est encodee dans les NOMS de colonnes (c2023_01, c2023_02...) en une observation par ligne. Ne fait aucun fetch HTTP : c'est un pur transformateur, l'inverse exact d'un pivot.

Invisible : Ce composant ne rend rien visuellement. Il ecoute une source, bascule ses colonnes en lignes, puis redistribue le resultat via le systeme d'evenements. La valeur reste brute : le typage est delegue a <dsfr-data-normalize> (numeric-auto) en aval.

Le probleme resolu

Un tableur saisi a la main est souvent « wide » : une colonne par periode.

Indicateurs           | Sous_theme           | c2023_01 | c2023_02 | ... | c2026_04
Immatriculations VE   | Vehicule Particulier | 14904    | 19965    | ... | 36542

Le pipeline dsfr-data suppose un format « tidy » (une observation par ligne) :

Indicateurs           | Sous_theme           | mois    | valeur
Immatriculations VE   | Vehicule Particulier | 2023-01 | 14904
Immatriculations VE   | Vehicule Particulier | 2023-02 | 19965

<dsfr-data-unpivot> effectue cette bascule de maniere declarative, sans JavaScript.

Position dans le pipeline

dsfr-data-source (wide) ──► dsfr-data-unpivot ──► dsfr-data-normalize ──► dsfr-data-query ──► dsfr-data-chart

Attributs

AttributTypeFormat / ValeursDescription
idStringid="tidy"Identifiant unique de la sortie (requis). Les composants aval s'y abonnent.
sourceStringsource="grist_wide"ID de la source amont a deplier (requis)
id-colsStringid-cols="Indicateurs, Sous_theme"Colonnes conservees telles quelles sur chaque ligne (virgule-separees)
value-colsStringvalue-cols="janv, fevr, mars"Liste explicite des colonnes a deplier. Exclusif avec value-cols-pattern
value-cols-patternStringvalue-cols-pattern="c{YYYY}_{MM}"Motif des colonnes a deplier (voir tokens ci-dessous)
var-nameStringvar-name="mois"Nom de la nouvelle colonne « variable » (cle depliee). Defaut : variable
var-formatStringvar-format="{YYYY}-{MM}"Reformatage de la cle via les tokens du motif (c2023_012023-01)
value-nameStringvalue-name="valeur"Nom de la nouvelle colonne « valeur ». Defaut : value
drop-emptyBooleandrop-emptyNe pas emettre de ligne quand la cellule depliee est vide / null

Tokens du motif value-cols-pattern

Les placeholders {TOKEN} capturent une partie du nom de colonne. Le motif est ancre (debut a fin).

TokenLargeurExemple
YYYY4 chiffres2023
YY / MM / DD / HH2 chiffres01
Q1 chiffre4
{nom} (generique)un segmentregion

Exemples

Tableur electromobilite « wide » vers courbe temporelle

La table Grist a une colonne par mois (c2023_01...). On la bascule en tidy, on type les valeurs, et on trace une courbe — sans une ligne de JavaScript.

<dsfr-data-source id="grist_wide" api-type="grist"
  base-url="https://grist.numerique.gouv.fr" doc-id="..." table="Plan_Elec">
</dsfr-data-source>

<dsfr-data-unpivot id="tidy" source="grist_wide"
  id-cols="Indicateurs, Sous_theme"
  value-cols-pattern="c{YYYY}_{MM}"
  var-name="mois" var-format="{YYYY}-{MM}"
  value-name="valeur">
</dsfr-data-unpivot>

<dsfr-data-normalize id="prep" source="tidy" numeric-auto></dsfr-data-normalize>

<dsfr-data-query id="ve" source="prep"
  where="Indicateurs = 'Nombre immatriculations VE'" order-by="mois:asc">
</dsfr-data-query>

<dsfr-data-chart source="ve" type="line"
  label-field="mois" value-field="valeur">
</dsfr-data-chart>

Cle de serie composite + multi-courbes (avec compute et series-field)

Quand l'identite d'une serie est repartie sur plusieurs colonnes (ici Indicateurs + Sous_theme), l'attribut compute de <dsfr-data-normalize> les recolle en une cle unique. Le series-field de <dsfr-data-chart> transforme alors cette cle tidy en une courbe par serie — sans une ligne de JavaScript.

<dsfr-data-normalize id="prep" source="tidy"
  numeric-auto
  compute="groupe = Indicateurs + ' / ' + Sous_theme">
</dsfr-data-normalize>

<dsfr-data-chart source="prep" type="line"
  label-field="mois" series-field="groupe" value-field="valeur">
</dsfr-data-chart>

Alternative pour une seule serie : filtrer via <dsfr-data-query where="groupe = '...'">.

Liste explicite de colonnes

Quand les colonnes ne suivent pas de motif, on les liste explicitement :

<dsfr-data-unpivot id="tidy" source="src"
  id-cols="produit"
  value-cols="janvier, fevrier, mars"
  var-name="mois" value-name="ventes">
</dsfr-data-unpivot>

Evenements

Le composant emet les memes evenements que <dsfr-data-source> :

Methodes publiques

MethodeRetourDescription
getData()ArrayRetourne les donnees depliees actuelles

Conseils d'utilisation

Schema evolutif : un nouveau mois (nouvelle colonne c2026_05) est depliee automatiquement par value-cols-pattern, sans modifier le HTML.

Typage delegue : la valeur reste une chaine. Placez un <dsfr-data-normalize numeric-auto> en aval — il gere deja la virgule decimale francaise (0,26) et les espaces de milliers.

Recalcul automatique : si la source emet de nouvelles donnees (rechargement, filtre, pagination), le depivotage est recalcule automatiquement.