Как правильно использовать table.group в запросе PowerQuery для динамического суммирования различных строк и столбцов? - PullRequest
0 голосов
/ 12 декабря 2018

Я создал таблицу в Excel 2016, в которую я помещал различные имена столбцов, столбцы, которые я хотел суммировать, имена для установки имен новых столбцов и т. Д. По сути, я хотел быть таблицей параметров.

Затем я создал функцию в редакторе Power Query и передал значения из вышеупомянутой таблицы в функцию.Сначала это не удалось, но я нашел Имя столбца Power Query в качестве параметра , который показал мне, как передать одно из имен столбцов в параметр.

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

let
Source = #"Final Dataset",
#"Grouped Rows" = Table.Group(Source, {"DateValue"}, {{"xOccurrences", each List.Sum([xOccurrences]), type number}}),
#"Added Custom4" = Table.AddColumn(#"Grouped Rows", "Plant Region", each "Ttl Occ PR"),
#"Added Custom" = Table.AddColumn(#"Added Custom4", "SD Region", each null)
in
#"Added Custom"

Результат запроса (как и ожидалось):

before the query

Затем я его параметризовал:

(groupByColumn as text, aggregateColumnName, optional plantRegionValue as text, optional sdRegionValue as text) =>
let
Source = #"Final Dataset",
#"Grouped Rows" = Table.Group(Source, {groupByColumn}, {{aggregateColumnName , each List.Sum(Table.Column(Source, aggregateColumnName)), type number}}),
#"Added Custom4" = Table.AddColumn(#"Grouped Rows", "Plant Region", each plantRegionValue),
#"Added Custom" = Table.AddColumn(#"Added Custom4", "SD Region", each sdRegionValue)
in
#"Added Custom"

Я выполнил функцию для таблицы параметров с двумя фиктивными строками.Две входные строки, каждая из которых умножена на 12-месячные строки, превратились в 24 (исходный набор данных составляет 12 месяцев), как и ожидалось, но суммированные значения представляют собой сумму набора данных (1528):

function results

Как вы можете видеть, групповая функция, похоже, игнорирует второй параметр, который я назначил групповой функции.Я пробовал различные замены {groupByColumn} с различными конкатенациями, функцию Table.Column как для столбца для суммирования, и статически заменяя его исходным именем столбца {"DateValue"}.Функция столбца завершилась неудачно, хотя все остальные попытки дали одинаковые результаты, каждый месяц в паре с суммой всего набора данных, 1528.

Я думал, что это должен быть игнорирование второго параметра, поэтому я попытался оставить егопусто:

#"Grouped Rows" = Table.Group(Source, {}
    , {{aggregateColumnName , each List.Sum(Table.Column(Source, aggregateColumnName)), type number}}),

, что, как и ожидалось, дало 2 строки со значениями 1528. Таким образом, параметр 2 только частично игнорируется:

enter image description here

Кто-нибудь знает, как передать переменные столбцы в функцию группы для динамической обработки таблицы параметров?Я стремлюсь динамически вычислять результаты из первой таблицы.

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

Вы можете использовать каждое ключевое слово следующим образом:

#"Grouped Rows" =
Table.Group(
    Source,
    {groupByColumn},
    {{
        aggregateColumnName,
        each List.Sum(Table.Column(_, aggregateColumnName)),
        type number
    }}
)
0 голосов
/ 12 декабря 2018

Я не понимаю, почему вы получаете удвоенный вывод, но причина, по которой он не суммируется, как вы ожидаете, состоит в том, что когда вы пишете each List.Sum(Table.Column(Source, aggregateColumnName)), он не учитывает локальный контекст, а скорее суммирует повся таблица Source.

Чтобы исправить это, вместо использования каждой из них, давайте вместо этого воспользуемся такой функцией

(LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName))

Вся строка будет выглядеть так:

#"Grouped Rows" =
Table.Group(
    Source,
    {groupByColumn},
    {{
        aggregateColumnName,
        (LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName)),
        type number
    }}
)

Материал для чтения:

https://bengribaudo.com/blog/2017/12/08/4270/power-query-m-primer-part3-functions-function-values-passing-returning-defining-inline-recursion

https://www.excelguru.ca/blog/2018/01/09/each-keyword-power-query/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...