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 :

Aggréger des lignes avec plages de dates successives


Sujet :

Power BI

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Aggréger des lignes avec plages de dates successives
    Bonjour,

    Dans mes données Power BI, je cherche à regrouper sur une même ligne les lignes avec des données identiques, et qui ont des plages de dates successives. Cf exemple ci dessous :
    Nom : Capture BI2.PNG
Affichages : 263
Taille : 49,0 Ko
    Les couleurs claires sont les lignes que je veux regrouper. En rouge les anomalies qui gènent les regroupement.

    Mon objectif final après pivot (je sais faire le pivot) est de détecter s'il y a des anomalies (dans l'exemple une anomalie de quantité, une anomalie de date manquant et un chevauchement de date qui créé un doublon) avec que le fait qu'il y a plusieurs lignes car celles qui sont correctes se mettent à la fin toute sur la même ligne dû au regroupement.
    Et j'ai des miliers de "Clé Produit" à traiter donc ca permet de filtrer rapidement les anomalies.

    J'avais trouvé une explication qui permettait de dissocier les lignes, mais pas de les regrouper, en utilisant List.Dates et des "Regrouper Par" successifs. Mais je n'ai pas réussi à l'appliquer à mon cas...

    Pourriez vous m'aider ?

    Merci d'avance,
    Bonne journée !
    Alexandra

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Un petit up
    Bonjour,
    Quelqu'un pourrait il m'aider sur ce sujet, j'ai vraiment besoin de vos lumières... Merci

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable Achats Approvisionnements
    Inscrit en
    Mai 2022
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable Achats Approvisionnements
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2022
    Messages : 30
    Points : 57
    Points
    57
    Par défaut
    Bonsoir,

    Voici un code qui est à ajouter en colonne pour définir si il y a une erreur
    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
    TESTS = 
     
    --Controle de la valeur de la condition--
    var cle = Feuil1[Clé Produit]
    var step_1=filter(SUMMARIZE(Feuil1,Feuil1[Clé Produit],Feuil1[Condition],Feuil1[Montant Condition]),Feuil1[Clé Produit]=cle)
    var nbvalcond=COUNTROWS(step_1)
     
    --calcul des divers choix sur les dates--
    VAR firstperinit =
        CALCULATE (
            MIN ( Feuil1[Date Ini] ),
            ALLEXCEPT ( Feuil1, Feuil1[Clé Produit] )
        )
    VAR perinit = Feuil1[Date Ini]
    VAR perfinprec =
        IF (
            ISBLANK (
                CALCULATE (
                    MAX ( Feuil1[Date Fin] ),
                    Feuil1[Date Fin] <= perinit,
                    ALLEXCEPT ( Feuil1, Feuil1[Clé Produit] )
                )
            ),
            CALCULATE (
                MAX ( Feuil1[Date Fin] ),
                Feuil1[Date Ini] < perinit,
                ALLEXCEPT ( Feuil1, Feuil1[Clé Produit] )
            ),
            CALCULATE (
                MAX ( Feuil1[Date Fin] ),
                Feuil1[Date Fin] <= perinit,
                ALLEXCEPT ( Feuil1, Feuil1[Clé Produit] )
            )
        )
    VAR result =
        DATEDIFF ( perfinprec, perinit, DAY )
    VAR result2 =
        IF (
            result > 1,
            "Manque Dates",
            IF ( perinit > firstperinit && perfinprec > perinit, "Chevauchement" ,
                if(nbvalcond>1,"Erreur valeur condition","Ok")
            )
        )
    return
    result2
    Nom : test.PNG
Affichages : 219
Taille : 60,2 Ko

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 065
    Points : 2 533
    Points
    2 533
    Par défaut
    Bonjour

    Voici une possibilité en M
    le principe est d'ajouter 1 à la date de fin et de fusionner cette date avec la date de début (ça renverra la plage suivante si elle existe).

    j'ajoute également un index et je fais une fusion externe gauche afin de supprimer les lignes qui ont été fusionnées à l'étape précédente

    A noter également l'utilisation de [xxx] ?? [yyy] équivalent à if [xxx]<>null then [xxx] else [yyy] .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    let
        Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
        #"Type modifié" = Table.TransformColumnTypes(Source,{{"Date ini", type date}, {"Date fin", type date}}),
        #"Personnalisée ajoutée" = Table.AddColumn(#"Type modifié", "Date fin +1", each Date.AddDays([Date fin],1)),
        #"Index ajouté" = Table.AddIndexColumn(#"Personnalisée ajoutée", "Index", 0, 1, Int64.Type),
        #"Requêtes fusionnées" = Table.NestedJoin(#"Index ajouté", {"Condition", "Montant Condition", "Date fin +1"}, #"Index ajouté", {"Condition", "Montant Condition", "Date ini"}, "Personnalisée ajoutée", JoinKind.LeftOuter),
        #"Personnalisée ajoutée développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Personnalisée ajoutée", {"Date fin", "Index"}, {"Date fin.1", "Index.1"}),
        #"Requêtes fusionnées1" = Table.NestedJoin(#"Personnalisée ajoutée développé", {"Index"}, #"Personnalisée ajoutée développé", {"Index.1"}, "Personnalisée ajoutée développé", JoinKind.LeftAnti),
        #"Personnalisée ajoutée1" = Table.AddColumn(#"Requêtes fusionnées1", "Date fin retenue", each [Date fin.1] ?? [Date fin]),
        #"Autres colonnes supprimées" = Table.SelectColumns(#"Personnalisée ajoutée1",{"Condition", "Montant Condition", "Date ini", "Date fin retenue"})
    in
        #"Autres colonnes supprimées"

    Stéphane

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Merci !
    Merci à vous, je vais regarder tout ça

Discussions similaires

  1. [XL-2019] Masquer des lignes avec VBA si supérieures ou inférieures à une date définie
    Par floasf63 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 19/04/2022, 09h51
  2. tri des lignes avec plage définie
    Par alaintoulouse dans le forum Excel
    Réponses: 2
    Dernier message: 07/03/2019, 14h25
  3. [Jlist] faire des lignes avec boutons
    Par matt22 dans le forum Composants
    Réponses: 1
    Dernier message: 27/11/2006, 16h21
  4. Comment changer les couleurs des lignes avec displaytag
    Par rlnd23 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/10/2006, 13h52
  5. [Requete] Comment ignorer des lignes avec un LOAD DATA
    Par frangin2003 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2005, 12h14

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