Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
4 years ago
Solved

Running Total with exclusions

Hi all,

I am trying to recreate a chart that the business uses currently in Excel, that I would like to move to Power BI. It is like a waterfall chart, but has Targets included in the chart as well (Budget and Forecast) like this:

 

to do this we have a table like this:

CategoryCV €MIndexCV €M 2Base 2Base 3
Q1Sold Churn1.8301.830.000.00
Q1 Unsold Churn4.9814.981.831.83
Q1 Sold Medium1.3421.346.816.81
Q1 Unsold Medium3.5933.598.158.15
Fcst Q125.2240.0011.740.00
Bud Q125.0450.0011.740.00
Q2 Sold Churn1.8361.8311.7411.74
Q2 Unsold Churn4.9874.9813.5713.57
Q2 Sold Medium1.3481.3418.5518.55
Q2 Unsold Medium3.5993.5919.8919.89
Deal 18.20108.2023.4823.48
Deal 26.20116.2031.6831.68
Deal 35.30125.3037.8837.88
H1 YTD Fcst56.09130.0043.180.00
H1 YTD Bud70.14140.0043.180.00
Q3 Unsold Churn6.81156.8143.1843.18
Q3 Unsold Medium4.93164.9349.9949.99
Deal 417.301717.3054.9254.92
Deal 54.60184.6072.2272.22
Q3 YTD Fcst99.27190.0076.820.00
Q3 YTD Bud98.23200.0076.820.00
Q4 Unsold Churn6.81216.8176.8276.82
Q4 Unsold Medium4.93224.9383.6383.63
Deal 65.60235.6088.5688.56
Deal 71.90241.9094.1694.16
FY YTD Fcst145.44250.0096.060.00
FY YTD Bud145.44260.0096.060.00

 

The first 3 columns (Category, CV €M and Index) are the data table that we get from another system, and the last 3 columns are calculated:

CV €M 2 is simply the CV €M column, but Zero when the Category contains "Bud" or "Fcst"

Base 2 is the running total of CV €M 2 but offset by 1 row
Base 3 is Base 2, but Zero when the Category contains "Bud" or "Fcst"

We then use CV €M and Base 3 for the chart data

I am trying to calculate measures in DAX (Not M) to replicate these columns, and I can get to a running total:

 

Cumulative Base =
CALCULATE (
[CV €M],
FILTER (
ALLSELECTED ( 'FY Chart Data' ),
'FY Chart Data'[Rank] < MAX ( 'FY Chart Data'[Rank] )
)
)
 
But I am going round in circles tryng to do the offset, and then the Zero values wher the category is "Bud" or "Fcst". Any and all help/pointers would be greatly appreciated.
 
Thank you

 

 

  • Hi Anonymous ,

     

    Here is the DAX of these columns:

     

    CV €M 2 =
    IF (
        CONTAINSSTRING ( [Category], "Fcst" ) || CONTAINSSTRING ( [Category], "Bud" ),
        0,
        [CV €M]
    )
    
    Base 2 =
    VAR _a =
        CALCULATE (
            SUM ( Table1[CV €M 2] ),
            FILTER ( Table1, [Index] < EARLIER ( [Index] ) )
        )
    RETURN
    IF ( ISBLANK ( _a ), 0, _a )
    
    Base 3 =
    IF (
        CONTAINSSTRING ( [Category], "Fcst" ) || CONTAINSSTRING ( [Category], "Bud" ),
        0,
        [Base 2]
    )

     

    Final output:

     

    Best Regards,

    Jianbo Li

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

2 Replies

  • tamerj1's avatar
    tamerj1
    Icon for Community Champion rankCommunity Champion

    Hi Anonymous 

    please try

     

    Cumulative Base =
    VAR SelectedData =
        ALLSELECTED ( 'FY Chart Data' )
    VAR CurrentRank =
        MAX ( 'FY Chart Data'[Rank] )
    VAR PreviousData =
        FILTER (
            SelectedData,
            'FY Chart Data'[Rank] <= CurrentRank
                && NOT ( 'FY Chart Data'[category] IN { "Bud", "Fcst" } )
        )
    RETURN
        CALCULATE ( [CV €M], PreviousData )

     

  • Hi Anonymous ,

     

    Here is the DAX of these columns:

     

    CV €M 2 =
    IF (
        CONTAINSSTRING ( [Category], "Fcst" ) || CONTAINSSTRING ( [Category], "Bud" ),
        0,
        [CV €M]
    )
    
    Base 2 =
    VAR _a =
        CALCULATE (
            SUM ( Table1[CV €M 2] ),
            FILTER ( Table1, [Index] < EARLIER ( [Index] ) )
        )
    RETURN
    IF ( ISBLANK ( _a ), 0, _a )
    
    Base 3 =
    IF (
        CONTAINSSTRING ( [Category], "Fcst" ) || CONTAINSSTRING ( [Category], "Bud" ),
        0,
        [Base 2]
    )

     

    Final output:

     

    Best Regards,

    Jianbo Li

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