Funkce List.Range nám v jazyce M umožňuje, mimo jiné, vytvářet kumulativní součty – kdy každý řádek je součtem sebe a všech nad sebou.

Např. v této tabulce (která musí obsahovat indexový sloupec):

spočteme kumulativní součty tímto zápisem:

  • =List.Range(
       Table_with_index[Price],
       0,
       [Index])

Protože:

  • =List.Range(
       Table_with_index[Price], – název předchozího kroku a sloupce, který chceme vysčítávat
       0, – začínáme od začátku, tedy v M od nulté položky
       [Index]) – od nuly se bude brát tolik položek, kolik je napsáno ve sloupci Index

Pak už bude stačit jen převést výsledek na číselný datový typ:

a seskupit součtem:

a je hotovo:

A nejde to jednodušeji?

Pokud byste se nechtěli zdržovat se seskupováním a nebáli se jazyka M, můžete přidat List.Accumulate a všechno zapsat jedním vzorcem. Logika je taková, že nejprve List.Range najde oblast od začátku až do konkrétního řádku, načež List.Accumulate jednotlivé položky sečte.

  • List.Accumulate(
          List.Range(
                #”Changed Type”[Price],
                0,
                [Index]),
          0,
          (state, current)=>state + current)

Případně můžete obdobně použít List.Sum:

  • List.Sum(
       List.Range(
          Changed_type[Price],
          0,
          [Index]))

Pro počítání kumulativních součtů v DAXu klikněte sem.