首页 > 解决方案 > Power Query (M) _ 动态更新 List.Sum 函数的列列表

问题描述

我不确定是否可能,但目标是根据用户选择日期动态更新查询。我的 Excel 文件中有一个表格,同时更新了一个提供给 PeriodString 变量的值(如下)

/*Parameter name = PeriodString */
let
    Source = Excel.CurrentWorkbook(){[Name="PeriodString"]}[Content],
    StrPeriod = Source[Value]{0}
in
    StrPeriod

我要更新的代码部分是 [ ..months selected ]。

=List.Sum({[FYOpening],[January],[February],[March],[April],[May]})

使用以下变量

=List.Sum({PeriodStr})

我尝试使用 Table.Column,因为我意识到我必须将值转换为可选列的列表,但我无法让它工作。

=List.Sum({Table.Column(PeriodString{0},PeriodString[0])})

Expression.Error: We cannot convert the value "[FY Opening],[Januar..." to type List.
Details:
    Value=[FY Opening],[January],[February],[March],[April],[May]
    Type=[Type]

如果可能/替代方案,请告诉我。

标签: excellistpowerquerym

解决方案


如果您需要为 PeriodString 提供像“[Col1],[Col2],[Col3]”这样的确切值,请使用以下代码:

let
    Source = #table({"a".."e"},{{1..5}, {6..10}}),
    PeriodString = "[b],[d],[e]",
    sum = Table.AddColumn(Source, "sum", each List.Sum(Expression.Evaluate("{"&PeriodString&"}", [_=_])))
in
    sum

我更喜欢使用 PQ list 代替:

let
    Source = #table({"a".."e"},{{1..5}, {6..10}}),
    list = {"b","d","e"},
    sum = Table.AddColumn(Source, "sum", each List.Sum(Record.ToList(Record.SelectFields(_, list))))
in
    sum

推荐阅读