Power Query [Trucs et astuces] Créer le dictionnaire de données des requêtes

  • Initiateur de la discussion Initiateur de la discussion Guy_M
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Guy_M

XLDnaute Occasionnel
Bonjour,

Pour ceux qui en aurait besoin voici une requête Power Query permettant de créer le dictionnaire de données des requêtes.
PowerQuery:
let
    Source = #sections,
    Section1 = Source[Section1],
    #"Converti en table" = Record.ToTable(Section1),
    #"Suppprime requête DicoDonnées" = Table.SelectRows(#"Converti en table", each ([Name] <> "DicoDonnée")),
    #"Col. Type de Value" = Table.AddColumn(#"Suppprime requête DicoDonnées", "Type de Value", each Type.TableSchema(type table [ Col1 = Value.Type([Value])])[TypeName]{0}),
    #"Conserve les tables" = Table.SelectRows(#"Col. Type de Value", each ([Type de Value] = "Table.Type")),
    #"Conserve les noms des requêtes" = Table.SelectColumns(#"Conserve les tables",{"Name"}),
    #"Liste des noms des requetes" = #"Conserve les noms des requêtes"[Name],
    #"Dico de données de chaque table" = List.Transform(#"Liste des noms des requetes",each {_, Table.Schema(Expression.Evaluate("#" & """" & _ & """",#shared))}), //Il faut échapper _ dans Expression.Evaluate
    #"Ajout Nom Requête à chaque Dico" = List.Transform(#"Dico de données de chaque table",(MembreListe) => Table.AddColumn(MembreListe{1},"Nom Requête",each MembreListe{0})),
    #"Générer le dico de données" = Table.Combine(#"Ajout Nom Requête à chaque Dico"),
    #"Colonnes permutées" = Table.ReorderColumns(#"Générer le dico de données",{"Nom Requête", "Name", "Position", "TypeName", "Kind", "IsNullable", "NumericPrecisionBase", "NumericPrecision", "NumericScale", "IsSigned", "DateTimePrecision", "MaxLength", "IsVariableLength", "NativeTypeName", "NativeDefaultExpression", "NativeExpression", "Description", "IsWritable", "FieldCaption"}),
    #"Lignes groupées" = Table.Group(#"Colonnes permutées", {"Name", "TypeName", "Kind"}, {{"Requêtes", each Text.Combine([Nom Requête],", "), type text}}),
    #"Colonnes permutées1" = Table.ReorderColumns(#"Lignes groupées",{"Requêtes", "Name", "TypeName", "Kind"}),
    #"Lignes triées" = Table.Sort(#"Colonnes permutées1",{{"Name", Order.Ascending}})
in
    #"Lignes triées"

Il y a une limitation, la requête générant le dictionnaire de données doit s'appeler DicoDonnées. Peut-être qu'une prochaine version s’affranchira de cette contrainte.

En espérant que cela pourra vous être utile à quelqu'un.
 
Dernière édition:
Bonjour,

Pour ceux qui en aurait besoin voici une requête Power Query permettant de créer le dictionnaire de données des requêtes.
PowerQuery:
let
    Source = #sections,
    Section1 = Source[Section1],
    #"Converti en table" = Record.ToTable(Section1),
    #"Suppprime requête DicoDonnées" = Table.SelectRows(#"Converti en table", each ([Name] <> "DicoDonnée")),
    #"Col. Type de Value" = Table.AddColumn(#"Suppprime requête DicoDonnées", "Type de Value", each Type.TableSchema(type table [ Col1 = Value.Type([Value])])[TypeName]{0}),
    #"Conserve les tables" = Table.SelectRows(#"Col. Type de Value", each ([Type de Value] = "Table.Type")),
    #"Conserve les noms des requêtes" = Table.SelectColumns(#"Conserve les tables",{"Name"}),
    #"Liste des noms des requetes" = #"Conserve les noms des requêtes"[Name],
    #"Dico de données de chaque table" = List.Transform(#"Liste des noms des requetes",each {_, Table.Schema(Expression.Evaluate("#" & """" & _ & """",#shared))}), //Il faut échapper _ dans Expression.Evaluate
    #"Ajout Nom Requête à chaque Dico" = List.Transform(#"Dico de données de chaque table",(MembreListe) => Table.AddColumn(MembreListe{1},"Nom Requête",each MembreListe{0})),
    #"Générer le dico de données" = Table.Combine(#"Ajout Nom Requête à chaque Dico"),
    #"Colonnes permutées" = Table.ReorderColumns(#"Générer le dico de données",{"Nom Requête", "Name", "Position", "TypeName", "Kind", "IsNullable", "NumericPrecisionBase", "NumericPrecision", "NumericScale", "IsSigned", "DateTimePrecision", "MaxLength", "IsVariableLength", "NativeTypeName", "NativeDefaultExpression", "NativeExpression", "Description", "IsWritable", "FieldCaption"}),
    #"Lignes groupées" = Table.Group(#"Colonnes permutées", {"Name", "TypeName", "Kind"}, {{"Requêtes", each Text.Combine([Nom Requête],", "), type text}}),
    #"Colonnes permutées1" = Table.ReorderColumns(#"Lignes groupées",{"Requêtes", "Name", "TypeName", "Kind"}),
    #"Lignes triées" = Table.Sort(#"Colonnes permutées1",{{"Name", Order.Ascending}})
in
    #"Lignes triées"

Il y a une limitation, la requête générant le dictionnaire de données doit s'appeler DicoDonnées. Peut-être qu'une prochaine version s’affranchira de cette contrainte.

En espérant que cela pourra vous être utile à quelqu'un.
J'ai trouvé une application : récupérer les types d'une table quand on fait récupère les données pour les utiliser dans un autre classeur.
 
Bonjour,
Perso, j'en vois pas trop l'utilisation, mais c'est un bel exercice.
Je ne sais pas quelle version d'Office tu utilises, mais chez moi, Excel 2024, j'ai une erreur à l'étape #"Colonnes permutées"
Je n'ai pas le champ "IsSigned"
Je te conseille d'ajouter en toute fin "MissingField.Ignore", afin de rendre compatible toute version.

PowerQuery:
#"Colonnes permutées" = Table.ReorderColumns(#"Générer le dico de données",{"Nom Requête", "Name", "Position", "TypeName", "Kind", "IsNullable", "NumericPrecisionBase", "NumericPrecision", "NumericScale", "IsSigned", "DateTimePrecision", "MaxLength", "IsVariableLength", "NativeTypeName", "NativeDefaultExpression", "NativeExpression", "Description", "IsWritable", "FieldCaption"}, MissingField.Ignore),
Bon W-E
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Réponses
16
Affichages
1 K
Réponses
2
Affichages
757
Retour