Forum Discussion

mvrali's avatar
mvrali
Frequent Visitor
8 years ago
Solved

Need help with DAX cumulative conditional aggregation

I am working on creating injury logs. Here is the sample data:

 

CaseTypeStart DateDays
XLD9/1/2017100
XLD12/1/201720
XLT10/1/201740
XLT11/1/201780
YLT10/1/201750
YLT9/1/201750
YLD10/1/201770
YLD11/1/201790
YLT12/1/201730

 

 

I need to aggregate the total periods for Cases X and Y based on the Type (LD or LT). The rules are:

  • Total of LD and LT capped at 180
  • Do the calcualtion until reaching 180 total  based on the date (include the ones that have earlier dates and their sum is less than 180)
  • if reaching the cap in the middle of a period (Yellow colors) then just use part of it until reaching 180.
  • Green means the ones that should be used, Yellow partially used to reach the cap, and red means it was not used.

Here is the results I am looking for:

 

 LDLT
X12060
Y50130

 

I appreciate your help!

  • Anonymous's avatar
    Anonymous
    8 years ago

    Hi mvrali,

     

    It seems like you need to calculate based on specific sort order, I think you need to add index column to calculate loop table.

     

    Steps:

    1. Enter into query editor and add index column.

    2. Add calculated column to change days based on rolling target.

    Spoiler
    Filtered Days =
    VAR _previous =
        SUMX (
            FILTER (
                Test,
                [Case] = EARLIER ( Test[Case] )
                    && [Index] < EARLIER ( Test[Index] )
            ),
            [Days]
        )
    VAR _current =
        SUMX (
            FILTER (
                Test,
                [Case] = EARLIER ( Test[Case] )
                    && [Index] <= EARLIER ( Test[Index] )
            ),
            [Days]
        )
    RETURN
        IF (
            _current <= 180,
            [Days],
            IF ( _previous < 180 && _current > 180, 180 - _previous, 0 )
        )
    

    3. Create matrix visual with above columns.

     

    Regards,

    Xiaoxin Sheng

2 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi mvrali,

     

    It seems like you need to calculate based on specific sort order, I think you need to add index column to calculate loop table.

     

    Steps:

    1. Enter into query editor and add index column.

    2. Add calculated column to change days based on rolling target.

    Spoiler
    Filtered Days =
    VAR _previous =
        SUMX (
            FILTER (
                Test,
                [Case] = EARLIER ( Test[Case] )
                    && [Index] < EARLIER ( Test[Index] )
            ),
            [Days]
        )
    VAR _current =
        SUMX (
            FILTER (
                Test,
                [Case] = EARLIER ( Test[Case] )
                    && [Index] <= EARLIER ( Test[Index] )
            ),
            [Days]
        )
    RETURN
        IF (
            _current <= 180,
            [Days],
            IF ( _previous < 180 && _current > 180, 180 - _previous, 0 )
        )
    

    3. Create matrix visual with above columns.

     

    Regards,

    Xiaoxin Sheng

    • mvrali's avatar
      mvrali
      Frequent Visitor

      Anonymous,

       

      Worked great! Thanks for the soloution.