Forum Discussion

Vijay08V's avatar
Vijay08V
Icon for Helper III rankHelper III
2 years ago
Solved

Need DAX Help for calculated column

Hi,

 

I have a similar table as below and I'm trying to introduce a calculated column which evaluates at row level and gives me the FTE count. The logic that I'm trying to put is when I have Revised FTE, Locked FTE and Planned FTE values available (not zero), the logic should populate revised FTE value. Likewise if Revised FTE is zero then it should populate Locked FTE or else Planned FTE count. I tried using IF function and Switch function, still I'm not getting the expected output. Any help on this would be highly appreciated. Thanks!

 

Example 1 :

Tab Name Table NameMetricsDateValueVendorReport DateIDExpected output
AABPlanned  FTE12-31-20231553ABC26-05-24 0:00  
AABHours12-31-202337291ABC26-05-24 0:00  
AABLocked FTE 12-31-2023892ABC26-05-24 0:00  
AABRevised FTE 12-31-2023965ABC26-05-24 0:00 965
AABGraduates12-31-202339ABC26-05-24 0:00  
AABWeek Four12-31-20230ABC26-05-24 0:00  
AABWeek Three12-31-20230ABC26-05-24 0:00  
AABWeek Two12-31-20230ABC26-05-24 0:00  
AABWeek One12-31-20230ABC26-05-24 0:00  
AABWeek One12-31-20230ABC26-05-24 0:00  
AAB Week Two12-31-20230ABC26-05-24 0:00  

 

Example 2 :

Tab Name Table NameMetricsDateValueVendorReport DateIDExpected output
AABPlanned  FTE12-31-20231553ABC26-05-24 0:00  
AABHours12-31-202337291ABC26-05-24 0:00  
AABLocked FTE 12-31-2023892ABC26-05-24 0:00 892
AABRevised FTE 12-31-20230ABC26-05-24 0:00  
AABGraduates12-31-202339ABC26-05-24 0:00  
AABWeek Four12-31-20230ABC26-05-24 0:00  
AABWeek Three12-31-20230ABC26-05-24 0:00  
AABWeek Two12-31-20230ABC26-05-24 0:00  
AABWeek One12-31-20230ABC26-05-24 0:00  
AABWeek One12-31-20230ABC26-05-24 0:00  
AAB Week Two12-31-20230ABC26-05-24 0:00  

 

Example 3 :

 

Tab Name Table NameMetricsDateValueVendorReport DateIDExpected output
AABPlanned  FTE12-31-20231553ABC26-05-24 0:00 1553
AABHours12-31-202337291ABC26-05-24 0:00  
AABLocked FTE 12-31-20230ABC26-05-24 0:00  
AABRevised FTE 12-31-20230ABC26-05-24 0:00  
AABGraduates12-31-202339ABC26-05-24 0:00  
AABWeek Four12-31-20230ABC26-05-24 0:00  
AABWeek Three12-31-20230ABC26-05-24 0:00  
AABWeek Two12-31-20230ABC26-05-24 0:00  
AABWeek One12-31-20230ABC26-05-24 0:00  
AABWeek One12-31-20230ABC26-05-24 0:00  
AAB Week Two12-31-20230ABC26-05-24 0:00  

 

DAX Measure Used :

 

           FTE = VAR Locked_FTE = CALCULATE(SUM(Table[Value]),Table[Metrics]="Locked FTE",Table[ID]=EARLIER(Table[ID]))

                 VAR Revised_FTE = CALCULATE(SUM(Table[Value]),Table[Metrics]="Revised FTE",Table[ID]=EARLIER(Table[ID]))

                 VAR Planned_FTE = CALCULATE(SUM(Table[Value]),Table[Metrics]="Planned FTE",Table[ID]=EARLIER(Table[ID]))

                 RETURN(

                        SWITCH(TRUE(),Revised_FTE<>0,Revised_FTE,Revised_FTE=0,Locked_FTE,Locked_FTE=0,Planned_FTE))

Here ID is nothing but the Concatenation of Tab,Table name, Vendor and Date fields so that in the output I don't get a aggregated value for all dates

  • Anonymous's avatar
    Anonymous
    2 years ago

    Hi  Vijay08V ,

    You can try the following dax.

    Expected output123 =
    var _column=
    SELECTCOLUMNS(FILTER(ALL('Table'),'Table'[Tab Name ]=EARLIER('Table'[Tab Name ])&&'Table'[Table Name]=EARLIER('Table'[Table Name])&&'Table'[Date]=EARLIER('Table'[Date])&&'Table'[Value]=0),"test",[Metrics])
    RETURN
    SWITCH(
        TRUE(),
          NOT("Revised FTE") in _column && NOT("Locked FTE") in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Revised FTE",[Value],
          "Revised FTE" in _column && NOT("Locked FTE") in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Locked FTE",[Value],
          "Revised FTE" in _column && "Locked FTE" in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Planned FTE",[Value],
          NOT("Revised FTE") in _column && "Locked FTE" in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Revised FTE",[Value])

     

    Best Regards,

    Liu Yang

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

6 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi  Vijay08V ,

     

    Here are the steps you can follow:

    1. Create calculated column.

    Expected output =
    var _count=
    COUNTX(
        FILTER(ALL('Table'),
        'Table'[Metrics] in {"Revised FTE","Locked FTE","Planned FTE"} && 'Table'[Value]<>0),[Value])
    return
    SWITCH(
        TRUE(),
        _count=3&&'Table'[Metrics] = "Revised FTE",
        SUMX(FILTER('Table','Table'[Metrics] = "Revised FTE"),[Value]),
        _count=2&&'Table'[Metrics] = "Locked FTE",
        SUMX(FILTER('Table','Table'[Metrics] = "Locked FTE"),[Value]),
        _count=1&&'Table'[Metrics] = "Planned FTE",
        SUMX(FILTER('Table','Table'[Metrics] = "Planned FTE"),[Value]))

    2. Result:

     

    Best Regards,

    Liu Yang

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly

    • Vijay08V's avatar
      Vijay08V
      Icon for Helper III rankHelper III

      Hi Anonymous  - Thanks for sharing the PBIX file. It looks like the logic doesn't work if I add new data to the existing table. In real scenario, it will have more records .Same metrics will be repeated for different tab and table names and for different Date,vendor and report date.

      Case Condition 1 :
      Revised FTE <> 0, Locked FTE <>0 and planned FTE <> 0 
      Expected Output : Revised FTE number

      Case Condition 2 :
      Revised FTE = 0, Locked FTE <>0 and planned FTE <> 0 
      Expected Output : Locked FTE number

      Case Condition 3 :
      Revised FTE = 0, Locked FTE = 0 and planned FTE <> 0 
      Expected Output : Planned FTE number

       

      Snapshot from PBIX after adding new data

      Could you please help how the existing DAX logic can be revised?

      • Vijay08V's avatar
        Vijay08V
        Icon for Helper III rankHelper III

        Sample Data

        Tab Name Table NameMetricsDateValueVendorReport DateIDExpected output
        AABPlanned FTE2023-12-311553ABC26-05-24 0:00  
        AABHours2023-12-3137291ABC26-05-24 0:00  
        AABLocked FTE2023-12-31892ABC26-05-24 0:00 892
        AABRevised FTE2023-12-310ABC26-05-24 0:00  
        AABGraduates2023-12-3139ABC26-05-24 0:00  
        AABWeek Four2023-12-310ABC26-05-24 0:00  
        AABWeek Three2023-12-310ABC26-05-24 0:00  
        AABWeek Two2023-12-310ABC26-05-24 0:00  
        AABWeek One2023-12-310ABC26-05-24 0:00  
        AABWeek One2023-12-310ABC26-05-24 0:00  
        AABWeek Two2023-12-310ABC26-05-24 0:00  
        AABPlanned FTE2024-01-071553ABC27-05-24 0:00  
        AABHours2024-01-0737291ABC27-05-24 0:00  
        AABLocked FTE2024-01-070ABC27-05-24 0:00  
        AABRevised FTE2024-01-07500ABC27-05-24 0:00 500
        AABGraduates2024-01-0739ABC27-05-24 0:00  
        AABWeek Four2024-01-070ABC27-05-24 0:00  
        AABWeek Three2024-01-070ABC27-05-24 0:00  
        AABWeek Two2024-01-070ABC27-05-24 0:00  
        AABWeek One2024-01-070ABC27-05-24 0:00  
        AABWeek One2024-01-070ABC27-05-24 0:00  
        AABWeek Two2024-01-070ABC27-05-24 0:00  
        AABPlanned FTE2024-01-141553ABC28-05-24 0:00 1553
        AABHours2024-01-1437291ABC28-05-24 0:00  
        AABLocked FTE2024-01-140ABC28-05-24 0:00  
        AABRevised FTE2024-01-140ABC28-05-24 0:00  
        AABGraduates2024-01-1439ABC28-05-24 0:00  
        AABWeek Four2024-01-140ABC28-05-24 0:00  
        AABWeek Three2024-01-140ABC28-05-24 0:00  
        AABWeek Two2024-01-140ABC28-05-24 0:00  
        AABWeek One2024-01-140ABC28-05-24 0:00  
        AABWeek One2024-01-140ABC28-05-24 0:00  
        AABWeek Two2024-01-140ABC28-05-24 0:00  
        AACPlanned FTE2023-12-31158ADB26-05-24 0:00  
        AACHours2023-12-3137291ADB26-05-24 0:00  
        AACLocked FTE2023-12-31892ADB26-05-24 0:00  
        AACRevised FTE2023-12-3110ADB26-05-24 0:00 10
        AACGraduates2023-12-3139ADB26-05-24 0:00  
        AACWeek Four2023-12-310ADB26-05-24 0:00  
        AACWeek Three2023-12-310ADB26-05-24 0:00  
        AACWeek Two2023-12-310ADB26-05-24 0:00  
        AACWeek One2023-12-310ADB26-05-24 0:00  
        AACWeek One2023-12-310ADB26-05-24 0:00  
        AACWeek Two2023-12-310ADB26-05-24 0:00  
        AACPlanned FTE2024-01-071553ADB27-05-24 0:00  
        AACHours2024-01-0737291ADB27-05-24 0:00  
        AACLocked FTE2024-01-07200ADB27-05-24 0:00 200
        AACRevised FTE2024-01-070ADB27-05-24 0:00  
        AACGraduates2024-01-0739ADB27-05-24 0:00  
        AACWeek Four2024-01-070ADB27-05-24 0:00  
        AACWeek Three2024-01-070ADB27-05-24 0:00  
        AACWeek Two2024-01-070ADB27-05-24 0:00  
        AACWeek One2024-01-070ADB27-05-24 0:00  
        AACWeek One2024-01-070ADB27-05-24 0:00  
        AACWeek Two2024-01-070ADB27-05-24 0:00  
        AACPlanned FTE2024-01-141553ADB28-05-24 0:00 1553
        AACHours2024-01-1437291ADB28-05-24 0:00  
        AACLocked FTE2024-01-140ADB28-05-24 0:00  
        AACRevised FTE2024-01-140ADB28-05-24 0:00  
        AACGraduates2024-01-1439ADB28-05-24 0:00  
        AACWeek Four2024-01-140ADB28-05-24 0:00  
        AACWeek Three2024-01-140ADB28-05-24 0:00  
        AACWeek Two2024-01-140ADB28-05-24 0:00  
        AACWeek One2024-01-140ADB28-05-24 0:00  
        AACWeek One2024-01-140ADB28-05-24 0:00  
        AACWeek Two2024-01-140ADB28-05-24 0:00  
    • Vijay08V's avatar
      Vijay08V
      Icon for Helper III rankHelper III

      Hi Anonymous  

      I made few changes to the DAX measure by introducing ID column in the table and its working but there is one challenge though. If value of  _count variable is two or one, it directly fetches the value of Locked FTE or Planned FTE. However the logic should flow in the hireachy of Revised FTE >> Locked FTE>>Planned FTE. Say for example value of _count variable is two and we have Revised FTE and Planned FTE metrics as nonzero then the logic should pick Revised FTE value and not the locked FTE.  Any Idea how to resolve this problem? Thanks!

      Expected Output = 

      var _count=

      COUNTX(

          FILTER(ALL('Table'), 'Table'[ID]= EARLIER('Table'[ID]) &&

          'Table'[Metrics] in {"Revised FTE","Locked FTE","Planned FTE"} && 'Table'[Value]<>0),[Value])

      RETURN

      SWITCH(

          TRUE(),

          _count=3&&'Table'[Metrics] = "Revised FTE ,

          SUMX(FILTER('Table','Table'[Metrics] = "Revised FTE" && 'Table'[ID]=EARLIER('Table'[ID])),[Value]),

          _count=2&&'Table'[Metrics] = "Locked FTE",

          SUMX(FILTER('Table','Table'[Metrics] = "Locked FTE"&& 'Table'[ID]=EARLIER('Table'[ID])),[Value]),

          _count=1&&'Table'[Metrics] = "Planned FTE",

          SUMX(FILTER('Table','Table'[Metrics] = "Planned FTE" && 'Table'[ID]=EARLIER('Table'[ID])),[Value]))

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi  Vijay08V ,

    You can try the following dax.

    Expected output123 =
    var _column=
    SELECTCOLUMNS(FILTER(ALL('Table'),'Table'[Tab Name ]=EARLIER('Table'[Tab Name ])&&'Table'[Table Name]=EARLIER('Table'[Table Name])&&'Table'[Date]=EARLIER('Table'[Date])&&'Table'[Value]=0),"test",[Metrics])
    RETURN
    SWITCH(
        TRUE(),
          NOT("Revised FTE") in _column && NOT("Locked FTE") in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Revised FTE",[Value],
          "Revised FTE" in _column && NOT("Locked FTE") in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Locked FTE",[Value],
          "Revised FTE" in _column && "Locked FTE" in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Planned FTE",[Value],
          NOT("Revised FTE") in _column && "Locked FTE" in _column && NOT("Planned FTE")  in _column&&'Table'[Metrics]="Revised FTE",[Value])

     

    Best Regards,

    Liu Yang

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.