Forum Discussion

GOT2021's avatar
GOT2021
Frequent Visitor
1 year ago
Solved

Dax Formula Group By multiple conditions

Hi, I have this data

DateIdUserJob

10/01/2024 15:01:24

001AdamNurse
10/01/2024 15:11:24001MaxNurse
10/01/2024 16:01:24001GeorgeDoctor
15/01/2024 08:00:00002MichelNurse
17/02/2024 17:00:50003MaxNurse
1702/2024 14:10:00003GeorgeDoctor
17/02/2024 15:26:00003PatrickDoctor
25/03/2024 14:00:00004GeorgeDocor
26/03/2024 12:25:00005AnneNurse
26/03/2024 14:15:00005Sophie 


Being new to the DAX language, I must admit I'm at a loss to get the table below

I want to show this 

DateIdUserJob

10/01/2024 15:01:24

001AdamNurse
10/01/2024 16:01:24001GeorgeDoctor
15/01/2024 08:00:00002MichelNurse
17/02/2024 17:00:50003MaxNurse
17/02/2024 15:26:00003PatrickDoctor
25/03/2024 14:00:00004GeorgeDoctor
26/03/2024 14:15:00005Sophie 

 

For each ID I would like to keep at most 2 ligne :

  1. Two lines if I have "Doctor" job and one of the other jobs for the same ID.
  2. Only 1 line if :
    1. One single ID for any job (Ex : ID 002)
    2. Several lines for the same ID with either job category A (Doctor) or job category B (Nurse, NA, etc...) (but not both)

I'd thought of creating an incremental measure 1, 2,3 .... for job category B and a, b, c... for job category A so I can filter to keep only 1 and/or a but I'm  not up to that either (:

  • HI GOT2021 
    Create a measure and add it into the Filter pane under Filters on this visual.

    Then filter to Y.

     

    Filter measure =
    var curId = SELECTEDVALUE('Nurse table'[Id]) --hold current id
    var curJob = SELECTEDVALUE('Nurse table'[Job]) --hold current job
    var curTime = SELECTEDVALUE('Nurse table'[Date]) -- hold current date
    var People = CALCULATETABLE('Nurse table',ALLSELECTED('Nurse table'), 'Nurse table'[Id] = curId) --same id people
    RETURN
    SWITCH(
        TRUE()
        ,COUNTROWS(People) = 1, "Y" --Keep if one person
        ,maxx(Filter(People, 'Nurse table'[Job] <> "Doctor"), [Date])= curTime && curJob <> "Doctor"
        ,"Y" --Where this row is the biggest and not a doctor
        ,(maxx(Filter(People, 'Nurse table'[Job] = "Doctor"), [Date])= curTime && curJob = "Doctor"), "Y"--you are the max doctor
        ,"N"--anything else no
    )



     

3 Replies

  • HI GOT2021 
    Create a measure and add it into the Filter pane under Filters on this visual.

    Then filter to Y.

     

    Filter measure =
    var curId = SELECTEDVALUE('Nurse table'[Id]) --hold current id
    var curJob = SELECTEDVALUE('Nurse table'[Job]) --hold current job
    var curTime = SELECTEDVALUE('Nurse table'[Date]) -- hold current date
    var People = CALCULATETABLE('Nurse table',ALLSELECTED('Nurse table'), 'Nurse table'[Id] = curId) --same id people
    RETURN
    SWITCH(
        TRUE()
        ,COUNTROWS(People) = 1, "Y" --Keep if one person
        ,maxx(Filter(People, 'Nurse table'[Job] <> "Doctor"), [Date])= curTime && curJob <> "Doctor"
        ,"Y" --Where this row is the biggest and not a doctor
        ,(maxx(Filter(People, 'Nurse table'[Job] = "Doctor"), [Date])= curTime && curJob = "Doctor"), "Y"--you are the max doctor
        ,"N"--anything else no
    )



     

    • GOT2021's avatar
      GOT2021
      Frequent Visitor

      Thank you SamWiseOwl, it's exactly what I was looking for, it answers my problem 🙂

      • SamWiseOwl's avatar
        SamWiseOwl
        Icon for Super User rankSuper User

        It was a fun problem to solve.

        There were other versions but this was the most efficient that I could think of!