Mettre bout à bout (enchainer) des sources de données dans Excel avec Power Query (Data Explorer)

Un cas d’usage qui pouvait être reproché à Excel, et à Power Pivot également, c’était l’impossibilité de prendre 2 ou plus sources de données identiques et de les mettre bout à bout (en mode UNION pour les SQLeux). Typiquement : j’ai un fichier CSV par mois dans un répertoire, et j’aimerais tous les mettre dans le même tableau Excel pour travailler dessus. Jusqu’alors, la seule solution c’était les copiés/collés successifs à la main, avec tous les risques que ça comporte.

Heureusement Power Query (anciennement Data Explorer) vient à la rescousse ! C’est quoi ? C’est un add-in Excel gratuit, édité par Microsoft, qui sert de mini-ETL à Excel. Sincèrement, c’est peut-être l’outil de BI Self-Service qui enflamme le plus les consultants décisionnel Microsoft en ce moment, alors allez l’installer!

Le mieux pour vous convaincre étant sans doute de passer à la pratique, voici comment employer la chose :

Scénario 1 : 3 tableaux dans le même fichier Excel

  • Pour l’exemple j’ai créé 3 tableaux dans Excel 2013, dans la même feuille ou pas, ça ne change rien, qui contiennent des données à la structure identique:

Append_1

  • Le but : créer une « Query », une requête dans Power Query, sur chacune des tables, pour ensuite les associer en un seul résultat
  • Etape 1 (à répéter 3 fois, une fois par tableau) : a. Je clique dans un tableau (si ce n’est pas fait, n’oubliez pas de « Mettre sous Forme de Tableau » vos données), b. Je vais dans l’onglet Power Query, c. Je créé une Query depuis un Tableau (From Table). Notez que si l’onglet Power Query n’apparait pas, le mieux est de valider qu’il est bien activé (Fichier > Options > Compléments > Gérer : Compléments COM : « Microsoft Power Query for Excel » doit être coché)

Append_2

  • En bleu : l’interface de transformation de données de Power Query, ici on a besoin de rien, donc on valide (Done):

Append_3

  • La Query est créée, elle correspond à un tableau dans un nouvel onglet Excel:

Append_4

  • On répète l’opération 3 fois, une fois par tableau pour obtenir les onglets suivants (oui mon Excel est en anglais, Sheet ou Feuille c’est pareil ;)) :

Append_5

  • Etape 2 : a. On va dans l’onglet Power Query, et b. on choisit « Append »

Append_6

  • Dans l’interface, je choisis 2 Queries, l’ordre n’importe pas ici. Vous noterez que les noms affichés sont les noms des Queries, qui par hasard correspondent ici aux noms des Tableaux. Si vous avez renommé vos Queries, vous retrouverez les nouveaux noms ici:

Append_7

  • Encore une fois, on passe par l’interface de transformation des données de Power Query, encore une fois ici on ne change rien, on valide (Done) :

Append_8

  • Et hop, je me retrouve avec une nouvelle Query qui est la mise bout à bout des 2 premières tables :

Append_9

  • Je répète l’opération, cette fois on prenant dans l’Append le résultat de mon premier Append (Append 1) et le tableau que je n’avais pas pris la première fois :

Append_10

  • Je valide dans l’éditeur et hop, me voilà avec la table complète !

Append_11

  • Chouette non? Alors on peut se dire que c’était beaucoup d’étapes, alors que 3 copiés/collers suffisaient à faire la même chose. Certes. Mais l’avantage énorme des Queries, c’est qu’elles se mettent à jour (cliquer pour zoomer) :

Append_12

  • C’est quand même bien fait non ? 🙂

Scénario 1 – Avancé : Optimisation sur 3 tableaux dans le même fichier Excel

Alors ok, c’est mignon, mais avec la manipulation précédente on se retrouve quand même avec 5 feuilles, et si on ajoute d’autres sources ça va rapidement faire beaucoup trop (2n-1 feuilles avec n sources). Évidemment on peut faire bien mieux, mais il va falloir remonter les manches 😉

  • D’abord il va falloir activer le mode avancé

Append_13

  • Et tant qu’on y est, activez le Fast Combine, ça vous évitera des soucis plus tard :

Append_14

  • Désormais, vous allez pouvoir directement éditer les formules que Power Query utilise pour transformer les données. On retourne donc dans l’interface de transformation des données de Power Query en utilisant une de ces 2 méthodes (ab,ab’c’), ou en créant une nouvelle Query :

Append_15

  • Et dans cette interface, si vous êtes bien passé en mode avancé (voir plus haut), vous devez avoir un petit parchemin à cliquer :

Append_16

  • Qui amène à l’interface de saisie des formules :

Append_17

  • Je vous laisse avec le guide de référence pour voir tout ce qui est possible de faire, perso j’ai la même démarche que dans cet article, je fais toutes les étapes unitairement, et j’essaye d’optimiser ensuite à la main. Dans notre cas :

Append_18

  • En version copiable, à adapter en fonction des noms de vos tableaux (Table1/Table2/Table3) :
let
Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
Source3 = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
Source = Table.Combine({Source1,Source2,Source3})
in
Source

Avec cette formule on fait tout en une seule Query, donc un seul onglet, peu importe le nombre de source. Pas mal non ? 🙂

Scénario 2 : 3 fichiers Excel distincts, toujours avec le même format de données

  • Alors de la même manière, on peut faire les fichiers Excel. Je vous donne directement le script, à vous de jouer en manuel pour bien comprendre !

Append_19

let
Source2006 = Excel.Workbook(File.Contents("C:\Temp\2006.xlsx")),
Dataset2006 = Source2006{[Name="Sheet1"]}[Data],
FirstRowAsHeader2006 = Table.PromoteHeaders(Dataset2006),
Source2007 = Excel.Workbook(File.Contents("C:\Temp\2007.xlsx")),
Dataset2007 = Source2007{[Name="Sheet1"]}[Data],
FirstRowAsHeader2007 = Table.PromoteHeaders(Dataset2007),
Source2008 = Excel.Workbook(File.Contents("C:\Temp\2008.xlsx")),
Dataset2008 = Source2008{[Name="Sheet1"]}[Data],
FirstRowAsHeader2008 = Table.PromoteHeaders(Dataset2008),
SourceComplete = Table.Combine({FirstRowAsHeader2006 ,FirstRowAsHeader2007 ,FirstRowAsHeader2008 })
in
SourceComplete

Scénario 3 : 3 fichiers CSV, toujours avec le même format de données

  • Je vous donne directement le script :

Append_20

let
Source2006 = Csv.Document(File.Contents("C:\Temp\2006.csv")),
FirstRowAsHeader2006 = Table.PromoteHeaders(Source2006),
Source2007 = Csv.Document(File.Contents("C:\Temp\2007.csv")),
FirstRowAsHeader2007 = Table.PromoteHeaders(Source2007),
Source2008 = Csv.Document(File.Contents("C:\Temp\2008.csv")),
FirstRowAsHeader2008 = Table.PromoteHeaders(Source2008),
SourceComplete = Table.Combine({FirstRowAsHeader2006 ,FirstRowAsHeader2007 ,FirstRowAsHeader2008 }),
ChangedType = Table.TransformColumnTypes(SourceComplete ,{{"Region", type text}, {"Categorie", type text}, {"Annee", type number}, {"Valeur", type text}})
in
ChangedType
  • Une petite remarque en passant : attention avec les CSV, pour le moment l’interface de Power Query ne permet pas de gérer les séparateurs différents de la virgule, ni nos encodages européens facilement. Pour se faire, il faut modifier sa formule source comme suit:
Csv.Document(File.Contents("C:\Users\Florian\Desktop\2006.csv"), null, ";" , null, 1252)

Avec : votre séparateur, et votre encodage (par défaut 1252 sur Windows, voir le PDF de référence pour les autres – recherchez TextEncoding).

Et après ?

Soit on utilise directement le tableau résultat des Queries Append dans un tableau croisé dynamique, soit on l’ajoute au Data Model et c’est parti pour Power Pivot !

Amusez-vous bien, et n’hésitez pas à venir partager vos trouvailles 😉

Retour des TechDays 2012

Et voilà, les TechDays édition 2012, c’est terminé!

Microsoft Techdays 2012

Comme d’habitude j’ai eu les yeux plus gros que le ventre, et j’ai assisté à peu de sessions par rapport à ce que j’avais prévu:

  • « BISM ou UDM? » d’Aurélien et François. A mon sens moins percutante que leur session sur le même thème aux Journées SQL Server. Mais c’est normal me direz-vous, le sujet ayant été adapté au public qui est beaucoup moins technique aux techdays qu’aux JSS 😉
  • « La BI avec SQL Server 2012 » de Franck Mercier. Je sais pas ce qui m’a pris d’aller à une session 200 qui présentait l’offre d’une manière générale… Désolé à ceux à qui j’ai piqué un siège!
  • « SelfService ETP: Data Explorer » de Jean-Pierre. Définitivement ma session préférée: rythme soutenu, vraies démos qui sortent de l’ordinaire, charisme international, respect Djeepy 🙂
  • « Intégrer la dimension géographique dans vos systèmes décisionnels avec ArcGIS » de Jean-Marc Monfort (Microsoft), Olivier Rossini et mon collègue Julien Vidal. Trois très bons intervenants pour une session définitivement trop courte. Les produits sont intéressants, on reste sur notre faim!
  • « SQL 2012 : Data Quality Services« . Difficile pour Erwan Lancien de finir la journée: créneau douloureux – dernier jour, dernière session – sujet un peu aride, l’attention du public n’était pas au top. Je me demande s’il ne serait pas plus intéressant de présenter le sujet en partant de l’utilisation, de SSIS, puis de revenir aux KB et DQP, plutôt que l’inverse. A mon sens on passe peut être trop de temps à construire une solution et pas assez de temps à l’exploiter.

Concernant les technos présentées, on sent que Microsoft a remis ses équipes de développement en ordre de marche: ça tire dans tous les coins! Et peut-être même un peu trop: on nous montre beaucoup de produits, mais pas vraiment de business cases associés. Ce sera bien aux clients et aux consultants de trouver comment utiliser ces technologies dans la vie de tous les jours. Hum…

Tant qu’à pousser un petit coup de gueule, j’en profite pour me permettre une critique concernant le site des TechDays, qui certes utilise la charte Metro, mais qui est complétement contre-intuitif. En tant que visiteur (gestion de mon inscription et planning) et en tant que bloggeur (fiches speaker, session, webcasts etc..), je le trouve particulièrement inutilisable. Et tous les gens que je connais qui l’ont utilisé m’ont fait le même retour. Dommage!

Je conclue sur une note positive en rappelant que les TechDays, c’est peut-être surtout l’occasion de retrouver la communauté, et ça c’est top! J’ai pu retrouver mes compères Charles-Henri et David, découvrir avec plaisir que Thomas Ricquebourg avait fait le déplacement depuis le grand nord, trainer avec Jean-Pierre pour causer poneys, discuter avec Arian des dates ISO, etc etc!

Awesome!

Awesome

D’ailleurs si vous souhaitez rencontrer tous ces gens, n’hésitez pas à rejoindre la communauté du GUSS – le Groupe des Utilisateurs Francophones de SQL Server. Et pourquoi pas commencer lundi prochain (le 13) pour une soirée discussion sur l’activité du GUSS en 2012!

Microsoft Techdays 2012 – 7, 8 et 9 février

La grand-messe annuelle de Microsoft en France c’est les Techdays et c’est bientôt!

Microsoft Techdays 2012

Si vous êtes développeur ou consultant décisionnel, dBa, chef de projet, directeur d’étude ou encore DSI, je vous encourage vivement à aller découvrir ce que Microsoft a à vous proposer autour de SQL Server 2012, SharePoint 2010, le cloud avec Azure et Office 365 et tout le reste 🙂

Point de vue logistique ça se passe au Palais des Congrès (Porte Maillot à Paris) les 7,8 et 9 février, c’est gratuit, il suffit juste de s’inscrire.

Evidemment on va vous en mettre plein les yeux, évidemment nous autres consultants on va galérer à implémenter tout le rêve qui vous aura été vendu, mais c’est le meilleur moment pour découvrir de quoi sont capables les nouvelles technos et de rencontrer tous les acteurs du milieu en un même endroit.

Personnellement je me suis booké l’emploi du temps suivant, j’y serai surement mercredi 8 et jeudi 9, mais comme d’habitude je raterai la moitié des sessions à discuter avec tout le monde…

Techdays 2012 Planning

Vous noterez que je me suis inscrit à plusieurs sessions sur les mêmes créneaux, c’est juste pour vous proposer le choix quand il existe. J’ai mixé du parcours décisionnel avec du cloud, histoire de voir ce qu’il se passe côté NoSQL / Big Data.

Cette année les incontournables seront pour moi « BISM ou UDM » et « SelfService ETP » (alias Data Explorer), ok c’est biaisé puisque c’est animé par mes compères, respectivement Aurélien Koppel et François Jehl pour SSAS et Jean-Pierre Riehl pour les poneys.

Et oui je n’ai pas de session sur cette édition, j’ai juste oublié de m’inscrire au moment voulu… No comment…

Enfin, si vous me cherchez, je serai soit sur le stand de MCNEXT, soit sur le stand du GUSS, soit au bistrot juste en face 😉