Forum Discussion
How to improve this formula (loading speed)
Good morning, I have this formula that works perfectly, but it takes a long time to load every time I apply a filter. About 20 seconds on average. My question is if it can be optimized in such a way that it does not take so long to load, I am quite new and I know that there would be infinite paths but I can not think of anything else. Thank you very much in advance.
6 Replies
- Samarth_18Community Champion
Hi Syndicate_Admin ,
You could try below code :-
RANKING POINTS FAST = IF ( OR ( ISFILTERED ( 'TABLE OF DATES'[Nº WEEK AND MONTH] ), ISFILTERED ( 'TABLE OF DATES'[DAY MONTH] ) ), IF ( CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), FILTER ( 'WEEKLY INCENTIVES', 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "ONLINE" ) ) = 1 && [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) || CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), FILTER ( 'WEEKLY INCENTIVES', 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "REINFORCEMENT" ) ) = 1 && [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) || CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), FILTER ( 'WEEKLY INCENTIVES', 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "TELESHOPPING" ) ) = 1 && [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ), " :heavy_dollar_sign: Cobra, has " & ROUND ( [POINTS], 1 ) & " points and superavit of " & [SALES ONLY BA] - MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) & "sales", IF ( [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) && [SALES ONLY BA] > 0, ":cross_mark:No cobra, has " & ROUND ( [POINTS], 1 ) & " points and superavit of " & [SALES ONLY BA] - MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) & "sales", ":cross_mark:No cobra, has " & ROUND ( [POINTS], 1 ) & " points and missing " & ABS ( MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) - [SALES ONLY BA] ) & "sales" ) ), BLANK () )and you can also try to keep your all calculate code in the seperate variables and use it in If condition.
Thanks,
Samarth
- Samarth_18Community Champion
Syndicate_Admin You can also try this:-
RANKING POINTS FAST = VAR _caseOnline = CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), FILTER ( 'WEEKLY INCENTIVES', 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "ONLINE" ) ) VAR _caseREINFORCEMENT = CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), FILTER ( 'WEEKLY INCENTIVES', 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "REINFORCEMENT" ) ) VAR _caseTELESHOPPING = CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), FILTER ( 'WEEKLY INCENTIVES', 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "TELESHOPPING" ) ) RETURN IF ( OR ( ISFILTERED ( 'TABLE OF DATES'[Nº WEEK AND MONTH] ), ISFILTERED ( 'TABLE OF DATES'[DAY MONTH] ) ), IF ( AND ( OR ( _caseReinforcement = 1 && [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ), OR ( _caseREINFORCEMENT = 1 && [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ), _caseTeleshopping = 1 ) ), [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) ), " :heavy_dollar_sign: Cobra, has " & ROUND ( [POINTS], 1 ) & " points and superavit of " & [SALES ONLY BA] - MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) & "sales", IF ( AND ( [SALES ONLY BA] >= MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ), [SALES ONLY BA] > 0 ), ":cross_mark:No cobra, has " & ROUND ( [POINTS], 1 ) & " points and superavit of " & [SALES ONLY BA] - MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) & "sales", ":cross_mark:No cobra, has " & ROUND ( [POINTS], 1 ) & " points and missing " & ABS ( MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) - [SALES ONLY BA] ) & "sales" ) ), BLANK () )- Syndicate_AdminAdministrator
In this way the loading time has been significantly lowered.
Thanks a lot
- johnt75Super User
Using variables should speed it up
RANKING POINTS FAST = IF ( ISFILTERED ( 'TABLE OF DATES'[Nº WEEK AND MONTH] ) || ISFILTERED ( 'TABLE OF DATES'[DAY MONTH] ), VAR SalesOnlyBA = [SALES ONLY BA] VAR MaxBANecessary = MAX ( 'WEEKLY INCENTIVES'[BA. A NECESSARY] ) RETURN IF ( CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "ONLINE" ) = 1 && SalesOnlyBA >= MaxBANecessary || CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "REINFORCEMENT" ) = 1 && SalesOnlyBA >= MaxBANecessary || CALCULATE ( RANKX ( ALL ( 'AGENTS AND SCHEDULES'[AGENT] ), [POINTS],, DESC, SKIP ), 'WEEKLY INCENTIVES'[SHIFT ONL/RFZ/TLV] = "TELESHOPPING" ) = 1 && SalesOnlyBA >= MaxBANecessary, " :heavy_dollar_sign: Cobra, has " & ROUND ( [POINTS], 1 ) & " points and superavit of " & SalesOnlyBA - MaxBANecessary & "sales", IF ( SalesOnlyBA >= MaxBANecessary && SalesOnlyBA > 0, ":cross_mark:No cobra, has " & ROUND ( [POINTS], 1 ) & " points and superavit of " & SalesOnlyBA - MaxBANecessary & "sales", ":cross_mark:No cobra, has " & ROUND ( [POINTS], 1 ) & " points and missing " & ABS ( MaxBANecessary - SalesOnlyBA ) & "sales" ) ), BLANK () )- Syndicate_AdminAdministrator
This formula has improved only one second the original but something is something, the effort is appreciated.