如何在power查询中动态使用list.range函数?

How to use list.range function dynamically in power query?

我有 table :

table

我想要类别列的输出,例如包含 H、I、J、K 的行,以及当我使用带分隔符的拆分列时。

我如何动态地做同样的事情?

我如何将 list.range 函数与 text.beforedelimiter 和 text.afterdelimiter 一起使用来获取 'Category' 列中的 H、I、J、K 行?

示例输出:

Category    Month       Cost 
------------    ---------       -------
A           January     2887
A           February    570
.
.
.
H       September   602
H       October     1204
H       November    1011
H       December    2699
I       September   602
I       October     1204
I       November    1011
I       December    2699
J       September   602
J       October     1204
J       November    1011
J       December    2699
K       September   602
K       October     1204

您可以将类别列转换为单独的 列表。 然后将列表展开成行。

例如:

 //Transform first column into lists of categories
    xForm1 = Table.TransformColumns(Previous Step, {"Category",
                each if Text.Contains(_,"-") then 
                    {Text.Split(_,"-"){0}..Text.Split(_,"-"){1}} 
                    else Text.Split(_,",")}

来源

列表

扩展列表

要获得所需的输出,

  • 您可能希望将 0 替换为 null
  • Select第一栏
  • 逆透视其他列

这里是 M 代码,用于将您的原始数据转换为您想要的结果:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    typed = Table.TransformColumnTypes(Source,{{"Category",Text.Type}} & 
       List.Transform(List.RemoveFirstN(Table.ColumnNames(Source)),
                each {_,Int64.Type})),
    
    //Transform first column into lists of categories
    xForm1 = Table.TransformColumns(typed, {"Category",
                each if Text.Contains(_,"-") then 
                    {Text.Split(_,"-"){0}..Text.Split(_,"-"){1}} 
                    else Text.Split(_,",")}),
    
    //Replace 0's with nulls so they won't show up in the unpivot
    #"Replaced Value" = Table.ReplaceValue(xForm1,0,null,Replacer.ReplaceValue,
        Table.ColumnNames(xForm1)),

    //Expand the List Column into rows
    #"Expanded Category" = Table.ExpandListColumn(#"Replaced Value", "Category"),

    //Unpivot the data (month) columns
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Expanded Category", {"Category"}, "Month", "Value")
in
    #"Unpivoted Other Columns"

来源

结果

您可以在 Power Query 编辑器 -

中使用以下代码创建新的自定义列
List.Range({Text.At([Category],0)..Text.At([Category],Text.Length([Category]) - 1)}, 0)

您将得到如下输出-

现在您可以将 Expand to new rows 应用于新列表输出,您将得到如下结果-

现在您可以对输出进行其他计算。