Toutes mes réponses sur les forums
-
AuteurMessages
-
Stéphane Lorin
ParticipantBonjour
la fonction Expression.Evaluate peut répondre à votre besoin
each Date.DayOfWeek([Date],Expression.Evaluate(“Day.Monday”,#shared))
Day.Monday est ici du texte (donc paramétrable) et Expression.Evaluate va évaluer cette chaine de caractères dans l’environnement #shared qui contient toutes les fonctions M.
l’argument #shared est obligatoire, sinon la chaîne de caractères sera évaluée comme… une chaîne de caractère !
Il faut reconnaitre que l’aide de Microsoft n’est pas très claire sur cette fonction.
https://docs.microsoft.com/fr-fr/powerquery-m/expression-evaluateStéphane
Stéphane Lorin
ParticipantBonjour
il faut mettre le nom de la mesure avant le VAR :
Rang = VAR Region= Feuil1[Region]
RETURN RANKX(FILTER(Feuil1,Feuil1[Region]=Region),Feuil1[Pop])Stéphane
Stéphane Lorin
ParticipantBonjour
Je vous propose la formule DAX suivante
VAR Region= Tableau1[Region]
RETURN RANKX(FILTER(Tableau1;Tableau1[Region]=Region);Tableau1[Pop])j’obtiens bien le résultat de la colonne E de votre ficher Excel
Cordialement
StéphaneStéphane Lorin
ParticipantBonjour
Pour commencer vous pourriez nous remercier Christian et moi d’avoir répondu à votre question d’hier, j’ai pris le temps de répondre alors qu’il l’avait déjà fait n’ayant pas remarqué que vos deux messages étaient similaires.
Ensuite, la fonction DateTime.LocalNow() se met bien à jour pour moi lorsque je charge la requête Power Query en tableau ou en rapport de tableau croisé dynamique ou encore dans le modèle de données. Il faut bien actualiser l’objet (la table ou le TCD)
Stéphane
28 avril 2021 à 9 h 38 min en réponse à : Comparaison 3 dates fixes qui se renouvelle chaque jours #90003Stéphane Lorin
ParticipantBonjour
Vous ne pouvez pas le faire directement dans Power Query, il faut modifier le code à la main mais rien de compliqué.Pour commencer vous faites un filtre sur le champ StartDate <= 28/04/2021
puis avec l’option “Avancé” vous ajoutez un filtre sur le champ EndDate >= 28/04/2021cela donnera le code suivant :
Table.SelectRows(Votre_étape_précédente, each [StartDate] <= #date(2021, 4, 28) and [EndDate] >= #date(2021, 4, 28))ensuite vous modifiez à la main le filtre en remplaçant la date par le champ [DateActuelle]
Table.SelectRows(Votre_étape_précédente, each [StartDate] <= [DateActuelle] and [EndDate] >= [DateActuelle])
Cordialement
Stéphane
27 avril 2021 à 16 h 04 min en réponse à : Problème fonction CALCULATE via PowerPivot sous Excel 2010 #89987Stéphane Lorin
ParticipantBonsoir
Si CALCULATE pose problème, avez-vous essayé avec SUMX ?
SUMX(FILTER(BASE_1;[ANNEE]=2019);[CA HT])
Cordialement
Stéphane27 avril 2021 à 10 h 56 min en réponse à : Projection mensuelle d’une valeur entre 2 dates dans une matrice #89950Stéphane Lorin
ParticipantBonjour
Je vous propose un code Power Query qui transforme votre tableau de départ en votre “résultat attendu”
Le principe est d’ajouter une liste de 0 à n avec n le nombre de mois d’écart entre le début et la fin.
Comme il n’y a pas de fonction de différence de mois, j’utilise la différence de jours Duration.Days divisée par 30 et j’ajoute 1 par sécurité (pour gérer les arrondis et les mois qui ne font pas 30 jours), j’ajoute Number.IntergerDivide pour arrondir à l’entierLa liste est donc obtenue via
{0..Number.IntegerDivide(Duration.Days([Date prévi fin] – [Date prévi début]),30)+1}Ensuite je développe la liste en ligne et j’utilise la fonction Date.AddMonths
En dernière étape je filtre sur les dates périodes supérieures à la date de fin.Code sous Excel à adapter à PBI
let
Source = Excel.CurrentWorkbook(){[Name=”TblProjets”]}[Content],
#”Type modifié” = Table.TransformColumnTypes(Source,{{“Projet”, type text}, {“Date prévi début”, type date}, {“Date prévi fin”, type date}, {“Direction”, type number}, {“Chef de projet”, type number}}),
Liste = Table.AddColumn(#”Type modifié”, “Liste Ajout Mois”, each {0..Number.IntegerDivide(Duration.Days([Date prévi fin] – [Date prévi début]),30)+1}),
#”Liste Ajout Mois développé” = Table.ExpandListColumn(Liste, “Liste Ajout Mois”),
#”Personnalisée ajoutée” = Table.AddColumn(#”Liste Ajout Mois développé”, “Date période”, each Date.AddMonths([Date prévi début],[Liste Ajout Mois]), type date),
#”Lignes filtrées” = Table.SelectRows(#”Personnalisée ajoutée”, each [Date période] <= [Date prévi fin]),
#”Autres colonnes supprimées” = Table.SelectColumns(#”Lignes filtrées”,{“Projet”, “Date période”, “Direction”, “Chef de projet”})
in
#”Autres colonnes supprimées”Cordialement
Stéphane
27 avril 2021 à 10 h 07 min en réponse à : Création d’une mesure ou d’une colonne avec des conditions #89937Stéphane Lorin
ParticipantBonjour
Je vous propose une autre approche :
Sous Excel votre formule serait =SOMME(DECALER([@TV020];;;1;[@[E_SEC_VITS_REG]]))
Avec PowerQuery, cela se traduit en List.Sum(List.Range(Record.ToList(_),5,[E_SEC_VITS_REG]))
le caractère _ vous permet de récupérer l’enregistrement actuel
la fonction Record.ToList transforme cet enregistrement en liste
A partir de la 5e colonne vous voulez faire la somme de 2, 4 ou 8 éléments soit la valeur du champ [E_SEC_VITS_REG] : la fonction List.Range(Liste,5,[E_SEC_VITS_REG]) répond à ce besoin
Il ne reste plus qu’à faire la somme avec List.Sumcordialement
Stéphane
27 avril 2021 à 6 h 14 min en réponse à : Calculer le délai de travail entre deux dates Power BI (DAX) #89922Stéphane Lorin
ParticipantBonjour
Vous dites ne pas avoir tout compris.
A quelle étape bloquez-vous ?
J’ai déjà expliqué en détail ma démarche le 15 janvier et le 16 février. Je ne vais pas reprendre de nouveau ces explications mais je peux préciser un point ou deux au besoin.Cordialement
StéphaneStéphane Lorin
ParticipantBonjour Kaelig
Auriez-vous un exemple simplifié et réduit de ce que vous souhaitez sous PowerBI desktop ?
Ce serait plus aisé pour vous aider.
Stéphane27 avril 2021 à 6 h 01 min en réponse à : POWER BI: Regrouper deux lignes "Texte" en fonction d'un même critère #89920Stéphane Lorin
ParticipantBonjour Baptiste
Vous pouvez regarder le sujet “regrouper puis étendre en colonnes” dans la rubrique “Power Query” du forum. Le 4 avril j’expliquais qu’il était possible d’utiliser la fonction Table.Group puis de remplacer à la main un List.Sum par un Text.Combine pour obtenir ce que vous désirez.
Cordialement
Stéphane
Stéphane Lorin
ParticipantBonjour
Connaissez vous le site de Ben Gribaudo ?
Il a consacré un article début 2020 sur la gestion des erreurs dans Power Query
https://bengribaudo.com/blog/2020/01/15/4883/power-query-m-primer-part-15-error-handlingJe conseille par ailleurs la lecture de toute sa série de 20 articles, c’est parfois ardu mais c’est une mine d’information sur ce langage.
Cordialement
StéphaneStéphane Lorin
ParticipantBonjour
Votre phrase “J’ai regroupé, pivoté, dépivoté dans tous les sens, impossible d’obtenir le résultat voulu.” m’amène à la réflexion suivante : la fenêtre d’aide pour la création de regroupement dans PowerQuery est très limitée par rapport aux possibilités immenses de la fonction Table.GroupDans votre cas, comme votre colonne “email” est du texte vous ne pouvez que “compter les lignes” ou récupérer “toutes les données”. Faire la somme, la moyenne, le max ou le min n’est pas intéressant.
Si vous choisissez “Faire la somme” de votre colonne “Email”, each List.Sum([email]) vous renverra une erreur. Normal puisque qu’il n’est pas possible de faire la somme de texte.
Alors que de nombreuses fonctions “List” ou “Text” sont possibles.
Par exemple vous pouvez concaténer toutes vos adresses en utilisant Text.Combine
each Text.Combine([email],”;”) vous retourne “email1;email2;email3”
et ainsi il ne vous reste plus qu’à fractionner la colonne suivant le “;” pour obtenir le résultat attendu en 2 étapes seulement (un Table.Group puis un Table.SplitColumn)Autre exemple pour simplifier la solution proposée par Kim
Lorsque vous indiquez dans l’agrégation “Toutes les données” each _, type table vous obtenez une table.
Ce “_” indique votre table initiale filtrée avec les lignes correspondant à votre regroupement
il suffit d’ajouter un Table.AddIndexColumn devant pour récupérer directement le n° de la ligne
each Table.AddIndexColumn(_,”Index”), type table. il ne reste plus qu’à développer les colonnes et à pivoter la colonne “Index”.Cette fonction Table.Group possède également 2 arguments optionnels : GroupKind (Local ou Global) et Comparer (n’importe quelle fonction pour spécifier les regroupements). Ces arguments ne sont pas disponibles directement et nécessitent d’entrer dans le code M. Mais les possibilités de regroupement sont décuplés.
Cordialement
StéphaneStéphane Lorin
ParticipantBonjour
ci-joint un exemple sous Excel avec une table produit, une table de date
Une mesure pour compter de nombre de produit “actif” sur la période considérée (mois ou semaine)
Nombre:=COUNTROWS(FILTER(Liste_Produits;Liste_Produits[Fin]>=MIN(Liste_Date[Date])&&Liste_Produits[Début]<=MAX(Liste_Date[Date])))
une autre pour récupérer la liste des produits
Liste:=CONCATENATEX(FILTER(Liste_Produits;Liste_Produits[Fin]>=MIN(Liste_Date[Date])&&Liste_Produits[Début]<=MAX(Liste_Date[Date]));Liste_Produits[Produit];”,”)
une restitution par semaine ou par mois en tableau croisé dans Excel
à adapter dans PowerBICordialement
Stéphane
Attachments:
You must be logged in to view attached files.31 mars 2021 à 8 h 12 min en réponse à : Transformer facilement des entête de colonnes en lignes #88895Stéphane Lorin
ParticipantBonjour
Il y a une transformation dédiée dans powerquery pour ce genre de problématique.
Il faut sélectionner votre colonne “centre” et “dépivoter les autres colonnes” (menu transformer ou par clic-droit)
Stéphane
-
AuteurMessages