ypicot
MembreRéponses céées sur le Forum
-
ypicot
Membre16 novembre 2024 à 16h01 en réponse à: Ne pas afficher les weekends et jours fériés dans mon graphiqueBonjour
Il y a deux aspects dans cette question :
- comment créer une table contenant uniquement les dates ouvrées
- comment afficher un visuel ne contenant que lesdites dates
Pour la première partie, j’ai tendance à passer par Power Query, car cela limite (un peu) le nombre de tables inutiles dans la vue modèle de Power BI.
Ma suggestion est donc de créer une table des dates “normale” (la dimDates habituelle) en PQY.
Ensuite créer une requête des jours fériés, soit en récupérant une liste toute faite (par exemple sur https://calendrier.api.gouv.fr/jours-feries/) soit en la créant soit-même dans une source quelconque (Excel, Sql Server, …). Cette dernière solution permet de plus de tenir compte des spécificités l’entreprise, tels que les ponts non officiels ou la période entre Noël et jour de l’an.
Par la suite, une fusion avec une non-correspondance (un des deux dernières options dans le type de jointure) permet de filtrer dimDates avec les dates non travaillées, et d’obtenir un dimDatesOuvrees.
Pour la deuxième partie (création du visuel), il est tout à fait possible d’utiliser le visuel courbe habituel. Simplement, sur l’axe des X, il faut utiliser dimDatesOuvrees, en faisant attention de bien créer sa propre hiérarchie et surtout ne pas utiliser (si elle n’a pas été supprimée) la hiérarchie de dates intégrée.
Résultat : un visuel dans lequel apparaissent ni week-end ni jours fériés (14 juillet)
-
Bonjour
Voici une solution pour supprimer la dernière ligne pour chaque salle.
- Trier la table par salle et par date
- Fare un regroupement par salle, avec une sortie sur deux colonnes (et deux opérations) : une sur “toutes les lignes”, et une autre sur “compter les lignes”
- Ajouter une colonne personnalisée qui ajoute un numéro de ligne (un index) par salle
- Supprimer les colonnes en trop, ici “Salle” et “Table” (pas indispensable, mais c’est plus propre)
- Cliquer sur la double flèche pour développer la colonne NumLigne
- Créer un filtre quelconque. Il s’agit juste d’avoir une base, car nous allons la modifier la formule
- Dans la barre de formule, modifier l’expression du filtre pour ne garder que les lignes dont l’index est différent de NbLignesParSalle. Dans la capture ci-dessous, j’ai ajouté une condition pour ne pas supprimer la salle s’il n’y a qu’une ligne
A titre indicatif, voici le script dont je me suis servi. Il suffit de le coller dans l’éditeur avancé d’une requête vide pour voir les opérations en détail.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCk7MyUlVMFTSUTIw1c1PLlGK1UERNMMmaI5N0AJN0AgoaGiIRRDDImOQoCWaoAlIuwEWQewqoRbFAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Salle = _t, Date = _t]),
#"Type modifié" = Table.TransformColumnTypes(Source,{{"Salle", type text}, {"Date", type date}}),
#"Lignes triées" = Table.Sort(#"Type modifié",{{"Salle", Order.Ascending}, {"Date", Order.Ascending}}),
#"Lignes groupées" = Table.Group(#"Lignes triées", {"Salle"}, {{"Table", each _, type table [Salle=nullable text, Date=nullable date]}, {"NbLignesParSalle", each Table.RowCount(_), Int64.Type}}),
#"Personnalisée ajoutée" = Table.AddColumn(#"Lignes groupées", "NumLigne", each Table.AddIndexColumn( [Table], "Index", 1 )),
#"Colonnes supprimées" = Table.RemoveColumns(#"Personnalisée ajoutée",{"Salle", "Table"}),
#"NumLigne développé" = Table.ExpandTableColumn(#"Colonnes supprimées", "NumLigne", {"Salle", "Date", "Index"}, {"Salle", "Date", "Index"}),
#"Lignes filtrées" = Table.SelectRows(#"NumLigne développé", each ([Index] <> [NbLignesParSalle] or [NbLignesParSalle] = 1))
in
#"Lignes filtrées" -
Bonjour
Vu de ma fenêtre, je ne pense pas que PBI soit idéal pour ce genre de situation.
La solution la plus “simple” que je vois (mais peut-être que je vais être contredit) est de créer des pseudo-codes (ex : “1-1” pour la ligne “marge semi-brute”), utiliser des formules avec des IF plus ou moins alambiquées pour soustraire les charges au CA, …
Si c’est un tableau dont les infos codes, service et TDB1 evoluent peu (donc soit qui est fait une fois par an, soit dont le nombre de lignes ne change pas au cours du temps), je conseillerais un travail dans le PQY d’Excel pour avoir des données propres et regroupées correctement dans un onglet, puis un autre onglet “présentation” qui afficherait les valeurs, avec qques formules (ce que tu as mis en vert).
Mais c’est peut-être ce que tu as déjà fait…
As-tu réellement besoin d’une fonctionnalité PBI qui n’existe pas dans Excel ? Par exemple la publication ?
-
Bonjour
Je n’ai hélas pas de réponse à ta question, mais voici une piste qui te permettrait peut-être de la trouver toi-même :
Rajouter dans les requêtes (donc dans PQY) une colonne qui indique la date de recalcul :
DateTime.LocalNow()
Toutes les valeurs étant les mêmes, l’augmentation de taille du fichier est très faible, voire négligeable.
-
ypicot
Membre25 octobre 2024 à 11h29 en réponse à: Débutant : utiliser un fichier excel dans powerbiBonjour
Réponse simple (voire simpliste) : oui, c’est possible. Une fois que chaque tableau a été récupéré, tu peux les dépivoter : dans Power Query, >> Transformer >> N’importe quelle colonne >> Dépivoter les colonnes (tu as trois options possibles en ouvrant le menu à coté de l’option)
Par la suite, tu as juste à ajouter une colonne personnalisée contenant le nom du salarié.
En fait, la difficulté n’est pas là, mais plutôt dans la récupération des différents tableaux qui se trouvent dans Excel. Vu de ma fenêtre, il est tout à fait possible d’automatiser cette récupération en Power Query, mais cela demande une très bonne connaissance du langage M.
Après, si c’est du one-shoot, par exemple si le traitement n’est pas à faire tous les mois, c’est gérable à la main. Chronophage (et casse-pied), mais gérable.
-
ypicot
Membre24 octobre 2024 à 23h02 en réponse à: Passage du paramètre USERNAME à une procédure stockée SQLBonjour
Il peut y avoir pas mal de raisons pour ne pas passer à DirectQuery, notamment si vous utilisez la RLS (de très nombreuses fonctions ne sont pas compatibles) ou si vos serveurs sont un peu justes.
Pour plus de détails : https://learn.microsoft.com/fr-fr/power-bi/connect-data/desktop-use-directquery
-
Bonjour
Si tu n’as pas trop de cohortes, une solution peut être d’utiliser une première mesure simple :
SumCnt = SUM(Test[cnt])
Puis une formule qui, pour chaque cohorte, détermine s’il y a ou non un résultat, avant de faire la synthèse.
SumCNT_Delta1 =
VAR __CntDelta_1a = CALCULATE( [SumCnt], Test[delta]=1 && Test[cohort]=”a” )
VAR __CntDelta_1b = CALCULATE( [SumCnt], Test[delta]=1 && Test[cohort]=”b” )
VAR __CntDelta_Xa = NOT(ISBLANK(CALCULATE( [SumCnt], Test[cohort]=”a” ))) + 0
VAR __CntDelta_Xb = NOT(ISBLANK(CALCULATE( [SumCnt], Test[cohort]=”b” ))) + 0
VAR __CntDelta_1 =
__CntDelta_Xa * __CntDelta_1a +
__CntDelta_Xb * __CntDelta_1b
RETURN __CntDelta_1En espérant que cela réponde à ta question
-
ypicot
Membre24 octobre 2024 à 12h06 en réponse à: Intégrer un paramètre dans un script Python de Power BIBonjour
A ma connaissance, pour définir la valeur d’un paramètre en M à partir d’un segment dans Power Query, il existe une solution mais uniquement quand on est en DirectQuery.
Cette limitation est précisée dans le premier paragraphe de https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-dynamic-m-query-parameters
Une solution (imaginée mais pas testée) serait de réaliser le segment en PowerApps lui-même intégré dans le rapport PBI, qui enverrait la valeur sélectionnée dans une table quelconque, table qui serait ensuite récupérée par Power Query.
Un peu capilotractée, mais bon…
-
ypicot
Membre3 septembre 2024 à 10h39 en réponse à: Les totaux d’une table Power Bi sont incohérentsBonjour
C’est une histoire de contexte de calcul.
Quand tu fais :
SUMX(…, Base Vente'[Délais OK])/COUNT(‘Base Vente'[Délais OK])<0.9, …)
Le numérateur s’appliquer bien à la ligne en cours, mais le COUNT s’applique à l’ensemble des lignes du contexte.
(pour la suite, je suis bloqué : l’image de ton msg initial n’apparait plus dans mon navigateur, donc je ne sais plus ce que tu veux obtenir )
Yvan
-
Bonjour
Une idée à chaud, sans avoir testé : créer un script PowerShell lancé par Power Automate. Ce script exécutera une ligne de commande de mysql qui importera les données (qque chose type “mysql –user=monuser –password=monpw dbname < file.sql”)
Cela te permet d’importer au format SQL ou au format CSV (LOAD DATE INFILE, si ta config le permet).
Inconvénient de taille : tu es obligé d’indiquer le mot de passe du compte mysql dans le script
Même si tu créés un compte qui ne sert qu’à cela (merci le GRANT), cela fait un trou dans la sécurité.Yvan
- Cette réponse a été modifiée Il y a 2 mois, 3 semaines par ypicot.
-
Bonjour
Difficile de répondre sans avoir ni le modèle, ni les formules.
En ce qui concerne la disparition de la hiérarchie quand tu rajoutes la table des dates, c’est normal. L’idée est :
- dans la table des dates, d’ajouter les champs qui t’intéressent (année, trimestre, mois, …).
- par la suite, d’utiliser exclusivement les données de la table des dates (on “oublie” le champ date qui se trouve dans ta table de faits)
- de créer ladite hiérarchie à la main. Pour cela deux solutions sont possibles. La plus simple (à mon avis) consiste à glisser successivement, et dans le bon ordre, les champs idoines de la table des dates
Petit piège classique : si tu utilises le nom des mois dans la table de dates, ceux-ci apparaitront dans l’ordre alphabétique. Il est impératif d’avoir le numéro du mois MONTH( [date] ) et dans les outils de colonne, de trier le mois texte par le mois numérique.
Yvan
-
Bonjour
L’ajout d’une table intermédiaire qui contiendrait la date de début et la date de fin, mais également la clé primaire de la prestation et la clé primaire de la société te permet de résoudre ce problème, qui est un classique de la relation “N à N”.
Après, si tu t’intéresses uniquement aux prestataires actuels (et que donc tu ne souhaites jamais afficher les anciens), tu peux au niveau de Power Query rajouter un filtre qui supprime les anciens. De cette manière, PowerBI ne “verra” que les nouveaux.
Yvan
-
Bonjour
Vu de ma fenêtre, il te manque une table entre les entreprises et les contrôles prestation. Cette table pourra notamment contenir la date de début et la date de fin de la prestation, ou au pire un champ “en cours / terminé”.
Yvan
-
ypicot
Membre8 août 2024 à 23h32 en réponse à: Contexte d’évaluation DAX – calcul de taux d’occupationBonjour
Peux-tu poster les formules que tu as utilisées ? Ou, mieux, partager un pbix contenant un extrait du fichier ?
Yvan
-
ypicot
Membre8 août 2024 à 23h27 en réponse à: Evolution de deux mesures différentes selon un filtre choisitBonjour
Difficile de répondre comme cela. Pourrais-tu partager un pbix contenant un extrait du fichier ?
Yvan