PowerBI:Power Query:处理由于数据透视而改变的列名

PowerBI: Power Query: Dealing with changing column names due to pivots

对于我正在做的报告。我有一个日期列。我从该列中提取月份,然后旋转月份。

例如,我可能有一个 table 像:

Part# Month Qty
1 1 10
1 2 10
1 3 10
1 4 10
1 5 10
1 6 10

当我转动它时它变成:

Part# 1 2 3 4 5 6
1 10 10 10 10 10 10

然后我重命名这些列并执行一些其他任务,例如创建一列最大值。 但是,由于我提取的数据只有 6 个月的价值。这些列名称将更改。 将来可能是:

Part# 4 5 6 7 8 9
1 10 10 10 10 10 10

所以这样一行:

Table.ReplaceValue(#"Pivoted Column",null,0,Replacer.ReplaceValue,{"1", "2", "3", "4", "5", "6"})

将在列为 4、5、6、7、8、9 时产生错误。有办法处理这个问题吗?

您可以使用 TableColumNames 获取列名列表,然后您可以转换该列表。所以对于你的例子,你可以使用类似的东西:

= Table.ReplaceValue(#"Pivoted Column",null,0,Replacer.ReplaceValue,List.Skip(Table.ColumnNames(#"Pivoted Column"),1))

您需要手动编写一个步骤来重命名数据透视表后的列。

此 M 代码从 Excel 中的当前工作簿中提取一个 table,就像您示例中的那个一样,然后按照您的描述旋转,然后将列重命名为 Part#, 1st, 2nd,第三,第四,第五和第六。是的,我说它重命名为 Part#,尽管它并没有真正改变该列名称。确保在步骤中编码的列表中包含部件号,即使部件号名称并没有真正改变,因为您需要考虑 Table.ColumnNames 提取的所有列名称。将第 1、2、3、4、5 和 6 替换为 所需的列名。

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(Source, {{"Month", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(Source, {{"Month", type text}}, "en-US")[Month]), "Month", "Qty"),
    #"Renamed Columns" = Table.RenameColumns(#"Pivoted Column", List.Zip({Table.ColumnNames(#"Pivoted Column"),{"Part#", "1st", "2nd", "3rd", "4th", "5th", "6th"}}))
in
    #"Renamed Columns"

List.Zip 将两个列表交织在一起。在这里,它从原始列名称(“透视列”步骤的 table 中的那些)交织 Part#,然后将列表中的 Part# 编码为 #"Renamed Columns,然后是下一个原始列名称(1 来自您的第一个示例或第二个示例中的 4),然后列列表中的第一个编码为#“重命名列”,然后是下一个原始列名称(第一个示例中的 2 或第二个示例中的 5),然后列列表中的第二个编码进入 #"Renamed Columns,等等。这会设置 Table.RenameColumns.

所需的列表