如何在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 应用于新列表输出,您将得到如下结果-
现在您可以对输出进行其他计算。
我有 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 应用于新列表输出,您将得到如下结果-
现在您可以对输出进行其他计算。