Club Power BI

Please login or click SIGN UP FOR FREE to create your PowerBIUG account to join this user group.
  • 1.  Récupérer les lignes ayant des événements qui se superposent dans le temps

    Posted 13 days ago
    Edited by Clément Mesnil 13 days ago

    Bonjour,
    J'essaie de récupérer les données d'employés et de leurs contrats lorsqu'ils ont plus d'un contrat en cours.

    Voici une table pour illustrer mes propos :

    ID_PROFIL ID_CONTRAT CTR_DEBUT CTR_FIN
    1 16 01/09/2015 01/01/3000
    2 14 28/05/2007 01/01/3000
    5 26 01/01/2019 01/01/3000
    7 11 12/03/2018 01/01/3000
    19 2 01/01/2017 11/02/2017
    19 4 01/02/2018 01/01/3000
    19 3 12/02/2017 04/02/2018
    24 6 28/09/2012 31/12/2014
    24 7 01/01/2015 01/01/3000
    25 5 01/04/2019 31/05/2019
    25 37 01/06/2019 31/08/2021


    Ici, on voit que l'employé 19 possède deux contrats qui se chevauchent dans le temps : entre 01/02/2018 et 04/02/2018, il aura deux contrats actifs à la fois.

    Je souhaite donc récupérer les lignes correspondant à cette erreur (en rouge).

    J'ai essayé de réaliser cela en ajoutant une colonne mais je n'ai réussi qu'à obtenir les lignes correspondant aux employés ayant plusieurs contrats actifs à une date fixée (dans l'exemple suivant, à la date actuelle) et ne suis pas parvenu à aboutir.


    Je précise que je souhaite obtenir ces lignes sans choisir de date indicative.


    Voici les différentes étapes de mon travail réalisé :

    -- SI la date actuelle est comprise entre la date du début du contrat et la date de fin, ALORS 1, SINON 0
    = Table.AddColumn(1, "Personnalisé", each if DateTime.Date(DateTime.LocalNow()) >= [CTR_DEBUT] and DateTime.Date(DateTime.LocalNow()) < [CTR_FIN] then 1 else 0)

    -- Ne garder que les contrats actifs actuellement
    = Table.SelectRows(#"Personnalisée ajoutée1", each ([Personnalisé] = 1))

    -- Regrouper les lignes via l'ID_PROFIL en fonction du nombre de lignes
    = Table.Group(#"Lignes filtrées", {"ID_PROFIL"}, {{"Nombre", each Table.RowCount(_), Int64.Type}})

    -- Ne garder que les lignes ayant plus d'une correspondance
    = Table.SelectRows(#"Lignes groupées", each ([Nombre] > 1))

    Merci pour votre aide,



    ------------------------------
    Clément Mesnil
    ------------------------------



  • 2.  RE: Récupérer les lignes ayant des événements qui se superposent dans le temps

    Silver Contributor
    Posted 12 days ago
    Edited by Olivier Aillery 12 days ago
    Bonjour,

    J'ai résolu un problème très proche de celui-ci il y a peu. Je devais vérifier le chevauchement de point km et non de dates mais le principe est le même.

    Si besoin ajoutez une colonne d'index via Power Query.

    J'ai crée une colonne de test en DAX avec la formule suivante :
    Colonne de vérif Chevauchement = 
    VAR IndexEnCours='Pose de voie'[Index]//Stockage de la valeur Index de ligne
    VAR Pk_Deb_EnCours='Pose de voie'[Pk début]//Stockage de la valeur PK début
    VAR TableTemp=//Création d'une table temporaire avec filtres qui stocke les lignes visées...
                    FILTER(ALL('Pose de voie'),'Pose de voie'[Index]<>IndexEnCours&&//Exclure les valeurs de ligne sur laquelle on se trouve
                                'Pose de voie'[Pk début]<Pk_Deb_EnCours&&'Pose de voie'[pk Fin]>Pk_Deb_EnCours)//Vérifier avec les valeurs début et fin des autres lignes, si des intervalles se chevauchent
                                VAR TableTEST=ADDCOLUMNS(TableTemp,"IndexLu",'Pose de voie'[Index])
                                //Si plusieurs valeurs utiliser CONCATENATEX pour les assembler
    RETURN
     IF(COUNTROWS(TableTemp)>=1,"Chevauchement",BLANK())//Si le nombre de lignes de la table temp est sup ou égal à 1, c'est qu'il y a chevauchement)​
    Cela devrait pouvoir t'inspirer sur ta problématique.


    Dis nous si ça fonctionne bien,

    Bonne journée

    ------------------------------
    Olivier
    ------------------------------



  • 3.  RE: Récupérer les lignes ayant des événements qui se superposent dans le temps

    Posted yesterday
    En effet cela a fonctionné !
    Merci encore

    ------------------------------
    Clément Mesnil
    ------------------------------



  • 4.  RE: Récupérer les lignes ayant des événements qui se superposent dans le temps

    Silver Contributor
    Posted yesterday
    Bonsoir,

    Bonne nouvelle !
    N'hésites pas à partager ta formule avec les autres utilisateurs
    et n'oublie pas de marquer la question en Résolu pour faciliter les recherches.

    Merci à toi et bonne soirée

    ------------------------------
    Olivier
    ------------------------------