<?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 Calculating Current Value using Previous Row's Calculated Value in DAX Commands and Tips</title>
    <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4086684#M162212</link>
    <description>&lt;P&gt;I have a dataset representing battery state changes, and I need to calculate the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;ResidualCapacity&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;for each state change. The&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;should be calculated as the previous&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;plus the current&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ChargeVariation, without exceeding an&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;UpperBound&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;of 80.&lt;/P&gt;&lt;P&gt;Here's the structure of my table with the correct ResidualCapacity&amp;nbsp;value:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;ChangeState &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ChargeVariation &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ResidualCapacity&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;-10&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;ChangeState&lt;/STRONG&gt;: Index showing the chronological order of battery state changes.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;ChargeVariation&lt;/STRONG&gt;: The amount by which the charge has varied.&lt;UL&gt;&lt;LI&gt;ChargeVariation &amp;lt; 0: Battery usage&lt;/LI&gt;&lt;LI&gt;ChargeVariation &amp;gt; 0: Battery charging&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;ResidualCapacity&lt;/STRONG&gt;: A calculated column that should show the residual battery capacity after each state change.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;My goal is for&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;to always be the previous&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;plus the current&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ChargeVariation, but it should never exceed the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;UpperBound&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;of 80.&lt;/P&gt;&lt;P&gt;I've written the following DAX query, but it returns an incorrect result for the last value of&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;(it returns 70 instead of 65):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;ResidualCapacity = 
    VAR UpperBound = 80
    VAR CurrentVariation = 'Table'[ChargeVariation]
    VAR CurrentState = 'Table'[ChangeState]

    VAR PervVariationRT = 
        SUMX(
            FILTER(
                'Table',
                'Table'[ChangeState] &amp;lt; CurrentState
            ),
            'Table'[ChargeVariation]
        )

    VAR Result =
        MIN(CurrentVariation + MIN(PervVariationRT, UpperBound), UpperBound)

    RETURN
        Result&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;ChangeState &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ChargeVariation &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ResidualCapacity &lt;FONT color="#FF0000"&gt;(WRONG)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;-10&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;70&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&lt;SPAN&gt;How can I modify this query to correctly calculate the ResidualCapacity calculated column for each state change?&lt;BR /&gt;It is also OK if the solution is written in M Power Query&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Wed, 07 Aug 2024 12:10:18 GMT</pubDate>
    <dc:creator>Poffarbacco</dc:creator>
    <dc:date>2024-08-07T12:10:18Z</dc:date>
    <item>
      <title>Calculating Current Value using Previous Row's Calculated Value</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4086684#M162212</link>
      <description>&lt;P&gt;I have a dataset representing battery state changes, and I need to calculate the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;ResidualCapacity&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;for each state change. The&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;should be calculated as the previous&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;plus the current&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ChargeVariation, without exceeding an&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;UpperBound&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;of 80.&lt;/P&gt;&lt;P&gt;Here's the structure of my table with the correct ResidualCapacity&amp;nbsp;value:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;ChangeState &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ChargeVariation &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ResidualCapacity&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;-10&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;ChangeState&lt;/STRONG&gt;: Index showing the chronological order of battery state changes.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;ChargeVariation&lt;/STRONG&gt;: The amount by which the charge has varied.&lt;UL&gt;&lt;LI&gt;ChargeVariation &amp;lt; 0: Battery usage&lt;/LI&gt;&lt;LI&gt;ChargeVariation &amp;gt; 0: Battery charging&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;ResidualCapacity&lt;/STRONG&gt;: A calculated column that should show the residual battery capacity after each state change.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;My goal is for&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;to always be the previous&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;plus the current&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ChargeVariation, but it should never exceed the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;UpperBound&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;of 80.&lt;/P&gt;&lt;P&gt;I've written the following DAX query, but it returns an incorrect result for the last value of&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ResidualCapacity&amp;nbsp;(it returns 70 instead of 65):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;ResidualCapacity = 
    VAR UpperBound = 80
    VAR CurrentVariation = 'Table'[ChargeVariation]
    VAR CurrentState = 'Table'[ChangeState]

    VAR PervVariationRT = 
        SUMX(
            FILTER(
                'Table',
                'Table'[ChangeState] &amp;lt; CurrentState
            ),
            'Table'[ChargeVariation]
        )

    VAR Result =
        MIN(CurrentVariation + MIN(PervVariationRT, UpperBound), UpperBound)

    RETURN
        Result&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;ChangeState &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ChargeVariation &lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;ResidualCapacity &lt;FONT color="#FF0000"&gt;(WRONG)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;65&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;80&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;-10&lt;/TD&gt;&lt;TD&gt;70&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;70&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&lt;SPAN&gt;How can I modify this query to correctly calculate the ResidualCapacity calculated column for each state change?&lt;BR /&gt;It is also OK if the solution is written in M Power Query&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Aug 2024 12:10:18 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4086684#M162212</guid>
      <dc:creator>Poffarbacco</dc:creator>
      <dc:date>2024-08-07T12:10:18Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Current Value using Previous Row's Calculated Value</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4086830#M162219</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="787630" data-lia-user-login="Poffarbacco" class="lia-mention lia-mention-user"&gt;Poffarbacco&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are some options (&lt;A href="https://ozerconsulting-my.sharepoint.com/:u:/g/personal/owen_owenaugerbi_com/Ef--qM8ajl1BkybY1lX-H1IBgz5_4cifmigw2nyOkN5FwQ?e=aGwEhK" target="_blank" rel="noopener"&gt;PBIX link here&lt;/A&gt; since forum attachment wasn't working):&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;&lt;STRONG&gt;1. DAX calculated column:&lt;/STRONG&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;ResidualCapacity DAX = 
VAR UpperBound = 80
VAR CurrentState = 'Table'[ChangeState]
VAR StateHistory =
    FILTER ( ALL ( 'Table'[ChangeState] ), 'Table'[ChangeState] &amp;lt;= CurrentState )
-- Cumulative ChargeVariation for all States up to and including current
VAR CumulativeTable =
    ADDCOLUMNS (
        StateHistory,
        "@Cumulative",
        VAR CurrentStateInner = 'Table'[ChangeState]
        RETURN
            CALCULATE (
                SUM ( 'Table'[ChargeVariation] ),
                'Table'[ChangeState] &amp;lt;= CurrentStateInner,
                REMOVEFILTERS ( 'Table' )
            )
    )
VAR MaxCumulative =
    MAXX ( CumulativeTable, [@Cumulative] )
VAR CurrentCumulative =
    SELECTCOLUMNS (
        FILTER ( CumulativeTable, 'Table'[ChangeState] = CurrentState ),
        [@Cumulative]
    )
-- Adjustment required for largest exceedance of Threshold so far
VAR Adjustment =
    MIN ( UpperBound - MaxCumulative, 0 )
VAR Result =
    CurrentCumulative + Adjustment
RETURN
    Result&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Power Query&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Adapt Imke Feldmann's Power Query function for adding a cumulative column from&amp;nbsp;&lt;A href="https://www.thebiccountant.com/2018/09/30/memory-efficient-clustered-running-total-in-power-bi/" target="_blank" rel="noopener"&gt;this post.&lt;/A&gt; (Shout out to&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="1522" data-lia-user-login="ImkeF" class="lia-mention lia-mention-user"&gt;ImkeF&lt;/a&gt;! )&lt;/P&gt;
&lt;P&gt;Here is the modified version of the function that allows for nullable UpperBound and LowerBound parameters:&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;let
  func = (
    Table as table,
    RunningTotalName as text,
    SortColumn as text,
    AmountColumn as text,
    UpperBound as nullable number,
    LowerBound as nullable number
  ) =&amp;gt;
    let

      // Sort table and buffer it
      Sorted = Table.Buffer(
        Table.AddIndexColumn(Table.Sort(Table, {{SortColumn, Order.Ascending}}), "Index", 1, 1)
      ),
      // Select the Columns
      SelectColumns = Table.SelectColumns(Sorted, {SortColumn, AmountColumn, "Index"}),
      // Extract Amount column and buffer it
      ExtractAmountColumn = List.Buffer(Table.Column(SelectColumns, AmountColumn)),
      // Calculate a list with all running Totals
      RunningTotal = List.Skip(
        List.Generate(
          () =&amp;gt; [ListItem = 0, Counter = 0],
          each [Counter] &amp;lt;= List.Count(ExtractAmountColumn),
          each [
            ListItem =
              let
                Value = ExtractAmountColumn{[Counter]} + [ListItem]
              in
                List.Max({List.Min({Value, UpperBound}), LowerBound}),
            Counter = [Counter] + 1
          ]
        ),
        1
      ),
      ConvertedTable = Table.FromList(
        RunningTotal,
        Splitter.SplitByNothing(),
        null,
        null,
        ExtraValues.Error
      ),
      ExpandedColumn = Table.ExpandRecordColumn(
        ConvertedTable,
        "Column1",
        {"ListItem", "Counter"},
        {"ListItem", "Counter"}
      ),
      MergedQueries = Table.NestedJoin(
        Sorted,
        {"Index"},
        ExpandedColumn,
        {"Counter"},
        "Expanded Column1",
        JoinKind.LeftOuter
      ),
      Expand = Table.ExpandTableColumn(
        MergedQueries,
        "Expanded Column1",
        {"ListItem"},
        {RunningTotalName}
      ),
      #"Removed Columns" = Table.RemoveColumns(Expand, {"Index"}),
      #"Changed Type" = Table.TransformColumnTypes(
        #"Removed Columns",
        {{RunningTotalName, type number}}
      )
    in
      #"Changed Type"
  ,
  documentation = [
    Documentation.Name            = " Table.ColumnRunningTotal",
    Documentation.Description     = " Fast way to add running total to a table",
    Documentation.LongDescription = " Fast way to add running total to a table",
    Documentation.Category        = " Table",
    Documentation.Source          = " local",
    Documentation.Author          = " Imke Feldmann: www.TheBIccountant.com",
    Documentation.Examples        = {[Description = " ", Code = " ", Result = " "]}
  ]
in
  Value.ReplaceType(func, Value.ReplaceMetadata(Value.Type(func), documentation))                                                                         &lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Applied to the table in the attached PBIX it looks like this:&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;let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTI3gBCxOtFKRkCmrimQMDMF842BTCOQvAVE3gQkb4ikwRRZQywA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ChangeState = _t, ChargeVariation = _t, #"ResidualCapacity Expected" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ChangeState", Int64.Type}, {"ChargeVariation", Int64.Type}, {"ResidualCapacity Expected", Int64.Type}}),
    #"Add Running Total" = ColumnRunningTotal(#"Changed Type", "ResidualCapacity PQ", "ChangeState", "ChargeVariation", 80, null)
in
    #"Add Running Total"&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Were these the sort of thing you were looking for?&amp;nbsp;&lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Aug 2024 13:36:18 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4086830#M162219</guid>
      <dc:creator>OwenAuger</dc:creator>
      <dc:date>2024-08-07T13:36:18Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Current Value using Previous Row's Calculated Value</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4086846#M162221</link>
      <description>&lt;P&gt;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="787630" data-lia-user-login="Poffarbacco" class="lia-mention lia-mention-user"&gt;Poffarbacco&lt;/a&gt;&amp;nbsp;Nifty little pseudo recursion problem. Here is my solution. Attached PBIX contains both column and measure forms.&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;Column = 
    VAR __UpperBound = 80
    VAR __CurrentState = [ChangeState]
    VAR __StartState = MINX( ALL('Table'), [ChangeState])
    VAR __StartValue = MINX( FILTER( ALL('Table'), [ChangeState] = __StartState ), [ChargeVariation] )
    VAR __Table = FILTER( ALL('Table'), [ChangeState] &amp;lt;= __CurrentState )
    VAR __Table1 = ADDCOLUMNS( __Table, "__Value", SUMX( FILTER( __Table, [ChangeState] &amp;lt;= EARLIER( 'Table'[ChangeState]) ), [ChargeVariation] ), "__Upper", __UpperBound )
    VAR __Table2 = ADDCOLUMNS( __Table1, "__Subtract", IF( [__Value] &amp;gt; [__Upper], [__Value] - [__Upper], 0 ) )
    VAR __Result = SUMX( __Table2, [ChargeVariation]) - SUMX(__Table2, [__Subtract] )
RETURN
    __Result&lt;/LI-CODE&gt;</description>
      <pubDate>Wed, 07 Aug 2024 13:43:39 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4086846#M162221</guid>
      <dc:creator>Greg_Deckler</dc:creator>
      <dc:date>2024-08-07T13:43:39Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Current Value using Previous Row's Calculated Value</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4089466#M162313</link>
      <description>&lt;P&gt;In the actual problem, the calculated column cannot be calculated due to excessive memory usage by the query "Not enough memory to complete this operation". The memory usage, which can be seen from Task Manager, is shown below:&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;Here is the &lt;A href="https://drive.google.com/drive/folders/1bce6EvlUfJvfxBNtsD9A3DiSl3BIF7VH?usp=sharing" target="_self"&gt;link&lt;/A&gt;&amp;nbsp;to download .pbix and .csv file of the fact table with real dimensions. The actual table is slightly different from the one presented in the toy case. It consists of 61k rows divided into 16 different IDs (vehicle identifiers), with each ID having between 2k to 6k rows.&lt;/P&gt;&lt;P&gt;More specifically, the table is structured as follows:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;ID&lt;/STRONG&gt;: Vehicle Identifier&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Index&lt;/STRONG&gt;: Sequential Number&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Value&lt;/STRONG&gt;: Load absorbed or accumulated&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I have rewritten the query by adapting it to the specific case and trying to optimize it. The result is as follows:&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;Column =
VAR __UpperBound = 80
VAR __CurrentIndex = [Index]
VAR __CurrentID = [ID]

VAR __StartIndex = 1
VAR __StartValue =
    CALCULATE (
        MIN ( [Value] ),
        'Table'[Index] = __StartIndex,
        'Table'[ID] = __CurrentID
    )
	
VAR __Table =
    FILTER ( ALL ( 'Table' ), [Index] &amp;lt;= __CurrentIndex  &amp;amp;&amp;amp; [ID] = __CurrentID)
VAR __Table1 =
    ADDCOLUMNS (
        __Table,
        "__Value",
		VAR __InnerIndex = 'Table'[Index]
		VAR __InnerID = 'Table'[ID]
		RETURN
            SUMX (
                FILTER ( __Table, [Index] &amp;lt;= __InnerIndex &amp;amp;&amp;amp; [ID] = __InnerID ),
                [Value]
            ),
        "__Upper", __UpperBound
    )
VAR __Table2 =
    ADDCOLUMNS (
        __Table1,
        "__Subtract",
            IF ( [__Value] &amp;gt; [__Upper], [__Value] - [__Upper], 0 )
    )
VAR __Result =
    SUMX ( __Table2, [Value] - [__Subtract] )
RETURN
    __Result&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help in optimising this DAX query and reducing memory consumption would be greatly appreciated. Would a PowerQuery solution be more efficient? &lt;/P&gt;</description>
      <pubDate>Thu, 08 Aug 2024 14:24:24 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4089466#M162313</guid>
      <dc:creator>Poffarbacco</dc:creator>
      <dc:date>2024-08-08T14:24:24Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Current Value using Previous Row's Calculated Value</title>
      <link>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4114173#M163290</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="787630" data-lia-user-login="Poffarbacco" class="lia-mention lia-mention-user"&gt;Poffarbacco&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;yes, Power Query would be more efficient.&lt;BR /&gt;Please check out my solution that&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="6799" data-lia-user-login="OwenAuger" class="lia-mention lia-mention-user"&gt;OwenAuger&lt;/a&gt;&amp;nbsp; mentioned above.&amp;nbsp;&lt;BR /&gt;It did the trick for me.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 20:26:34 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/DAX-Commands-and-Tips/Calculating-Current-Value-using-Previous-Row-s-Calculated-Value/m-p/4114173#M163290</guid>
      <dc:creator>ImkeF</dc:creator>
      <dc:date>2024-08-22T20:26:34Z</dc:date>
    </item>
  </channel>
</rss>

