Страницы: 1
RSS
Power Query. Посчитать накопительный итог с обратной сортировкой
 
Доброго дня всем,

Сижу ломаю голову как перевести формулу из экселя в Power Query.
Пример во вложении.
Есть табличка, последний столбец - Sum, вот как также прописать в PQ?
Игрался с группировкой и столбцом сведения, но ничего такого не получилось.
Знаю как в power pivot, но не вариант. Нужно в PQ.
Изменено: vikttur - 27.10.2021 10:13:50
 
Digitalizer, название для темы с вас
 
Как-то так:
Код
let
    FnRunSum = (sub as table, col as text)=>
    let subbuf = Table.Buffer( sub ),
        itemCount = Table.RowCount( subbuf ),
        sumList = List.Buffer( Table.ToColumns( Table.SelectColumns( subbuf, {col} ) ){0} ),
        calcRunningTotal = List.Generate(
            () => [id = 0, runningSum = sumList{id}],
            each [id] < itemCount,
            each [id = [id] + 1, runningSum = [runningSum] + sumList{id}],
            each [runningSum] )
    in  Table.FromColumns( Table.ToColumns( subbuf ) & {calcRunningTotal}, Table.ColumnNames( subbuf ) & {"AccSum"} ),
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Grouped = Table.Group(Source, {"Title"}, {{"tab", each FnRunSum( Table.Sort(_,{{"Month", Order.Descending}}), "Count")}}),
    tab = Table.Combine( Grouped[tab], type table [Title=text, Date=text, Month=number, Count=number, Sum=number, AccSum=number] ),
    Sorted = Table.Sort(tab,{{"Title", Order.Ascending}, {"Month", Order.Ascending}})
in
    Sorted
Изменено: PooHkrd - 27.10.2021 09:24:33
Вот горшок пустой, он предмет простой...
 
vikttur, как в Power Query посчитать накопительный итог с обратной сортировкой.
Вот горшок пустой, он предмет простой...
 
Добрый день!
Пользуюсь вот таким методом:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Title", type text}, {"Date", type date}, {"Month", Int64.Type}, {"Count", Int64.Type}, {"Sum", Int64.Type}}),
    #"Сгруппированные строки" = Table.Group(#"Измененный тип", {"Title", "Date"}, {{"f", each 
let
a = Table.Sort(_, {"Month", Order.Descending}),
b = Table.AddIndexColumn(a, "i",1,1),
c = Table.AddColumn(b, "Sum_", each List.Sum(List.Range(b[Count],0, [i]))),
d = Table.Sort(c, {"Month", Order.Ascending})
in
d}}),
    #"Развернутый элемент f" = Table.ExpandTableColumn(#"Сгруппированные строки", "f", {"Month", "Count", "Sum", "Sum_"}, {"Month", "Count", "Sum", "Sum_"})
in
    #"Развернутый элемент f"
 
Andrey_S, как бы пользуйтесь, но сильно керемендую делать вот так:
Код
...
b = Table.AddIndexColumn(a, "i",1,1),
buf = List.Buffer(b[Count]),
c = Table.AddColumn(b, "Sum_", each List.Sum(List.Range(buf,0, [i]))),
...

Тогда будет работать сильно быстрее.
Изменено: PooHkrd - 27.10.2021 12:37:00 (чуть исправил код, добрые люди указали на неточность.)
Вот горшок пустой, он предмет простой...
 
PooHkrd, Andrey_S, благодарю.

Всем спасибо. Вопрос решен.
 
PooHkrd, Andrey_S, Сенсеи, а как подкрутить код если нужно чтобы появились пропущенные month? прям с 0 отметки, т.е. с Month =0,1,2,3,4 и т.д. до последнего.
пример прилагаю. Заранее спасибо.
 
Digitalizer, соблюдайте правила форума. Один вопрос - одна тема.
Сформулируйте корректно вопрос и открывайте новую тему.
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх