Forum Discussion

Chris_Ruddick's avatar
Chris_Ruddick
Frequent Visitor
3 years ago
Solved

Parameter Measure Speed Improvement - using Calculate/DistinctCount/Filter...

 

I have the following DAX measure used within a parameter, that is used as a selection panel for a data matrix:

 

No of Orders = CALCULATE(DISTINCTCOUNT('UK Sales TOTAL'[Doc Number]),FILTER('UK Sales TOTAL','UK Sales TOTAL'[Sales Value]>0))
 

 

The measure works fine, however whenever this option is selected in the live report, it is incredibly slow to load compared to any of the other options, many of which are also measures.
 
Can anyone provide info on:
 
1 - What element of this measure is causing it to run slow?
 
2-  An alternative formula that can achieve the same result with a faster processing time?
 
It is also causing this to happen when used alongside certain selection options:
 

 

  • FILTER('UK Sales TOTAL','UK Sales TOTAL'[Sales Value]>0)

    That's what's causing it to be slow. The golden rule of DAX says: Never filter a table when you can filter a column.

    I assume you know the correct rules of DAX formatting and Sales Value is a field in the table, not a measure. If this is so, then you can try:

    No of Orders = 
    CALCULATE(
        DISTINCTCOUNT( 'UK Sales TOTAL'[Doc Number] ),
        KEEPFILTERS( 'UK Sales TOTAL'[Sales Value] > 0 )
    )

3 Replies

  • daXtreme's avatar
    daXtreme
    Solution Sage
    FILTER('UK Sales TOTAL','UK Sales TOTAL'[Sales Value]>0)

    That's what's causing it to be slow. The golden rule of DAX says: Never filter a table when you can filter a column.

    I assume you know the correct rules of DAX formatting and Sales Value is a field in the table, not a measure. If this is so, then you can try:

    No of Orders = 
    CALCULATE(
        DISTINCTCOUNT( 'UK Sales TOTAL'[Doc Number] ),
        KEEPFILTERS( 'UK Sales TOTAL'[Sales Value] > 0 )
    )
    • Chris_Ruddick's avatar
      Chris_Ruddick
      Frequent Visitor

      That worked perfectly! Thank you!

       

      I'll make sure to remember that rule in future 🙂

  • v-yadongf-msft's avatar
    v-yadongf-msft
    Community Support

    Hi Chris_Ruddick ,

     

    The presence of a large number of unique values for a column affects the calculation of the DISTINCTCOUNT function and the calculation of the filter parameter of the CALCULATE function.

     

    You can try not to filter the whole table to refine the filter conditions. Please try following DAX:

    No of Orders = CALCULATE(DISTINCTCOUNT('UK Sales TOTAL'[Doc Number]),KEEPFILTERS(FILTER(ALL('UK Sales TOTAL'[Doc Number],'UK Sales TOTAL'[Sales Value]),'UK Sales TOTAL'[Sales Value]>0)))

     

    Best regards,

    Yadong Fang

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