我在 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"
查询结果(符合预期):
然后我将其参数化:
(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):
如您所见,组函数似乎忽略了我分配给组函数的第二个参数。 我尝试用各种串联、Table.Column 函数和要求和的列替换 {groupByColumn} ,并用原始列名 {"DateValue"} 静态替换它。 列函数失败了,而所有其他尝试都产生了相同的结果,每个月都与整个数据集的总和 1528 配对。
我认为它一定是忽略了第二个参数,所以我尝试将其留空:
#"Grouped Rows" = Table.Group(Source, {}
, {{aggregateColumnName , each List.Sum(Table.Column(Source, aggregateColumnName)), type number}}),
正如预期的那样,产生了 2 行,值为 1528。所以它只是部分忽略了参数 2:
有谁知道如何将变量列传递给组函数来动态处理参数表? 我正在寻求动态计算第一个表的结果。
我不明白为什么你会得到双倍的输出,但它没有像你期望的那样求和的原因是,当你写
each List.Sum(Table.Column(Source, aggregateColumnName))
时,它没有考虑本地上下文,而是对整个求和Source
桌子。
要解决这个问题,我们不要使用each,而是使用一个函数,如下所示
(LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName))
整行是:
#"Grouped Rows" =
Table.Group(
Source,
{groupByColumn},
{{
aggregateColumnName,
(LocalContext) => List.Sum(Table.Column(LocalContext, aggregateColumnName)),
type number
}}
)
阅读材料:
您可以使用 each 关键字,如下所示:
#"Grouped Rows" =
Table.Group(
Source,
{groupByColumn},
{{
aggregateColumnName,
each List.Sum(Table.Column(_, aggregateColumnName)),
type number
}}
)