Как добиться итоговой суммы с мощным запросом?

Я хочу сделать промежуточный итог с запросом мощности, как я делал раньше с программным обеспечением Tableau. У кого-нибудь есть идеи, заранее спасибо!

7 ответов

Извиняюсь за очень поздний ответ - эта проблема мучила меня много месяцев.

Есть несколько решений, плавающих вокруг форумов и блогов, но все они, кажется, нуждаются в страницах пользовательского кода М Некоторые также не могут удовлетворить общее требование о необходимости перезапуска промежуточного итога при изменении группы.

Итак, я придумал метод, который вы можете создать без написания какого-либо пользовательского кода - вы просто щелкаете мышью в окне Power Query и добавляете один очень простой пользовательский столбец.

Ключевые шаги:

  • Добавить столбец индекса
  • Группировка По столбцам, которые определяют ваши группы, и добавьте столбец "Все строки".
  • Дублируйте столбец "Все строки"
  • Разверните оригинал и копию столбца "Все строки" (на данный момент у вас есть результат "перекрестный продукт" для каждой комбинации строк в каждой группе).
  • Добавьте пользовательский столбец "Накопительный", чтобы определить, какую из строк комбинации включить в промежуточную сумму, например [Index] >= [#"All Rows - Copy.Index"]
  • Фильтр по пользовательскому столбцу "Накопительный" = ИСТИНА
  • Группировать по исходным столбцам и суммировать копию целевого поля

Я создал рабочее решение, которое вы можете загрузить с моего OneDrive и попробовать:

http://1drv.ms/1AzPAZp

Это файл: Power Query demo - итоговый итог

Очень просто.

Шаг 1: Добавить индекс

# "Добавленный индекс" = Table.AddIndexColumn(#"Предыдущий шаг", "Индекс", 0, 1)

Шаг 2: Добавить промежуточный итог

# "Добавленный промежуточный итог" = Table.AddColumn(#"Добавленный индекс", "Промежуточный итог, каждая List.Sum(List.FirstN(#" Добавленный индекс "[Столбец для добавления значений из],[Индекс]+1)))

Я имею в виду, что этот код от Адама работает, но с добавлением "позади" промежуточной суммы:

Шаг 1. Добавьте индекс

"Added Index" = Table.AddIndexColumn(#"Prior Step", "Index", 0, 1)

Шаг 2. Добавьте промежуточную сумму

"Added Running Total" = Table.AddColumn(#"Added Index", "Running Total", each List.Sum(List.FirstN(#"Added Index"[Column to Add Values From],[Index]+1)))

Используя Excel 2016,

  1. Добавить индекс с именем "RunningTotal"

  2. Перейдите в Query -> Edit -> Add Reference Query (индекс должен быть столбцом в Source**

  3. Перейдите в View -> Advanced Editor и вставьте приведенный ниже код, чтобы создать функцию:

  4. Переименуйте запрос в fnRunningTotal

= (tbl as table, sumcolumn as text, rowindex as number) =>
let
    #"Removed Other Columns" = Table.SelectColumns(tbl,{sumcolumn, "RunningTotal"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each [RunningTotal] <= rowindex),
    #"Renamed Columns" = Table.RenameColumns(#"Filtered Rows",{{sumcolumn, "Temp"}}),
    #"Grouped Rows" = Table.Group(#"Renamed Columns", {}, {{"FinalRunningTotal", each List.Sum([Temp]), type number}}),
    FinalRunningTotal = Record.Field(#"Grouped Rows"{0},"FinalRunningTotal")
in
    FinalRunningTotal

Чтобы использовать функцию:

= Table.AddColumn(Source, "RunningTotalAmount", each fnRunningTotal(Source,"MarketValue",[RunningTotal]))

Я считаю, что лучшая техника до сих пор - это создание списка, а затем создание другого столбца с использованием List.Sum. Это не требует каких-либо сложных кодов. Просто наведите и нажмите и решите проблему.

Более подробная информация: https://www.sumproduct.com/blog/article/power-query-one-route-to-a-running-total

Я думаю, что если это возможно в Power Query, это будет очень сложно. Это просто неправильный инструмент. Используйте Power Query, чтобы перенести данные в Power Pivot и вместо этого создать промежуточную сумму. Это стандартная схема. Смотрите это превосходное руководство: http://www.daxpatterns.com/cumulative-total/

Мои любимые

Совокупно по одному столбцу, без группировки

      #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Cum Total" = Table.AddColumn(#"Added Index", "CumTotal", each List.Sum(List.FirstN(#"Added Index"[ColumnNameDoingCumulative],[Index]+1))),

Совокупно по одному столбцу, множественная группировка

      #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index","CumTotal",(i)=>List.Sum(Table.SelectRows(#"Added Index", each [Group1Column]=i[Group1Column] and [Group2Column]=i[Group2Column] and [Index]<=i[Index]) [ColumnNameDoingCumulative]), type number ),
Другие вопросы по тегам