<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Need help to optimize slow measures in DAX Commands and Tips</title>
    <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Need-help-to-optimize-slow-measures/m-p/2766915#M85972</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="c"&gt;VAR MinNumberDonations = MIN('StøttebreveAntal'[Støttebreve antal])
VAR MaxNumberDonations = MAX('StøttebreveAntal'[Støttebreve antal])

VAR MailSum = IF ( SUM(Splittest[DirectMail brev]) &amp;gt;= MinNumberDonations  &amp;amp;&amp;amp; SUM(Splittest[DirectMail brev]) &amp;lt;= MaxNumberDonations , 1, 0)

VAR OtherDonationCount = IF ( MailSum = 1,
                        CALCULATE(
                            COUNT(Splittest[Other Donations]), 
                            FILTER(Splittest, [OtherDonation] &amp;gt; 0)
                            ),
                        0)

RETURN
IF ( OtherDonationCount &amp;gt;= DonationCountLimit, OtherDonationCount , BLANK())&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am just searching for help to see if the above measure can be optimized with regards to speed.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It works as intended, so its only speed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;MinNumberDonations and MaxNumberDonations is a Parameter set. i.e between 0 and 3&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The VAR MailSum calculates if the SUM is within the above mentioned variables. If true, I count the amount of donations, and return the OtherDonationsCount if it's above or equal to the parameter DonationCountLimit -&amp;nbsp; also a fixed integer.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Can it be done so that the measure is faster? I think that I have missed a few best pratices &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the result from the analyser:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;// DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(VALUES('StøttebreveAntal'[Støttebreve antal])),
      'StøttebreveAntal'[Støttebreve antal] &amp;lt;= 3
    )

  VAR __DS0FilterTable2 = 
    FILTER(
      KEEPFILTERS(VALUES('AntalDonationer'[Antal donationer])),
      'AntalDonationer'[Antal donationer] = 2
    )

  VAR __ValueFilterDM1 = 
    FILTER(
      KEEPFILTERS(
        SUMMARIZECOLUMNS(
          'Splittest'[Donornummer],
          __DS0FilterTable,
          __DS0FilterTable2,
          "SumLotteri_brev", CALCULATE(SUM('Splittest'[Lotteri brev])),
          "AntalDmBreve", 'Splittest'[AntalDmBreve],
          "DM_Bidrag", 'Splittest'[DM Bidrag],
          "Lotteribidrag", 'Splittest'[Lotteribidrag],
          "AndetBidrag", 'Splittest'[AndetBidrag],
          "Antal_donorer", 'Splittest'[Antal donorer],
          "Doner_minus_brev", 'Splittest'[Doner minus brev]
        )
      ),
      NOT(ISBLANK([Doner_minus_brev]))
    )

  VAR __DS0Core = 
    SUMMARIZECOLUMNS(
      ROLLUPADDISSUBTOTAL('Splittest'[Donornummer], "IsGrandTotalRowTotal"),
      __DS0FilterTable,
      __DS0FilterTable2,
      __ValueFilterDM1,
      "SumLotteri_brev", CALCULATE(SUM('Splittest'[Lotteri brev])),
      "AntalDmBreve", 'Splittest'[AntalDmBreve],
      "DM_Bidrag", 'Splittest'[DM Bidrag],
      "Lotteribidrag", 'Splittest'[Lotteribidrag],
      "AndetBidrag", 'Splittest'[AndetBidrag],
      "Antal_donorer", 'Splittest'[Antal donorer],
      "Doner_minus_brev", 'Splittest'[Doner minus brev]
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'Splittest'[Donornummer], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  [IsGrandTotalRowTotal] DESC, 'Splittest'[Donornummer]
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Any help is appreciated&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;</description>
    <pubDate>Wed, 14 Sep 2022 10:26:42 GMT</pubDate>
    <dc:creator>Bokazoit</dc:creator>
    <dc:date>2022-09-14T10:26:42Z</dc:date>
    <item>
      <title>Need help to optimize slow measures</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Need-help-to-optimize-slow-measures/m-p/2766915#M85972</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="c"&gt;VAR MinNumberDonations = MIN('StøttebreveAntal'[Støttebreve antal])
VAR MaxNumberDonations = MAX('StøttebreveAntal'[Støttebreve antal])

VAR MailSum = IF ( SUM(Splittest[DirectMail brev]) &amp;gt;= MinNumberDonations  &amp;amp;&amp;amp; SUM(Splittest[DirectMail brev]) &amp;lt;= MaxNumberDonations , 1, 0)

VAR OtherDonationCount = IF ( MailSum = 1,
                        CALCULATE(
                            COUNT(Splittest[Other Donations]), 
                            FILTER(Splittest, [OtherDonation] &amp;gt; 0)
                            ),
                        0)

RETURN
IF ( OtherDonationCount &amp;gt;= DonationCountLimit, OtherDonationCount , BLANK())&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am just searching for help to see if the above measure can be optimized with regards to speed.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It works as intended, so its only speed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;MinNumberDonations and MaxNumberDonations is a Parameter set. i.e between 0 and 3&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The VAR MailSum calculates if the SUM is within the above mentioned variables. If true, I count the amount of donations, and return the OtherDonationsCount if it's above or equal to the parameter DonationCountLimit -&amp;nbsp; also a fixed integer.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Can it be done so that the measure is faster? I think that I have missed a few best pratices &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the result from the analyser:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;// DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(VALUES('StøttebreveAntal'[Støttebreve antal])),
      'StøttebreveAntal'[Støttebreve antal] &amp;lt;= 3
    )

  VAR __DS0FilterTable2 = 
    FILTER(
      KEEPFILTERS(VALUES('AntalDonationer'[Antal donationer])),
      'AntalDonationer'[Antal donationer] = 2
    )

  VAR __ValueFilterDM1 = 
    FILTER(
      KEEPFILTERS(
        SUMMARIZECOLUMNS(
          'Splittest'[Donornummer],
          __DS0FilterTable,
          __DS0FilterTable2,
          "SumLotteri_brev", CALCULATE(SUM('Splittest'[Lotteri brev])),
          "AntalDmBreve", 'Splittest'[AntalDmBreve],
          "DM_Bidrag", 'Splittest'[DM Bidrag],
          "Lotteribidrag", 'Splittest'[Lotteribidrag],
          "AndetBidrag", 'Splittest'[AndetBidrag],
          "Antal_donorer", 'Splittest'[Antal donorer],
          "Doner_minus_brev", 'Splittest'[Doner minus brev]
        )
      ),
      NOT(ISBLANK([Doner_minus_brev]))
    )

  VAR __DS0Core = 
    SUMMARIZECOLUMNS(
      ROLLUPADDISSUBTOTAL('Splittest'[Donornummer], "IsGrandTotalRowTotal"),
      __DS0FilterTable,
      __DS0FilterTable2,
      __ValueFilterDM1,
      "SumLotteri_brev", CALCULATE(SUM('Splittest'[Lotteri brev])),
      "AntalDmBreve", 'Splittest'[AntalDmBreve],
      "DM_Bidrag", 'Splittest'[DM Bidrag],
      "Lotteribidrag", 'Splittest'[Lotteribidrag],
      "AndetBidrag", 'Splittest'[AndetBidrag],
      "Antal_donorer", 'Splittest'[Antal donorer],
      "Doner_minus_brev", 'Splittest'[Doner minus brev]
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'Splittest'[Donornummer], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  [IsGrandTotalRowTotal] DESC, 'Splittest'[Donornummer]
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Any help is appreciated&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;David&lt;/P&gt;</description>
      <pubDate>Wed, 14 Sep 2022 10:26:42 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Need-help-to-optimize-slow-measures/m-p/2766915#M85972</guid>
      <dc:creator>Bokazoit</dc:creator>
      <dc:date>2022-09-14T10:26:42Z</dc:date>
    </item>
    <item>
      <title>Re: Need help to optimize slow measures</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Need-help-to-optimize-slow-measures/m-p/2766988#M85978</link>
      <description>&lt;P&gt;I have a few suggestions which might speed it up a bit. You are reusing the Splittest[DirectMail brev] sum, you can store it in a variable to make sure it is only calculated once.&lt;/P&gt;
&lt;P&gt;You don't need to use FILTER inside CALCULATE, you can pass a filter condition directly into CALCULATE.&lt;/P&gt;
&lt;P&gt;I've replaced COUNT with COUNTROWS, I think its more efficient.&lt;/P&gt;
&lt;P&gt;Finally, you don't need to return BLANK as the else part of the if clause, that is the default behaviour.&lt;/P&gt;
&lt;P&gt;Modified code is&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;My measure =
VAR MinNumberDonations =
    MIN ( 'StøttebreveAntal'[Støttebreve antal] )
VAR MaxNumberDonations =
    MAX ( 'StøttebreveAntal'[Støttebreve antal] )
VAR DirectMailBrev =
    SUM ( Splittest[DirectMail brev] )
VAR MailSum =
    IF (
        DirectMailBrev &amp;gt;= MinNumberDonations
            &amp;amp;&amp;amp; DirectMailBrev &amp;lt;= MaxNumberDonations,
        1,
        0
    )
VAR OtherDonationCount =
    IF (
        MailSum = 1,
        CALCULATE ( COUNTROWS ( Splittest ), Splittest[OtherDonation] &amp;gt; 0 ),
        0
    )
RETURN
    IF ( OtherDonationCount &amp;gt;= DonationCountLimit, OtherDonationCount )
&lt;/LI-CODE&gt;</description>
      <pubDate>Wed, 14 Sep 2022 10:53:29 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Need-help-to-optimize-slow-measures/m-p/2766988#M85978</guid>
      <dc:creator>johnt75</dc:creator>
      <dc:date>2022-09-14T10:53:29Z</dc:date>
    </item>
    <item>
      <title>Re: Need help to optimize slow measures</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Need-help-to-optimize-slow-measures/m-p/2769195#M86120</link>
      <description>&lt;P&gt;Thanks that did the trick &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Sep 2022 06:33:30 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Need-help-to-optimize-slow-measures/m-p/2769195#M86120</guid>
      <dc:creator>Bokazoit</dc:creator>
      <dc:date>2022-09-15T06:33:30Z</dc:date>
    </item>
  </channel>
</rss>

