Accueil – Le CFO masqué › Forums › Power Query › Variable représentant une requête
- Ce sujet contient 9 réponses, 2 participants et a été mis à jour pour la dernière fois par
e.chevron, le il y a 3 années et 7 mois.
-
AuteurMessages
-
29 août 2021 à 12 h 30 min #94893
e.chevron
ParticipantBonjour à toutes et tous !
Je cherche comment passer une requête à une variable pouvant aussi représenter une table Excel :
let fxMaFonction = (NomSource, SourceEstTypeRequete) => let Variable1 = if SourceEstTypeRequete then // C'est ici que je voudrais mentionner la requête Power Query nommée NomSource else Excel.CurrentWorkbook(){[Name=NomSource]}[Content], // car si la source n'est pas une requête, c'est une table, Resultat = bla bla bla in Resultat in fxMaFonction
En vous remerciant par avance de vos réponses 🙂
30 août 2021 à 2 h 19 min #94903Stéphane Lorin
ParticipantBonjour
Pour faire référence à votre requête “NomSource” il faut utiliser la fonction Expression.Evaluate(NomSource,#shared).
C’est un peu l’équivalent de la fonction INDIRECT dans ExcelStéphane
9 septembre 2021 à 10 h 38 min #95227e.chevron
ParticipantBonjour Stéphane, et un grand merci pour cette réponse qui me permet de résoudre mon problème, et que je n’aurais sans doute pas trouvé seul.
J’avoue cependant, même après lecture de ce que j’ai pu trouver sur le web, avoir du mal à comprendre le #shared dans l’expression…
Encore un grand merci pour vos réponses toujours pertinentes.
9 septembre 2021 à 11 h 43 min #95229e.chevron
ParticipantRe-bonjour Laurent.
En fin de compte, votre solution fonctionne parfaitement dans le code lui-même, mais j’obtiens du coup l’erreur suivante dans plusieurs requêtes du même projet :
Formula.Firewall : Requête « Calendrier » (étape « Source ») référence Requête « qrySaisie » (étape « Table Triée »), qui ne fait pas partie du texte de sa formule.
qrySaisie est une requête important et traitant une table locale tableSaisieFacturation. Elle est la requête principale du projet et sert de source ou est rattachée à plusieurs autres.
L’étape “Table Triée” est la dernière de cette requête.Calendrier est le résultat de l’appel à la fonction fxGenererCalendrier, un générateur de calendrier du même type que celui intégré dans Power Pivot sur lequel je travaille et pour lequel vous venez de m’aider.
Les bornes de cette requête Calendrier se fondent sur les dates de qrySaisie, via cette fonction fxGenererCalendrier.Les requêtes dans lesquelles se produit l’erreur sont toutes celles qui se réfèrent à qrySaisie dans leur étape Source.
L’erreur ne se produit plus et l’ensemble du projet fonctionne à nouveau lorsqu’au lieu de passer en paramètre de la fonction fxGenererCalendrier la requête qrySaisie, je passe sa source tableSaisieFacturation.
Voici l’extrait du code (dont vous êtes du coup co-auteur) qui permet de passer en paramètre soit une table soit une requête :
// Connexion à la table/requête source, ou aux tables/requêtes sources s'il y en a 2 lstSourceDebut = if optSourceEstTypeRequete then Expression.Evaluate(strNomSource1, #shared) else Excel.CurrentWorkbook(){[Name=strNomSource1]}[Content], lstSourceFin = if optSourceEstTypeRequete then Expression.Evaluate(strNomSource2, #shared) else Excel.CurrentWorkbook(){[Name=strNomSource2]}[Content],
et voici les premières lignes d’une requête dépendante, jusqu’à l’étape qui provoque l’erreur en question :
Let Aujourdhui = DateTime.Date(DateTime.LocalNow()), Source = qrySaisie, #"Fusion qryTva" = Table.NestedJoin(Source, {"Date"}, qryTva, {"Date"}, "qryTva", JoinKind.LeftOuter),
Note : la requête fusionnée qryTva fonctionne très bien, sans doute parce qu’elle se fonde sur une table locale et non sur qrySaisie.
D’avance merci pour votre retour 🙂
9 septembre 2021 à 11 h 44 min #95230Stéphane Lorin
ParticipantMerci du retour
Dans ce que j’en comprends, #shared c’est un peu la “bibliothèque” de Power Query. Toutes les fonctions, les mots clés y sont stockés ainsi que les requêtes de votre fichier
Dans votre cas, vous demandez d’évaluer une chaîne de caractère (le nom de votre requête) dans cette bibliothèque.Tapez =#shared dans une requête vide et vous pourrez la voir en entier (pas loin de 1000 lignes)
Stéphane
9 septembre 2021 à 11 h 52 min #95232Stéphane Lorin
ParticipantEssayez de modifier un paramètre dans Fichier/Option et paramètres/Option de requête/confidentialité
9 septembre 2021 à 11 h 54 min #95233e.chevron
ParticipantTapez =#shared dans une requête vide et vous pourrez la voir en entier (pas loin de 1000 lignes)
Wahoooooo !!!!
Mais pourquoi on ne trouve pas cette astuce partout ?
C’est juste énorme, ça semble donner accès à toutes les fonctions et à leur aide locale en Français, plus tout le contenu du projet !
C’est juste énorme !Encore un grand merci !
9 septembre 2021 à 12 h 09 min #95234e.chevron
ParticipantEssayez de modifier un paramètre dans Fichier/Option et paramètres/Option de requête/confidentialité
Après avoir suivi ce conseil, et sans résultat apparent, j’ai consulté l’aide sur les paramètres de confidentialité et j’ai lu que ceux liés à la source de données (et non à la requête) pouvaient avoir un impact sur le fonctionnement global des requêtes.
Ceux de mon classeur étaient sur “Aucun”. Je les ai juste revalidés et tout est rentré dans l’ordre.
J’ai rétabli les paramètres de confidentialité des requêtes sur l’option “Combiner les données en fonction des paramètres de confidentialité de chaque fichier”, ce qui n’a pas altéré le fonctionnement de mes requêtes.Je vais donc profiter de votre piste et creuser cette histoire d’options PowerQuery.
Encore merci à vous pour votre aide précieuse, en espérant pouvoir vous renvoyer l’ascenseur un de ces quatre (en VBA peut-être ?).
9 septembre 2021 à 12 h 48 min #95235Stéphane Lorin
ParticipantConcernant ce #shared et la liste des fonctions, on ne trouve pas “partout” cette astuce mais elle est détaillée dans le livre “Power Query et le langage M” aux éditions ENI de Frédéric Le Guen et Cathy Monier qui est déjà intervenue que ce site. C’est avec ce livre et le site de Sophie que j’ai débuté il y a quelques années. Merci 🙂
Vous la trouverez également dans le blog de Ben Gribaudo qui a écrit une série vraiment très pointue sur Power Query.
https://bengribaudo.com/blog/2021/07/12/5809/power-query-m-primer-part21-identifier-scope-sections#more-5809Stéphane
10 septembre 2021 à 0 h 45 min #95261e.chevron
ParticipantC’est aussi avec cet ouvrage que j’ai débuté il y a quelques mois.
Je le trouve extrêmement bien fait, j’y ai appris et compris énormément de choses sur PowerQuery, mais je n’avais pas vu ce point.
Ca m’incite à le reprendre plus en détails, et ceci dit en passant, je le conseille à tout utilisateur de cet outil, qu’il soit débutant ou confirmé.Quant au blog, je le découvre grâce à vous et je sens que je vais y passer quelque temps 😉
Encore merci, en espérant que notre échange puisse aussi profiter à d’autres.
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.