Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
amuljono
Frequent Visitor

Sum of last N data - grouped by category

Hi,

I need to sum the last 5 years data, grouped by several columns. Data retrieved from 2 tables (forecast and historical) which has same data structures but different date range. Forecast table need to get historical data from Historical table.

Below are the data, 

Forecast:

amuljono_0-1674954282228.png

Historical:

amuljono_1-1674954307861.png

The expected result (updated):

amuljono_2-1674954328262.png

i.e. in 2022 for Asset-1, Category 1Y and Type X1, the calculation will be:

  • 2022 (type X1) sales: 45 + 2021 sales (type H): 20 + 2020 sales (type H): 15 + 2019 sales (type H): 10 + 2018 sales (type H): 5. Total summation is 95

in 2023 for Asset-1, Category 1Y and Type X1, the calculation will be:

  • 2023 (type X1) sales: 50 + 2022 sales (type X1): 45 + 2021 sales (type H): 20 + 2020 sales (type H): 15 + 2019 sales (type H): 10. Total summation is 140

in 2022 for Asset-1, Category 1Y and Type X2, the calculation will be:

  • 2022 (type X2) sales: 65 + 2021 sales (type H): 20 + 2020 sales (type H): 15 + 2019 sales (type H): 10 + 2018 sales (type H): 5. Total summation is 115

in 2023 for Asset-1, Category 1Y and Type X2, the calculation will be:

  • 2023 (type X2) sales: 70+ 2022 sales (type X1): 65 + 2021 sales (type H): 20 + 2020 sales (type H): 15 + 2019 sales (type H): 10. Total summation is 180

So basically only Asset, Category and Year will be considered in the Historical table. For Forecast table, Asset, Category, Year and Type should be considered.

 

I append the 2 tables then create new colum:

Last5Y = SUMMARIZE(
TOPN(5, GROUPBY(FILTER('Sales profile', 'Sales profile'[Year]-4 && 'Sales profile'[Year]<='Sales profile'[Year]),'Sales profile'[Asset], 'Sales profile'[Category]),'Sales profile'[Year],ASC), "sum", SUM('Sales profile'[Sales])
)
However, the result is not as per expected.
amuljono_3-1674954388623.png

 it seems the calculation added all Sales data.

 

Very appreicate any guidance around this.
thanks
1 ACCEPTED SOLUTION
tamerj1
Super User
Super User

Hi @amuljono 
Please refer to attached sample file with the solution

1.png

 

Updated = 
ADDCOLUMNS ( 
    Forecast,
    "Last 5 Years Sales",
    VAR T1 = 
        SELECTCOLUMNS ( 
            CALCULATETABLE ( 
                Forecast, 
                ALLEXCEPT ( Forecast, Forecast[Asset], Forecast[Category], Forecast[Type] )
            ),
            "Year", Forecast[Year],
            "Sales", Forecast[Sales]
        )
    VAR T2 = 
        SELECTCOLUMNS ( 
            FILTER ( 
                Historical,
                Historical[Asset] = Forecast[Asset]
                    && Historical[Category] = Forecast[Category]
            ),
            "Year", Historical[Year],
            "Sales", Historical[Sales]
        )
    VAR T3 = FILTER ( UNION ( T1, T2 ), [Year] <= EARLIER ( [Year] ) )
    VAR T4 = TOPN ( 5, T3, [Year] )
    RETURN
        SUMX ( T4, [Sales] )
)

2nd Option

2.png

Updated 2 = 
ADDCOLUMNS ( 
    Forecast,
    "Last 5 Years Sales",
    VAR T1 = 
        CALCULATETABLE ( 
            Forecast, 
            ALLEXCEPT ( Forecast, Forecast[Asset], Forecast[Category], Forecast[Type] )
        )
    VAR T2 = 
        FILTER ( 
            Historical,
            Historical[Asset] = Forecast[Asset]
                && Historical[Category] = Forecast[Category]
        )
    VAR T3 = FILTER ( UNION ( T1, T2 ), [Year] <= EARLIER ( [Year] ) )
    VAR T4 = TOPN ( 5, T3, [Year] )
    RETURN
        SUMX ( T4, [Sales] )
)

 

View solution in original post

5 REPLIES 5
tamerj1
Super User
Super User

Hi @amuljono 
Please refer to attached sample file with the solution

1.png

 

Updated = 
ADDCOLUMNS ( 
    Forecast,
    "Last 5 Years Sales",
    VAR T1 = 
        SELECTCOLUMNS ( 
            CALCULATETABLE ( 
                Forecast, 
                ALLEXCEPT ( Forecast, Forecast[Asset], Forecast[Category], Forecast[Type] )
            ),
            "Year", Forecast[Year],
            "Sales", Forecast[Sales]
        )
    VAR T2 = 
        SELECTCOLUMNS ( 
            FILTER ( 
                Historical,
                Historical[Asset] = Forecast[Asset]
                    && Historical[Category] = Forecast[Category]
            ),
            "Year", Historical[Year],
            "Sales", Historical[Sales]
        )
    VAR T3 = FILTER ( UNION ( T1, T2 ), [Year] <= EARLIER ( [Year] ) )
    VAR T4 = TOPN ( 5, T3, [Year] )
    RETURN
        SUMX ( T4, [Sales] )
)

2nd Option

2.png

Updated 2 = 
ADDCOLUMNS ( 
    Forecast,
    "Last 5 Years Sales",
    VAR T1 = 
        CALCULATETABLE ( 
            Forecast, 
            ALLEXCEPT ( Forecast, Forecast[Asset], Forecast[Category], Forecast[Type] )
        )
    VAR T2 = 
        FILTER ( 
            Historical,
            Historical[Asset] = Forecast[Asset]
                && Historical[Category] = Forecast[Category]
        )
    VAR T3 = FILTER ( UNION ( T1, T2 ), [Year] <= EARLIER ( [Year] ) )
    VAR T4 = TOPN ( 5, T3, [Year] )
    RETURN
        SUMX ( T4, [Sales] )
)

 

@tamerj1 - really appreciate your help. kudos

amuljono
Frequent Visitor

I revise the expected result..  

amuljono
Frequent Visitor

@tamerj1 

the calculated column is created in the new table created from append queries.

thanks

tamerj1
Super User
Super User

Hi @amuljono 

This calculated column is created in which table? Any relationships between the two tables?

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

Top Solution Authors