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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Spotto
Helper IV
Helper IV

How to optimize a measure that calculates cumulative?

I have a measure below working that calculates the cumulative with some filter conditions. This measure works correctly for up to 10 thousand records and after that it gets very slow, showing a lack of memory in the power bi.
I would like to optimize this measure so that it works for larger amounts of data.
I thank the help of all you.

 

------------------------------------------------------------

 

Acumulado sla =
var nrcaso = MAX('Relatório de Histórico de Casos'[Número do caso])
var indice = MAX('Relatório de Histórico de Casos'[INDEX])
var sla = "Y"
var solucao =
CALCULATE(SUM('Relatório de Histórico de Casos'[TOTAL MIN SLA]),
FILTER(ALL('Relatório de Histórico de Casos'),
'Relatório de Histórico de Casos'[INDEX]<=indice),
'Relatório de Histórico de Casos'[Número do caso]=nrcaso,
'Relatório de Histórico de Casos'[Have SLA?]=sla)
return
solucao
1 ACCEPTED SOLUTION
mahoneypat
Employee
Employee

Please try this measure instead. It runs much faster and seems to return the same results.

 

Acumulado sla New =
VAR thisindex =
    MAX( 'Relatório de Histórico de Casos'[INDEX] )
VAR indices =
    CALCULATETABLE(
        SUMMARIZE(
            'Relatório de Histórico de Casos',
            'Relatório de Histórico de Casos'[INDEX],
            'Relatório de Histórico de Casos'[TOTAL MIN SLA]
        ),
        ALL( 'Relatório de Histórico de Casos' ),
        VALUES( 'Relatório de Histórico de Casos'[Número do caso] ),
        'Relatório de Histórico de Casos'[Have SLA?] = "Y"
    )
RETURN
    SUMX(
        FILTERindices, 'Relatório de Histórico de Casos'[INDEX] <= thisindex ),
        'Relatório de Histórico de Casos'[TOTAL MIN SLA]
    )

 

Pat





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


View solution in original post

5 REPLIES 5
mahoneypat
Employee
Employee

Please try this measure instead. It runs much faster and seems to return the same results.

 

Acumulado sla New =
VAR thisindex =
    MAX( 'Relatório de Histórico de Casos'[INDEX] )
VAR indices =
    CALCULATETABLE(
        SUMMARIZE(
            'Relatório de Histórico de Casos',
            'Relatório de Histórico de Casos'[INDEX],
            'Relatório de Histórico de Casos'[TOTAL MIN SLA]
        ),
        ALL( 'Relatório de Histórico de Casos' ),
        VALUES( 'Relatório de Histórico de Casos'[Número do caso] ),
        'Relatório de Histórico de Casos'[Have SLA?] = "Y"
    )
RETURN
    SUMX(
        FILTERindices, 'Relatório de Histórico de Casos'[INDEX] <= thisindex ),
        'Relatório de Histórico de Casos'[TOTAL MIN SLA]
    )

 

Pat





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


@Spotto Did this measure improve things for you?

Pat

 





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


AlexisOlson
Super User
Super User

Generally, you want to avoid filtering on entire tables and, instead, filter only on individual columns.

 

See if one of these alternatives works for you:

 

Acumulado sla =
VAR nrcaso = MAX ( 'Relatório de Histórico de Casos'[Número do caso] )
VAR indice = MAX ( 'Relatório de Histórico de Casos'[INDEX] )
VAR sla = "Y"
VAR solucao =
    CALCULATE (
        SUM ( 'Relatório de Histórico de Casos'[TOTAL MIN SLA] ),
        'Relatório de Histórico de Casos'[INDEX] <= indice,
        'Relatório de Histórico de Casos'[Número do caso] = nrcaso,
        'Relatório de Histórico de Casos'[Have SLA?] = sla
    )
RETURN
    solucao

 

or

 

Acumulado sla =
VAR nrcaso = MAX ( 'Relatório de Histórico de Casos'[Número do caso] )
VAR indice = MAX ( 'Relatório de Histórico de Casos'[INDEX] )
VAR sla = "Y"
VAR solucao =
    CALCULATE (
        SUM ( 'Relatório de Histórico de Casos'[TOTAL MIN SLA] ),
        REMOVEFILTERS ( 'Relatório de Histórico de Casos' ),
        'Relatório de Histórico de Casos'[INDEX] <= indice,
        'Relatório de Histórico de Casos'[Número do caso] = nrcaso,
        'Relatório de Histórico de Casos'[Have SLA?] = sla
    )
RETURN
    solucao

 

unfortunately it didn't work, I put the file below for download, if you can take a look I would appreciate it very much.

 

--> power bi file 

Hmm. Unfortunately, this DAX method of computing cumulative sums is O(n^2) and I don't know that you can improve it much.

 

You might try computing it in the query editor using a function like List.Accumulate to avoid quadratic complexity. See here for an example:

https://community.powerbi.com/t5/Desktop/How-to-do-a-running-Sum-by-group-in-Power-Query/m-p/290123

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.