<?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 Re: Calculate difference between dates over multiple iterations in DAX Commands and Tips</title>
    <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4598844#M176064</link>
    <description>&lt;P&gt;Thank you! This worked perfectly.&lt;/P&gt;</description>
    <pubDate>Thu, 06 Mar 2025 15:21:01 GMT</pubDate>
    <dc:creator>mollycat</dc:creator>
    <dc:date>2025-03-06T15:21:01Z</dc:date>
    <item>
      <title>Calculate difference between dates over multiple iterations</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4597377#M176022</link>
      <description>&lt;P&gt;Hello! I am trying to calculate the duration (in minutes) that it takes for a record to go from one status to another (only for certain Status values). The first status change I'm interested in is marked as "&lt;STRONG&gt;FirstRequest&lt;/STRONG&gt;" to "&lt;STRONG&gt;FirstApproval&lt;/STRONG&gt;", but after that, the record can have multiple instances of "&lt;STRONG&gt;AnotherRequest&lt;/STRONG&gt;" to "&lt;STRONG&gt;AnotherApproval&lt;/STRONG&gt;". Each set (per Record Number) should be calculated independently. For those rows where the statuses do not apply to this duration, the EXPECTED DURATION should be null.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've gotten to the point where I'm calculating the duration between each status change for a given Record Number with this formula, but am unsure how to implement the logic for the different Status types.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;VAR&lt;/SPAN&gt;&lt;SPAN&gt; _prevstatusdate_ = &lt;/SPAN&gt;&lt;SPAN&gt;CALCULATE&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;MAX&lt;/SPAN&gt;&lt;SPAN&gt;('Table'[Time Status was Set]),&lt;/SPAN&gt;&lt;SPAN&gt;FILTER&lt;/SPAN&gt;&lt;SPAN&gt;('Table','Table'[Time Status was Set] &amp;lt; &lt;/SPAN&gt;&lt;SPAN&gt;EARLIER&lt;/SPAN&gt;&lt;SPAN&gt;('Table'[Time Status was Set]) &amp;amp;&amp;amp; 'Table'[Record Number] = &lt;/SPAN&gt;&lt;SPAN&gt;EARLIER&lt;/SPAN&gt;&lt;SPAN&gt;('Table'[Record Number])))&lt;/SPAN&gt;&lt;SPAN&gt;RETURN&lt;/SPAN&gt; &lt;SPAN&gt;DATEDIFF&lt;/SPAN&gt;&lt;SPAN&gt;(_prevstatusdate_ ,'Table'[Time Status was Set],MINUTE)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help with this calculation would be greatly appreciated!&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Record Number&lt;/TD&gt;&lt;TD&gt;Status&lt;/TD&gt;&lt;TD&gt;Time Status was Set&lt;/TD&gt;&lt;TD&gt;EXPECTED DURATION (minutes)&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Draft&lt;/TD&gt;&lt;TD&gt;1/1/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8:00 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;FirstRequest&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/1/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 10:00 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;FirstApproval&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/1/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 10:30 AM&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Reverted&lt;/TD&gt;&lt;TD&gt;1/2/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8:00 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;AnotherRequest&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/2/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9:00 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Reviewed&lt;/TD&gt;&lt;TD&gt;1/2/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9:45 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;AnotherApproval&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/2/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 10:00 AM&lt;/TD&gt;&lt;TD&gt;60&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Reverted&lt;/TD&gt;&lt;TD&gt;1/3/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8:00 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;AnotherRequest&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/3/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 12:00 PM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;AnotherApproval&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/3/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3:00 PM&lt;/TD&gt;&lt;TD&gt;180&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FirstRequest*&lt;/TD&gt;&lt;TD&gt;1/1/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 10:00 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Reverted&lt;/TD&gt;&lt;TD&gt;1/1/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 11:00 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;FirstRequest&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/1/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 11:30 AM&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;FirstApproval&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;1/1/2025&amp;nbsp; &amp;nbsp; &amp;nbsp; 11:45 AM&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;*Note: this "&lt;STRONG&gt;FirstRequest&lt;/STRONG&gt;" at 10:00 AM is effectively ignored. The EXPECTED DURATION associated with the 11:45 AM "&lt;STRONG&gt;FirstApproval&lt;/STRONG&gt;" should start from the most recent "&lt;STRONG&gt;FirstRequest&lt;/STRONG&gt;"&amp;nbsp;at 11:30 AM.&lt;/P&gt;</description>
      <pubDate>Wed, 05 Mar 2025 23:06:54 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4597377#M176022</guid>
      <dc:creator>mollycat</dc:creator>
      <dc:date>2025-03-05T23:06:54Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate difference between dates over multiple iterations</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4597470#M176027</link>
      <description>&lt;P&gt;Yeah, what could possibly go wrong. What if AnotherApproval comes in before FirstApproval ? How do you know which events form a pair?&lt;/P&gt;</description>
      <pubDate>Thu, 06 Mar 2025 01:13:55 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4597470#M176027</guid>
      <dc:creator>lbendlin</dc:creator>
      <dc:date>2025-03-06T01:13:55Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate difference between dates over multiple iterations</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4597736#M176035</link>
      <description>&lt;P&gt;It seems like you are looking for:&amp;nbsp;&lt;SPAN&gt;CONTAINSSTRING&lt;/SPAN&gt;&lt;SPAN&gt;( &lt;/SPAN&gt;&lt;SPAN&gt;'Table'&lt;/SPAN&gt;&lt;SPAN&gt;[Status]&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;"request"&lt;/SPAN&gt;&lt;SPAN&gt; )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I think you can just incorporate that into your current formula to get what you want.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;You may want to consider incorporating variables rather than use EARLIER to make your DAX a little more readable. Eg&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;Duration (min) = 
IF( 
    CONTAINSSTRING( 'Table'[Status] , "approval" ), //ignore unless we are in approval row
    VAR _thisTime = 'Table'[Time Status was Set] 
    VAR _thisRec = 'Table'[Record Number]
    VAR _prevReqs = FILTER( 
        ALL( 'Table'[Record Number], 'Table'[Status], 'Table'[Time Status was Set] ), 
        'Table'[Record Number] = _thisRec
        &amp;amp;&amp;amp; 'Table'[Time Status was Set] &amp;lt; _thisTime 
        &amp;amp;&amp;amp; CONTAINSSTRING( 'Table'[Status], "request" ) 
    )
    VAR _lastReqTime = CALCULATE( MAX( 'Table'[Time Status was Set] ), _prevReqs, REMOVEFILTERS( 'Table' ) )
    RETURN
    DATEDIFF( _lastReqTime, _thisTime, MINUTE )
)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 06 Mar 2025 05:21:21 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4597736#M176035</guid>
      <dc:creator>MarkLaf</dc:creator>
      <dc:date>2025-03-06T05:21:21Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate difference between dates over multiple iterations</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4598844#M176064</link>
      <description>&lt;P&gt;Thank you! This worked perfectly.&lt;/P&gt;</description>
      <pubDate>Thu, 06 Mar 2025 15:21:01 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculate-difference-between-dates-over-multiple-iterations/m-p/4598844#M176064</guid>
      <dc:creator>mollycat</dc:creator>
      <dc:date>2025-03-06T15:21:01Z</dc:date>
    </item>
  </channel>
</rss>

