【问题标题】:How can I pivot a column in Power Query and keep order?如何在 Power Query 中旋转列并保持顺序?
【发布时间】:2021-08-12 02:20:51
【问题描述】:

原始数据:

我想像这样改造它们:

我尝试在 Power Query 中旋转它。但是顺序不正确。具有空值的列将被填满:

【问题讨论】:

    标签: excel powerbi powerquery


    【解决方案1】:

    因为您的测量 ID 在每个系列中都是数字且连续的

    • 添加从 1 开始的索引列。
    • 然后添加自定义列
      • 公式 = [Index]-[Measurement ID]
      • 如果 ID 序列被破坏,公式将返回不同的结果。

    如果实际数据中的测量 ID 不符合该模式,则创建一个与该模式匹配的等效索引应该相对容易,然后使用相同的算法

    现在,当您进行 Pivot 时,您将获得想要的结果。

    M 码

    let
        Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{
            {"Measurement ID", Int64.Type}, {"Measurement Result", type number}}),
        
        #"Added Index" = Table.AddIndexColumn(
            #"Changed Type", "Index", 1, 1, Int64.Type),
        #"Added Custom" = Table.AddColumn(#"Added Index", "Custom", 
            each [Index]-[Measurement ID]),
        #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index"}),
        
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Removed Columns", {
            {"Measurement ID", type text}}, "en-US"), 
            List.Distinct(Table.TransformColumnTypes(#"Removed Columns", {
                {"Measurement ID", type text}}, "en-US")[#"Measurement ID"]), "Measurement ID", "Measurement Result"),
        
        #"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column",{"Custom"})
    in
        #"Removed Columns1"
    

    如果您的测量 ID 列不在指定的模式中

    • 我假设每个系列都以列中的第一个 ID开头。

    要创建我们的自定义系列,我们可以使用(在插入索引列之后),

    • 如果ID列中的值与第一个相同,则返回索引号的公式,否则返回null
    • 然后“填写”
       #"Added Custom" = Table.AddColumn(#"Added Index", "sequence", 
           each if [Measurement ID] = #"Added Index"[Measurement ID]{0} then [Index] else null),
       #"Filled Down" = Table.FillDown(#"Added Custom",{"sequence"}),
       #"Removed Columns" = Table.RemoveColumns(#"Filled Down",{"Index"}),
    

    【讨论】:

      【解决方案2】:

      您似乎希望 Power Query 隐含地知道测量 ID 4 属于第二组数据?

      除非您指定每个测量值属于第一组、第二组还是第三组,否则它不会为您执行此操作。

      你可以:

      • 手动将集合 ID 写入新列
      • 以编程方式计算它们,例如,每当当前测量 ID 小于前一个测量 ID 时,新列的值就会增加 +1
      • 返回源数据并检查是否可以在第 1 组和第 3 组中设置 Measurement ID 4 = null。

      例如,使用第三个选项,您的表格可能类似于:

      Set ID Result
      1 1 a
      1 2 b
      1 3 c
      1 4 null
      2 1 d
      2 2 e
      2 3 f
      2 4 g
      3 1 h
      3 2 i
      3 3 j
      3 4 null

      关于您的数据的信息不足,因此需要将详细信息和正确的解决方案留给您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-24
        • 2022-01-12
        相关资源
        最近更新 更多