Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
3 years ago
Solved

Optimize Dax

I have a measure which counts the number of days which are applicable toward goals my team has.  it exlcudes holidays and weekends and changes the start date of the slicer to the training date if that date is larger than the start date.  It also provides a zero day count if the training date is larger than the slicers end date.  It works when I have the data extremely filtered to one month of training dates, but runs slow and fails when i have the training date filter off.  Please advise how I could improve the measure's performance. 

 

NBR Days = --this excludes holidays and weekend--
var Startdate = MAX(MIN('Safety Contact Training'[Date Attended]), MIN(DimDate[Cal_Date_DT]))
var enddate = MAX(DimDate[Cal_Date_DT])
var Trainingdate = IF( MIN('Safety Contact Training'[Date Attended])< enddate, 1,0)
RETURN

IF(Trainingdate = 1,
    CALCULATE(
        COUNTROWS(DimDate),
        FILTER(DimDate,DimDate[SA_Workday] = TRUE()),
   
        DATESBETWEEN(DimDate[Cal_Date_DT],Startdate,enddate)
        ),
 "0"    
   
 
)
  • Hi Anonymous 

     

    Did you check the following function?

    NETWORKDAYS function (DAX) - DAX | Microsoft Learn

     

    Best regards

    Michael

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

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

    @ me in replies or I'll lose your thread.

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

    LinkedIn

  • Hi Anonymous 

     

    Is there a reason why you use the CalculateTable statement in the measure? Because this means in eahc measure calculation you calculate the same thing which increases the amount of preformance required. If it sis so slow can you not pre-calculate the table in Power Query or Dax so that you have a separate physical table you only refer to?

     

    I also see that you have many other values in your visual. Is mabe one of the other measures the performance killer?

     

    Best regards

    Michael

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

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

    @ me in replies or I'll lose your thread.

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

    LinkedIn

5 Replies

  • Mikelytics's avatar
    Mikelytics
    Resident Rockstar

    Hi Anonymous 

     

    Did you check the following function?

    NETWORKDAYS function (DAX) - DAX | Microsoft Learn

     

    Best regards

    Michael

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

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

    @ me in replies or I'll lose your thread.

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

    LinkedIn

    • Anonymous's avatar
      Anonymous
      Not applicable

      Mikelytics , 

       I updated the formula to use Networkdays but it is not resolving the issue, this is still running super slow when I remove the filter of only those trained in October.  it works well when I remove the If statement but

      it runs fine but it gives me negative days for those trained in November. 

      new formula

      NBR Days = --this excludes holidays and weekend--
      var Startdate = max(MIN('Training'[Date Attended]), min(DimDate[Cal_Date_DT]))
      var enddate = MAX(DimDate[Cal_Date_DT])
      var Trainingdate = IF( MIN(' Training'[Date Attended])< enddate, 1,0)
      RETURN
         
              NETWORKDAYS(Startdate, enddate, 1,
                   CALCULATETABLE(
                       SELECTCOLUMNS(DimDate,"Holidays", DimDate[Cal_Date_DT]),
                       FILTER(DimDate,DimDate[Holiday_FLG] = 1)
                  )
              )          
         
      Results date slicer October 1, 2022 - October 31, 2022

       

       
      • Mikelytics's avatar
        Mikelytics
        Resident Rockstar

        Hi Anonymous 

         

        Is there a reason why you use the CalculateTable statement in the measure? Because this means in eahc measure calculation you calculate the same thing which increases the amount of preformance required. If it sis so slow can you not pre-calculate the table in Power Query or Dax so that you have a separate physical table you only refer to?

         

        I also see that you have many other values in your visual. Is mabe one of the other measures the performance killer?

         

        Best regards

        Michael

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

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

        @ me in replies or I'll lose your thread.

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

        LinkedIn