Forum Discussion

rgu101's avatar
rgu101
Helper I
2 years ago

How can I make this more efficient?

Hello,

As the title states, I'm asking for advice on how I can make this DAX code more efficient. I have limited coding experience, let alone with DAX. Thank you in advance 🙂

 

 

ChiefsMonthlyPosByLoc = 
VAR _totalLOC =
CALCULATE(
    COUNT('RT YTD July 2023'[scalevalue_ispositive]),
    FILTER(
        ALLSELECTED('RT YTD July 2023'),
        'RT YTD July 2023'[scalevalue_reporttext] <> "Non-response"
        && [Month Name] = MAX ('RT YTD July 2023'[Month Name])
        && 'RT YTD July 2023'[location_name] = MAX ('RT YTD July 2023'[location_name])
    )
)

VAR _posLOC =
CALCULATE(
    COUNT('RT YTD July 2023'[scalevalue_ispositive]),
    FILTER(
        ALLSELECTED('RT YTD July 2023'),
        'RT YTD July 2023'[scalevalue_ispositive] = "True"
        && [Month Name] = MAX ('RT YTD July 2023'[Month Name])
        && 'RT YTD July 2023'[location_name] = MAX ('RT YTD July 2023'[location_name])
    )
)
VAR _pospercentLOC =  _posLOC/_totalLOC

VAR _total =
CALCULATE(
    COUNT('RT YTD July 2023'[scalevalue_ispositive]),
    FILTER(
        ALLSELECTED('RT YTD July 2023'),
        'RT YTD July 2023'[scalevalue_reporttext] <> "Non-response"
        && [Month Name] = MAX ('RT YTD July 2023'[Month Name])
    )
)

VAR _pos =
CALCULATE(
    COUNT('RT YTD July 2023'[scalevalue_ispositive]),
    FILTER(
        ALLSELECTED('RT YTD July 2023'),
        'RT YTD July 2023'[scalevalue_ispositive] = "True"
        && [Month Name] = MAX ('RT YTD July 2023'[Month Name])
    )
)
VAR _pospercent =  _pos/_total

RETURN IF(HASONEVALUE('RT YTD July 2023'[location_name]),_pospercentLOC,_pospercent)

 

 

 

6 Replies

    • rgu101's avatar
      rgu101
      Helper I

      Due to sensitive information, I'm unable to provide a sample pbix file. However, the data model is very simple since it's one large table that contains survey responses.

      Here is an abridged example of the data table:

      DateQuestion GroupQuestionOutreach IDLocation

      Positive Response

      JanuaryAQ1aaa111Location1

      True

      JanuaryAQ2aaa111Location1

      False

      JanuaryAQ3aaa111Location1

      True

      MarchBQ6bbb222Location3

      True

      MarchBQ7bbb222Location3

      True

      MarchBQ8bbb222Location3

      True

      AprilAQ1ccc333Location1

      False

      AprilAQ2ccc333Location1

      False

      AprilAQ3ccc333Location1

      True

      AprilCQ1ddd444Location2

      False

      AprilCQ5ddd444Location2

      False

      AprilCQ4ddd444Location2

      False

      There are different question groups that may have common questions with other question groups. And each grouping of rows is based on the outreach ID to distinguish unique survey responders. The goal of my DAX code is to produce a matrix that returns the percentage of positive responses by location.

      However, I also want it to show the positive response rate for the whole enterprise after collapsing the top Question row (hence the HASONEVALUE function since it doesn't properly return the positive response rate for the whole enterprise without it).

      Currently, all the values in the individual cells are produced by a calculated measure with the DAX code, so I'm asking for advice on how to reduce run-time and CPU usage.

       

      Thank you!

  • rgu101 one thing I can tell you ths tha I g one large table is never.a good idea for Power Bi model. 

    2nd, based on the sample you provided, what is the expected output ?

    • rgu101's avatar
      rgu101
      Helper I

      I see, so I'll need to make or import multiple tables to break it up for efficiency?

       

      The screenshots I provided of the table are the correct expected values based on the DAX code I wrote.

  • Result based on the data you provided not the screenshot from the live data. 

    • rgu101's avatar
      rgu101
      Helper I
       JanuaryFebruaryMarchApril
      (+)Q1    
      Location1100%  0%
      Location2   0%

       

      When collapsed, it should return the monthly positive percent across the whole enterprise for that question and not just an average based on the data currently in the matrix.