Toutes mes réponses sur les forums
-
AuteurMessages
-
philippe.muniesa
ParticipantStéphane,
J’ai fini par trouver une solution (batarde, mais qui me convient).
je récupère ma table d’origine dans Excel, puis je rajoute une colonne Alea avec la fonction Alea(). Puis je sauvegarde le fichier Excel
Ensuite, les différents traitements sont réalisés à partir de la récupération dans PQ de cette table EXCEL.
J’aurais aimé tout faire dans PQ mais c’est plus compliqué et moins efficace.
Cordialement
PH MUNIESA
philippe.muniesa
ParticipantStéphane;
Merci pour cette réponse que je consulte tardivement (j’étais sur mon projet sur d’autres problèmes 🙂 ),
Cependant, je ne vois pas bien la différence avec une colonne normale ni pourquoi PowerQuery ne donne pas le résultat escompté avec l’usage de cette formule.
Je continue à cherche une solution
cordialement
Philippe
philippe.muniesa
ParticipantMerci,
Mon but est de fournir un tableau Excel permettant de contrôler la cohérence des données comptables.
Les données ne sont pas évolutives, et il est clair qu une fois le tableau construit, il ne doit pas y avoir de mises à jour, car comme vous dites, le tableau sera reconstruit.
Merci
Cordialement
PH Muniesa
philippe.muniesa
ParticipantSuite du message précédent. Avec mes excuses un Enter intempestif. Je recommence.
re-bonsoir,
J’ai besoin de créer un tableau dans excel qui est construit comme un TCD, mais dans PQ et dont le résultat est un simple tableau excel dans lequel les utilisateurs pourront créer des colonnes personnalisée, ce que ne permet pas le TCD.
ce serait simple si les colonnes à agréger étaient toujours les mêmes, mais il s’agit d’écritures comptable (ventes). Chaque compte utilisé (compris dans la colonne CompteNum) donne lieu à la création d’une colonne avec la fonction basculer..
Par la suite, il faut agréger ces colonnes en fonction du numéro de pièce colonne PieceREF.
Comme le nombre de comptes et les numéros de compte sont variables d’une entreprise à une autre ou d’une période à l’autre, il faut que l’agrégation des colonnes soit dynamique.
J’ai donc généré la liste des colonnes à agréger, mais la fonction Table.Group me pose des problèmes.
Si un sachant peu m’aider à avancer, je joins un fichier excel avec, un extrait de la table d’origine, le résultat que je souhaite obtenir, et mes requêtes dans l’état actuel d’avancement. La requête Output, est celle qui coince avec une erreur sur table.goupe dont j’ai adapté la syntaxe à partir de mes recherches, mais visiblement, ça ne va pas
Merci d’avance
Philippe Muniesa
Attachments:
You must be logged in to view attached files.9 juillet 2020 à 16 h 52 min en réponse à : Référence à étape de requête dans une autre requête #71090philippe.muniesa
ParticipantRe-Bonsoir,
Je planche sur un autre problème, je cherche à obtenir ce que fait un tableau croisé dynamique, mais sous la forme d’un simple tableau Excel, car ce tableau pourra être agrémenté de colonne que l’utilisateur pourra personnaliser et utiliser dans EXCEL,. ce que ne permet pas un TCD
Le problème est qu’il s’agit d’une base comptable, et que les colonnes agrégées devront correspondre aux numéros de compte utilisés dans la colonne CompteNum de cette base, le nombre de ces numéros de compte étant variable d’un cas à l’autre, cette agrégation doit être dynamique.
J’ai commencé par basculer la colonne des numéro des compte en indiquant la colonne montant comme colonne des valeurs. Mais je coince au niveau de l’agrégation. L’agrégation doit être faite sur la base de la colonne PeiceRef.
Je pensais m’en sortir avec Table.Agregate.TableColumn ,mais visiblement, soit j’utilise mal la fonction, soit elle n’est pas adaptée.
Ci-joint un fichier excel avec base de départ, le résultat souhaité, et les requêtes dans l’état actuel de mes réflexions.
J’ai pu créer la liste des colonnes à agréger, en créant une liste , mais pour la suite j’aurais besoin d’un coup de pouce.Merci aux sachants pour leur aide précieuse.
Cordialement
Ph Muniesa
Attachments:
You must be logged in to view attached files.9 juillet 2020 à 16 h 36 min en réponse à : Référence à étape de requête dans une autre requête #71088philippe.muniesa
ParticipantSophie,
Merci de cette réponse.
Ce que j’envisageais n’est donc pas possible, je garde donc ma méthode actuelle qui fonctionne.Cordialement
PH MUNIESA
philippe.muniesa
ParticipantMerci,
Je suis arrivé à faire ce que je voulais, pour ceux que ça pourrait intéresser, je vous joins mon fichier Excel contenant le code Langage M, et le fichier texte d’origine.
Le chemin du fichier Texte est paramétrable dans la feuille Excel “paramètres”
Maintenant j’ai un second problème que je ne vois pas comment résoudre.
Les fichiers texte peuvent utiliser deux séparateurs au choix, soit tab (tabulation) , soit | (alt+M).
Je souhaiterais reconnaitre le séparateur utilisé avant de faire le split
L’idée serait de lire le fichier sans délimiteur, et de tester si il contient des | , puis de faire un drillDown et d’utiliser ce paramètre dans la requête de split.
J’ai cherché dans Table.FindText ou d’autres instructions, mais je coince.
Une âme charitable pourrait-elle me donner un tuyau.
Merci d’avance.
Philippe Muniesa
Attachments:
You must be logged in to view attached files.philippe.muniesa
ParticipantSophie,
Merci de votre intérêt à ces questions de débutant, mais je pense avoir mal posé ma question.
La mesure ci-après issue du cours donne sur chaque ligne le total correspondant à l’expression Ventes_$ évaluée selon le contexte de filtre explicite. Par ailleurs, dans le tableau croisé dynamique en résultant (excel 2019) de la colonne correspondante, on obtient le total 6944170 qui correspond au total de l’année 2014 pour Ventes_$ de 2014
Ventes$YTDMaison:=CALCULATE([Ventes_$];
FILTER(
ALL(DimDates[Date]);
DimDates[Date]>= DATE(MAX(DimDates[Année]);1;1)
&& DimDates[Date]<=MAX(DimDates[Date])))La Mesure suivante adaptée de la première en utilisant DATE(MAX(DimDates[Année]);MAX(DimDates[mois]);1) au lieu de DATE(MAX(DimDates[Année]);1;1), fait apparaitre sur chaque ligne le cumul de ventes mensuel correspondant bien au filtre explicite. Cependant le total de la colonne du tableau croisé dynamique dans lequel cette mesure est utilisé est à 0. C’EST CE QUE JE NE COMPRENDS PAS puisque en toute logique, si la première mesure produit une colonne dont le total est celui de l’année 2014 (l année de la dernière vente de la table VENTES); la seconde mesure devrait produire une colonne dont le total devrait être le montant des ventes du dernier mois de la table des ventes, soit 06/2014 1089940.
Ventes_$MTDMaison2:=CALCULATE([Ventes_$];
FILTER(
ALL(DimDates);
AND(DimDates[Date]>= DATE(MAX(DimDates[Année]);MAX(DimDates[mois]);1);
DimDates[Date]<=MAX(DimDates[Date]))
)
)Et ceci comme la mesure Ventes_$MTD:=CALCULATE([Ventes_$];DATESMTD(DimDates[Date])) dont la colonne présente bien le total 1089940.
Sans titre 3.png.png
Dans le même esprit, et toujours dans l’objectif de comprendre le fonctionnement des formules Timeintelligence et de DAX, j’ai construit la mesure ci-dessous (maxx et Startofmonth).
Ventes_$MTD_Maison:=Calculate([Ventes_$];
Filter(All(DimDates[Date]);And(DimDates[date]>= maxx(Dimdates;STARTOFMONTH(Dimdates[Date]));
DimDates[Date]<=maxx(Dimdates;Dimdates[Date]))))Dont la colonne fait apparaitre un total identique à la mesure Ventes_$MTD, soit 1089940
Enfin une autre mesure censés pour moi avoir les mêmes effets, produit également une colonne sans total.
Ventes$MTD_Maison4:=CALCULATE([Ventes_$];
FILTER(
ALL(DimDates);
(DimDates[Année]=MAX(DimDates[Année])
&& DimDates[Mois]=MAX(DimDates[Mois])
&& DimDates[Date]<=MAX(DimDates[Date]))))Vous l’aurez compris, ce qui m’échappe c’est les conditions pour lesquelles, le total général de colonne est renseigné d’un total ou pas.
Merci à vous
Cordialement
Philippe Muniesa
Attachments:
You must be logged in to view attached files.philippe.muniesa
ParticipantOk Sophie, merci
Effectivement après vérification et utilisation de la mesure, elle fonctionne correctement.
En fait, en tant que mesure, elle retourne (vide) et c’est ce qui m’a fait penser qu’elle ne fonctionnait pas, mais placée dans un TCD ELLE EST OK.
CE que je ne comprends pas c est que la mesure initiale avec Max(dimdates[annees]) seulement retourne un total en bas de colonne, et que la formule avec [annees] et [mois], mais identique par ailleurs, retourne un total de colonne.
Il y a deux années dans la table et douze mois pour chaque année, donc des conditions similaires.
Y a t il une raison spécifique que je ne vois pas à cette différence de fonctionnement au niveau des totaux de colonne?.
Merci d’avance
Philippe
philippe.muniesa
ParticipantOk
C’est fait
Merci
Philippe
philippe.muniesa
ParticipantStéphane,
Merci pour Ces techniques qui permettent de s’affranchir des noms de colonne, et des casses tête que ça pose quand le nombre de colonnes ou leur nom est modifié dans une procédure.
Cordialement
Philippe Muniesa
philippe.muniesa
ParticipantMerci,
Je vais essayer votre solution, mais j’imaginais une solution où l’on ne fait pas référence aux noms des colonnes, mais à leur rang dans la liste des colonnes
Tout simplement en indiquant Table.DeplaceColumns(5,1) ou quelque chose de similaire.(malheureusement cette instruction ne semble pas exister).
Ce qui m ennuie avec table.Reorder, c’est qu’il faut lister tous les noms des colonnes présentes dans la table.
Cordialement
Philippe Muniesa
philippe.muniesa
ParticipantBonjour,
Je me réponds à moi-même,car je viens d’avoir la réponse en reprenant le détail de la formation Power Query et initiation au langage M.
C’est une convention du langage M qui stipule que lorsque le nom d’une étape ou d’une colonne contient un espace, la référence à ce non doit être encadré de guillemets ” ” (comme dans beaucoup de langages ou formule), mais il doit aussi être précédé d’un #.
dont j’en conclus que pour la simplicité, il faut éviter les espaces et préférer des noms de colonne ou des noms d’étapes sans espace, en remplaçant par exemple par — “underscore”
ainsi il suffira de faire référence au nom de colonne ou d’étape, sans avoir à utilise le # et entourer ce nom de “”
bon courage à tous.
Philippe
philippe.muniesa
ParticipantStéphane et Sophie,
Merci à vous deux.
Tip Top ces fonctions qui permettent d’éviter des modifications de table (remplacement de null par 0 ou par (rien)),
Maintenant que null soit considéré comme 1 avec List.Product et qu’il ne puisse tout simplement être considéré comme un champ vide (puisque par ailleurs Vide = 0 ou rien) me laisse toujours aussi perplexe.Dans Excel une cellule vide = 0 ou rien, elle peut être utilisée en tant que tel dans des opérations arithmétiques ou dans des concaténations. Le remplissage automatique des cellules vides dans Excel fonctionne à peu près comme remplir vers .. avec les champs null.
Bon, il suffit de le savoir, mais microsoft pourrait avoir la bonne idée d’harmoniser les principes de base entre Power Query et Excel.
Cordialement
Philippe
philippe.muniesa
ParticipantStéphane,
Super, merci pour le tuyau,
J’essaie ça dans la journée.
Philippe
-
AuteurMessages