IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Power BI Discussion :

Cumul des max d'une colonne


Sujet :

Power BI

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2021
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Cumul des max d'une colonne
    Bonjour,
    Besoin d'un petit coup de main svp!
    J'ai une colonne avec des valeurs décimal Compteurs AA. Je dois récupérer le max de chaque mois. ( ce que j'arrive à faire en choisissant max sur ma valeur au lien de somme dans mon tableau ou graphique)
    Je dois ensuite faire le cumule de tous les max de chaque mois pour obtenir la courbe correspondante. Ce que je n'arrive pas à faire car avec la mesure rapide des cumuls il me fait la somme de toutes les valeurs du mois et non pas que du max.

    Comment je fais pour avoir le cumul de mes max de chaque mois?

    Détail:
    Colonne compteur AA: Janvier 0 10 8 273 février 23 45 12 346 mars 36 25 12 393
    Je veux pour résultat Cumul max= max janvier + max fevrier +max mars = 273 + 346 + 393 = 1012
    Images attachées Images attachées  

  2. #2
    Membre averti
    Homme Profil pro
    Ctrl Gestion
    Inscrit en
    Octobre 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ctrl Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 172
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Une mesure comme ça donne le résultat attendu soit 1012.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_CumulAnnuel:=CALCULATE(SUM(Tableau1[Nombre]);ALL(Tableau1[Mois]))
    Tableau1 : représente le nom de la table
    Nombre : représente le nombre d'heures d'utilisation
    La fonction ALL(Tableau1[Mois]) permet de calculer le total du compteur AA pour toutes les périodes.
    Cordialement
    DanixDB

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2021
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    merci de te pencher sur mon pb.
    J'ai essayé la formule et cela ne fonctionne pas:
    1- Je dois remplacer le ; par une ,
    2- une fois qu'il veut bien me prendre ma formule il me fait la somme de toutes les valeurs de ma colonne mais pas la somme des max

    J'ai raté un truc?

    Nom : Capture d’écran 2021-03-18 142234.jpg
Affichages : 154
Taille : 55,6 Ko

  4. #4
    Membre averti
    Homme Profil pro
    Ctrl Gestion
    Inscrit en
    Octobre 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ctrl Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 172
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Peut-être ai-je mal compris comment les données d'entré étaient présentées.

    Je suis parti du principe qu'elles étaient présentées comme suit :
    Compteur Mois Valeur
    D'après l'image écran de votre dernier post, cela semble ne pas correspondre à ce que j'ai supposé.

    Vous serait-il possible de fournir une image écran de ces données d'entrés ?
    Cordialement
    DanixDB

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2021
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Oui bien sûr.
    Merci encore à vous.

    Nom : Capture d’écran 2021-03-18 173031.jpg
Affichages : 165
Taille : 273,8 Ko

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2021
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Le plus simple pour moi, serait de pouvoir créer une colonne avec le max de chaque mois pour chaque compteurs dans ma table.
    cela m'éviterait de faire du dax que je ne maitrise pas du tout.

  7. #7
    Membre averti
    Homme Profil pro
    Ctrl Gestion
    Inscrit en
    Octobre 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ctrl Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 172
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    1 - Requête Power query basée sur tes données (j'en ai pris qu'un extrait pour faire le test de la valeur maxi par mois et du cumul annuel)
    En voici le texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    let
        Source = Excel.Workbook(File.Contents("C:\Users\DanixDB\OneDrive\Documents\Cherda.xlsx"), null, true),
        Tableau1_Table = Source{[Item="tabCompteurs",Kind="Table"]}[Data],
        #"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(Tableau1_Table, {"D_Date", "Nom Site", "Code Equipement"}, "Attribut", "Valeur"),
        #"Colonnes supprimées" = Table.RemoveColumns(#"Supprimer le tableau croisé dynamique des autres colonnes",{"Attribut"}),
        #"Type modifié" = Table.TransformColumnTypes(#"Colonnes supprimées",{{"Valeur", type number}, {"D_Date", type date}}),
        AnnéeMois = Table.AddColumn(#"Type modifié", "AnnéeMois", each Date.Year([D_Date]) * 100 + Date.Month([D_Date])),
        #"Lignes groupées" = Table.Group(AnnéeMois, {"Nom Site", "Code Equipement", "AnnéeMois"}, {{"Nombre", each List.Max([Valeur]), type nullable number}, {"test", each _, type table [D_Date=nullable date, Nom Site=text, Code Equipement=text, Valeur=nullable number, Personnalisé=number]}}),
        #"test développé" = Table.ExpandTableColumn(#"Lignes groupées", "test", {"D_Date", "Valeur"}, {"D_Date", "Valeur"}),
        #"Colonne conditionnelle ajoutée" = Table.AddColumn(#"test développé", "Personnalisé.1", each if [Valeur] = [Nombre] then 1 else 0),
        #"Lignes filtrées" = Table.SelectRows(#"Colonne conditionnelle ajoutée", each ([Personnalisé.1] = 1)),
        #"Colonnes supprimées2" = Table.RemoveColumns(#"Lignes filtrées",{"AnnéeMois", "Valeur", "Personnalisé.1"})
    in
        #"Colonnes supprimées2"
    Certainement possible de faire mieux, mais je voulais garder la date de la valeur maximale, car on va s'en servir dans une mesure ou colonne calculée dans le modèle de données.
    Résultat de la requête :
    Nom : Cherda_Data.JPG
Affichages : 174
Taille : 25,7 Ko

    2 - Création d'une table Calendrier (toujours préférable si on souhaite utiliser les fonctions de time intelligence), pour ce faire, j'ai utilisé une fonction pour générer la table calendrier en entrant la date de début et la date de fin, le troisième argument étant facultatif et permet par exemple d'avoir le jours, mois dans la langue choisie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    let
     
    CreateDateTable = (StartDate as date, EndDate as date, optional Culture as nullable text) as table =>
     
    let
     
    DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
     
    Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
     
    TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
     
    ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
     
    RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
     
    InsertYear = Table.AddColumn(RenamedColumns, "Année", each Date.Year([Date])),
     
    InsertQuarter = Table.AddColumn(InsertYear, "Trimestre", each Date.QuarterOfYear([Date])),
     
    InsertMonth = Table.AddColumn(InsertQuarter, "MoisNombre", each Date.Month([Date])),
     
    InsertDay = Table.AddColumn(InsertMonth, "Jour", each Date.Day([Date])),
     
    InsertDayInt = Table.AddColumn(InsertDay, "DateNombre", each [Année] * 10000 + [MoisNombre] * 100 + [Jour]),
     
    InsertMonthName = Table.AddColumn(InsertDayInt, "MoisNom", each Date.ToText([Date], "MMMM", Culture), type text),
     
    InsertCalendarMonth = Table.AddColumn(InsertMonthName, "MoisCalendrier", each (try(Text.Range([MoisNom],0,3)) otherwise [MoisNom]) & " " & Number.ToText([Année])),
     
    InsertCalendarAnnéeMois = Table.AddColumn(InsertCalendarMonth, "AnnéeMois", each [Année] * 100 + [MoisNombre]) ,
     
    InsertCalendarQtr = Table.AddColumn(InsertCalendarAnnéeMois, "TrimestreCalendrier", each "T" & Number.ToText([Trimestre]) & " " & Number.ToText([Année])),
     
    InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "JourSemaine", each Date.DayOfWeek([Date])),
     
    InsertDayName = Table.AddColumn(InsertDayWeek, "NomJourSemaine", each Date.ToText([Date], "dddd", Culture), type text),
     
    InsertWeekEnding = Table.AddColumn(InsertDayName, "FinSemaine", each Date.EndOfWeek([Date]), type date)
     
    in
     
    InsertWeekEnding
     
    in
     
    CreateDateTable
    2 - Création d'une mesure m_Compteur :
    m_Compteur = SUM(tabCompteurs[Nombre])

    3 - Création d'une colonne calculée CumulAnnuel :
    CumulAnnuel = CALCULATE(SUM(tabCompteurs[Nombre]),ALLEXCEPT(tabCompteurs,tabCompteurs[Code Equipement],tabCompteurs[Nom Site],Calendrier[Année]))

    Cela donne le résultat suivant :
    Nom : Cherda_Résultat.JPG
Affichages : 173
Taille : 20,5 Ko

    Je pense que cela devrait donner le résultat attendu.
    Cordialement
    DanixDB

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2021
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2021
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Ca marche merci bien

  9. #9
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 184
    Points : 275
    Points
    275
    Par défaut
    Pfiouu, c'est du solide Danixdb !

    Citation Envoyé par danixdb Voir le message
    Bonjour,

    1 - Requête Power query basée sur tes données (j'en ai pris qu'un extrait pour faire le test de la valeur maxi par mois et du cumul annuel)
    En voici le texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    let
        Source = Excel.Workbook(File.Contents("C:\Users\DanixDB\OneDrive\Documents\Cherda.xlsx"), null, true),
        Tableau1_Table = Source{[Item="tabCompteurs",Kind="Table"]}[Data],
        #"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(Tableau1_Table, {"D_Date", "Nom Site", "Code Equipement"}, "Attribut", "Valeur"),
        #"Colonnes supprimées" = Table.RemoveColumns(#"Supprimer le tableau croisé dynamique des autres colonnes",{"Attribut"}),
        #"Type modifié" = Table.TransformColumnTypes(#"Colonnes supprimées",{{"Valeur", type number}, {"D_Date", type date}}),
        AnnéeMois = Table.AddColumn(#"Type modifié", "AnnéeMois", each Date.Year([D_Date]) * 100 + Date.Month([D_Date])),
        #"Lignes groupées" = Table.Group(AnnéeMois, {"Nom Site", "Code Equipement", "AnnéeMois"}, {{"Nombre", each List.Max([Valeur]), type nullable number}, {"test", each _, type table [D_Date=nullable date, Nom Site=text, Code Equipement=text, Valeur=nullable number, Personnalisé=number]}}),
        #"test développé" = Table.ExpandTableColumn(#"Lignes groupées", "test", {"D_Date", "Valeur"}, {"D_Date", "Valeur"}),
        #"Colonne conditionnelle ajoutée" = Table.AddColumn(#"test développé", "Personnalisé.1", each if [Valeur] = [Nombre] then 1 else 0),
        #"Lignes filtrées" = Table.SelectRows(#"Colonne conditionnelle ajoutée", each ([Personnalisé.1] = 1)),
        #"Colonnes supprimées2" = Table.RemoveColumns(#"Lignes filtrées",{"AnnéeMois", "Valeur", "Personnalisé.1"})
    in
        #"Colonnes supprimées2"
    Certainement possible de faire mieux, mais je voulais garder la date de la valeur maximale, car on va s'en servir dans une mesure ou colonne calculée dans le modèle de données.
    Résultat de la requête :
    Nom : Cherda_Data.JPG
Affichages : 174
Taille : 25,7 Ko

    2 - Création d'une table Calendrier (toujours préférable si on souhaite utiliser les fonctions de time intelligence), pour ce faire, j'ai utilisé une fonction pour générer la table calendrier en entrant la date de début et la date de fin, le troisième argument étant facultatif et permet par exemple d'avoir le jours, mois dans la langue choisie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    let
     
    CreateDateTable = (StartDate as date, EndDate as date, optional Culture as nullable text) as table =>
     
    let
     
    DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
     
    Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
     
    TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
     
    ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
     
    RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "Date"}}),
     
    InsertYear = Table.AddColumn(RenamedColumns, "Année", each Date.Year([Date])),
     
    InsertQuarter = Table.AddColumn(InsertYear, "Trimestre", each Date.QuarterOfYear([Date])),
     
    InsertMonth = Table.AddColumn(InsertQuarter, "MoisNombre", each Date.Month([Date])),
     
    InsertDay = Table.AddColumn(InsertMonth, "Jour", each Date.Day([Date])),
     
    InsertDayInt = Table.AddColumn(InsertDay, "DateNombre", each [Année] * 10000 + [MoisNombre] * 100 + [Jour]),
     
    InsertMonthName = Table.AddColumn(InsertDayInt, "MoisNom", each Date.ToText([Date], "MMMM", Culture), type text),
     
    InsertCalendarMonth = Table.AddColumn(InsertMonthName, "MoisCalendrier", each (try(Text.Range([MoisNom],0,3)) otherwise [MoisNom]) & " " & Number.ToText([Année])),
     
    InsertCalendarAnnéeMois = Table.AddColumn(InsertCalendarMonth, "AnnéeMois", each [Année] * 100 + [MoisNombre]) ,
     
    InsertCalendarQtr = Table.AddColumn(InsertCalendarAnnéeMois, "TrimestreCalendrier", each "T" & Number.ToText([Trimestre]) & " " & Number.ToText([Année])),
     
    InsertDayWeek = Table.AddColumn(InsertCalendarQtr, "JourSemaine", each Date.DayOfWeek([Date])),
     
    InsertDayName = Table.AddColumn(InsertDayWeek, "NomJourSemaine", each Date.ToText([Date], "dddd", Culture), type text),
     
    InsertWeekEnding = Table.AddColumn(InsertDayName, "FinSemaine", each Date.EndOfWeek([Date]), type date)
     
    in
     
    InsertWeekEnding
     
    in
     
    CreateDateTable
    2 - Création d'une mesure m_Compteur :
    m_Compteur = SUM(tabCompteurs[Nombre])

    3 - Création d'une colonne calculée CumulAnnuel :
    CumulAnnuel = CALCULATE(SUM(tabCompteurs[Nombre]),ALLEXCEPT(tabCompteurs,tabCompteurs[Code Equipement],tabCompteurs[Nom Site],Calendrier[Année]))

    Cela donne le résultat suivant :
    Nom : Cherda_Résultat.JPG
Affichages : 173
Taille : 20,5 Ko

    Je pense que cela devrait donner le résultat attendu.
    Cordialement
    DanixDB

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Retourner le Max d'une colonne et la valeur des autres
    Par MoThA dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/02/2016, 13h20
  2. Modifier l'enseble des lignes d'une colonne d'une table
    Par bencheikh dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 06/07/2006, 21h46
  3. Ecrire les noms des fichiers dans une colonne
    Par REGIMBAL dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 11h29
  4. quote dans des valeurs d'une colonne SET
    Par Jean Fi dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/03/2006, 20h16
  5. SQLServer 2000: Liste des contraintes sur une colonne ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2005, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo