[SSIS] Data Transformation : utilisation du composant UNPIVOT

Ce billet aborde l’utilisation du composant UnPivot sous SSIS (avec SQL Server Data Tools – ou SSDT).

Pour comprendre ce qu’est UnPivot, parachutez-vous ici.

Contexte

Supposons que l’on dispose d’un fichier Excel XL_ProductOrder_IncomeDays dont la structure est la suivante :


Et admettons que l’on souhaite charger son contenu dans une destination (fichier, base de données,…) avec les colonnes relatives aux jours (Monday, Tuesday,…) transformées en lignes, dont voici un exemple (tronqué pour des raisons de lisibilité) :


Modus operandi

    Avant de commencer…

On suppose qu’un data flow (renommé DTF – UnPivot)
a été glissé au sein du control flow, et qu’un composant Excel Source (renommé XL_ProductOrder_IncomeDays)
a été correctement configuré pour pointer vers le fichier XL_ProductOrder_IncomeDays, et que toutes les colonnes dudit fichier ont été sélectionnée (onglet Columns de l’Excel Source Editor).


Pour un exemple de mode opératoire plus précis sur la configuration d’une source de données Excel (ou tout autre fichier s’en approchant), vous pouvez faire un saut ici.

Entrée dans le vif du sujet

Comme dans le cas de PIVOT, bien que le modus operandi soit sensiblement le même que dans le cas de Business Intelligence Development Studio (BIDS, pre-SQL Server 2012), quelques différences notables existent. En effet, la version avec SSDT est beaucoup plus simple (voir la suite du billet), tandis que dans le cas de BIDS, quelques ajustements supplémentaires sont nécessaires (i.e., paramétrage du PivotUsage dans l’Advanced Editor du composant de pivotement,…).²
  • Faites glisser un composant de transformation UnPivot au sein de la zone de design du data flow, puis créez un connecteur allant de XL_ProductOrder vers ledit composant :


  • Ouvrez l’éditeur du composant UnPivot (en double-cliquant dessus, par exemple) :


Au sein de l’éditeur, cochez, à gauche, tous les jours de la semaine sauf Product :


Cela aura pour effet de remplir automatiquement les colonnes Input Column et Pivot Key Value de l’éditeur. Il vous restera, alors, à spécifier la colonne de destination (Quantity, dans notre cas) et le nom de colonne destinée à recevoir les clés de valeur pivot (IncomeDay, en l’occurrence). Pour finir, la colonne Pivot Key Value peut être facultativement modifiée (si, par exemple, vous souhaitez remplacer les noms de jours de la semaine par des abréviations (MON, TUE,…), des chiffres (1,2,…),…).

  • Faites glisser un composant intermédiaire (UNION ALL, etc…) ou de destination (DataReader Destination, OLE DB Destination,…) et placez-y un connecteur allant du composant UnPivot vers ladite destination, puis activez le data viewer via clic-droit sur le connecteur :


Le but du data viewer est de permettre d’avoir une idée des résultats après transformation par SSIS.

  • Lancez le data flow (ou package, selon), et appréciez la magie de l’opération UnPivot :


Si vous le souhaitez, vous pouvez utiliser un composant Sort – juste avant le composant de destination – pour trier vos données par jour, quantité ou produits.

Pour aller plus loin…

Gardez un œil ici pour de plus amples transformations (sic).

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s