如何在 PowerQuery 查询中正确使用 table.group 来动态汇总不同的行和列?
How do I properly use table.group in a PowerQuery query to dynamically summarize different rows and columns?
我在 Excel 2016 年创建了一个 table,我在其中放置了各种列名称、我想总结的列、要设置新列名称的名称等。基本上就是我想要的参数 table.
然后我在 Power Query 编辑器中创建了一个函数,并将上述 table 中的值传递给该函数。起初它失败了,但我发现 Power Query column name as parameter 向我展示了如何将其中一个列名传递给参数。
乍一看分组功能似乎有效,我看到了我想要分组的月份,但该值汇总了每个月的整个 table 而不是单独的。我首先在普通查询中编辑数据:
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"
查询结果(符合预期):
然后我将它参数化:
(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"
我用两个虚拟行针对参数 table 执行了函数。如预期的那样,两个输入行各乘以 12 个月的行变成 24(原始数据集为 12 个月),但总和值是数据集的总和 (1528):
如您所见,Group 函数似乎忽略了我分配给 group 函数的第二个参数。我尝试用各种连接替换 {groupByColumn},Table.Column 函数与要求和的列一样,并用原始列名 {"DateValue"} 静态替换它。列函数失败,而所有其他尝试都产生了相同的结果,每个月与整个数据集的总和配对,1528。
我想它一定是忽略了第二个参数,所以我试着把它留空:
#"Grouped Rows" = Table.Group(Source, {}
, {{aggregateColumnName , each List.Sum(Table.Column(Source, aggregateColumnName)), type number}}),
如预期的那样产生了 2 行,值为 1528。所以它只是部分忽略了参数 2:
有谁知道如何将变量列传递给组函数以动态处理参数table?我正在寻求动态计算第一个 table.
的结果
我不明白你为什么得到双倍的输出,但它没有像你期望的那样求和的原因是当你写 each List.Sum(Table.Column(Source, aggregateColumnName))
时,它没有考虑本地上下文,而是而是对整个 Source
table.
求和
为了解决这个问题,我们不使用 each,而是像这样使用一个函数
(LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName))
整行是:
#"Grouped Rows" =
Table.Group(
Source,
{groupByColumn},
{{
aggregateColumnName,
(LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName)),
type number
}}
)
阅读material:
https://www.excelguru.ca/blog/2018/01/09/each-keyword-power-query/
您可以使用 each 关键字,如下所示:
#"Grouped Rows" =
Table.Group(
Source,
{groupByColumn},
{{
aggregateColumnName,
each List.Sum(Table.Column(_, aggregateColumnName)),
type number
}}
)
我在 Excel 2016 年创建了一个 table,我在其中放置了各种列名称、我想总结的列、要设置新列名称的名称等。基本上就是我想要的参数 table.
然后我在 Power Query 编辑器中创建了一个函数,并将上述 table 中的值传递给该函数。起初它失败了,但我发现 Power Query column name as parameter 向我展示了如何将其中一个列名传递给参数。
乍一看分组功能似乎有效,我看到了我想要分组的月份,但该值汇总了每个月的整个 table 而不是单独的。我首先在普通查询中编辑数据:
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"
查询结果(符合预期):
然后我将它参数化:
(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"
我用两个虚拟行针对参数 table 执行了函数。如预期的那样,两个输入行各乘以 12 个月的行变成 24(原始数据集为 12 个月),但总和值是数据集的总和 (1528):
如您所见,Group 函数似乎忽略了我分配给 group 函数的第二个参数。我尝试用各种连接替换 {groupByColumn},Table.Column 函数与要求和的列一样,并用原始列名 {"DateValue"} 静态替换它。列函数失败,而所有其他尝试都产生了相同的结果,每个月与整个数据集的总和配对,1528。
我想它一定是忽略了第二个参数,所以我试着把它留空:
#"Grouped Rows" = Table.Group(Source, {}
, {{aggregateColumnName , each List.Sum(Table.Column(Source, aggregateColumnName)), type number}}),
如预期的那样产生了 2 行,值为 1528。所以它只是部分忽略了参数 2:
有谁知道如何将变量列传递给组函数以动态处理参数table?我正在寻求动态计算第一个 table.
的结果我不明白你为什么得到双倍的输出,但它没有像你期望的那样求和的原因是当你写 each List.Sum(Table.Column(Source, aggregateColumnName))
时,它没有考虑本地上下文,而是而是对整个 Source
table.
为了解决这个问题,我们不使用 each,而是像这样使用一个函数
(LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName))
整行是:
#"Grouped Rows" =
Table.Group(
Source,
{groupByColumn},
{{
aggregateColumnName,
(LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName)),
type number
}}
)
阅读material:
https://www.excelguru.ca/blog/2018/01/09/each-keyword-power-query/
您可以使用 each 关键字,如下所示:
#"Grouped Rows" =
Table.Group(
Source,
{groupByColumn},
{{
aggregateColumnName,
each List.Sum(Table.Column(_, aggregateColumnName)),
type number
}}
)