Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

Complex conditions in a column

Hi!!

 

I'm trying to add a column in a query, that either returns the value of beginning of the year (Opening Balance), year-to-date value (Changes) or beginning of the year value plus year-to-date value (Ending Balance).

Present query looks like this:

CodeDescriptionDateValue
AAAOpening balance01/01/2019100
AAAOpening balance01/02/2019110
AAAOpening balance01/03/2019120
BBBChanges01/01/201910
BBBChanges01/02/201910
BBBChanges01/03/201910
CCCEnding Balance01/01/2019110
CCCEnding Balance01/02/2019120
CCCEnding Balance01/03/2019130

 

The column I would like to add looks like this:

CodeDescriptionDateValueColumn(YTD)
AAAOpening balance01/01/2019100100
AAAOpening balance01/02/2019110100
AAAOpening balance01/03/2019120100
BBBChanges01/01/20191010
BBBChanges01/02/20191020
BBBChanges01/03/20191030
CCCEnding Balance01/01/2019110110
CCCEnding Balance01/02/2019120120
CCCEnding Balance01/03/2019130130

 

I tried to insert a DAX like this but didn't work:

IF ( Code = "AAA" , CALCULATE ( CALCULATE ( Value , ALL (DATE) ) , DATE = "01/01/2019" ) , 

      IF ( Code = "BBB" , CALCULATE ( TOTALYTD ( Value , Date ) , OR ( CODE <> "AAA" , CODE <> "CCC" ) ) ,

            CALCULATE ( CALCULATE ( Value , ALL (DATE) ) , DATE = "01/01/2019" + CALCULATE ( TOTALYTD ( Value , Date ) , OR ( CODE <> "AAA" , CODE <> "CCC" ) ) )

 

I'd appreciate if anyone could save me...! Thank you.

 

Yasuchiki

  • So like this?

    Column (YTD) =
    SWITCH([Code],
    "AAA", VAR __Min = MINX(FILTER('Table',[Code]="AAA"),[Date])
    RETURN LOOKUPVALUE('Table'[Value],'Table'[Code],"AAA",'Table'[Date],__Min),
    "BBB", SUMX(FILTER('Table','Table'[Date]<=EARLIER('Table'[Date]) && [Code]="BBB"),[Value]),
    "CCC", 'Table'[Value],
    BLANK()
    )

3 Replies

  • Greg_Deckler's avatar
    Greg_Deckler
    Icon for Community Champion rankCommunity Champion
    So like this?

    Column (YTD) =
    SWITCH([Code],
    "AAA", VAR __Min = MINX(FILTER('Table',[Code]="AAA"),[Date])
    RETURN LOOKUPVALUE('Table'[Value],'Table'[Code],"AAA",'Table'[Date],__Min),
    "BBB", SUMX(FILTER('Table','Table'[Date]<=EARLIER('Table'[Date]) && [Code]="BBB"),[Value]),
    "CCC", 'Table'[Value],
    BLANK()
    )
    • Anonymous's avatar
      Anonymous
      Not applicable

      Thank you sooooo much! I've tried it and it was exactly what I've wanted.

      However, what if we have several years in a query and want to get the beginning balance of the year or sum up only the changes during the year? Just like below?

       
      CodeDescriptionDateValueValue(YTD)
      AAAOpening balance01/01/2019100100
      AAAOpening balance01/02/2019110100
      AAAOpening balance01/03/2019120100
      BBBChanges01/01/20191010
      BBBChanges01/02/20191020
      BBBChanges01/03/20191030
      CCCEnding Balance01/01/2019110110
      CCCEnding Balance01/02/2019120120
      CCCEnding Balance01/03/2019130130
      AAAOpening balance01/01/2020130130
      AAAOpening balance01/02/2020150130
      AAAOpening balance01/03/2020170130
      BBBChanges01/01/20202020
      BBBChanges01/02/20202040
      BBBChanges01/03/20202060
      CCCEnding Balance01/01/2020150150
      CCCEnding Balance01/02/2020170170
      CCCEnding Balance01/03/2020190190

       

      • Anonymous's avatar
        Anonymous
        Not applicable
        Quite forcefully, I managed to solve this way:
         
        Column (YTD) =
        SWITCH([Code];
        "AAA"; VAR _BB = STARTOFYEAR(Plan1[Date])
        RETURN LOOKUPVALUE('Table'[Value];'Table'[Code];"AAA";'Table'[Date];_BB);
        "BBB"; VAR _EB = Table[Date] VAR _BB = STARTOFYEAR(Plan1[Date])
        RETURN LOOKUPVALUE(Table[Value];Table[Code];"CCC";Table[Date]; _EB) - LOOKUPVALUE('Table'[Value];'Table'[Code];"AAA";'Table'[Date];_BB);
        "CCC"; 'Table'[Value];
        BLANK()
        )