Power Query - 无间隙旋转

Posted

技术标签:

【中文标题】Power Query - 无间隙旋转【英文标题】:Power Query - Pivoting without gaps 【发布时间】:2018-12-15 17:54:18 【问题描述】:

抱歉,我想不出一个更好、更合适的标题。文本应该澄清......

在以下场景中:4 名员工应该在不同的日子工作。该表如下所示:

Date        Name
12/13/2018  Carol, John
12/14/2021  Peter, Carol, John, Alice
12/15/2018  Alice
12/16/2018  Peter, Alice
12/17/2018  John, Peter

好的,在“,”处拆分名称(带有尾随空格)并粘贴为行;因为必须有 3 列:插入索引列,然后旋转会带来这个结果:

Index     12/13/2018 12/14/2018 12/15/2018 12/16/2018 12/17/2018
      0   Carol      null       null       null       null
      1   John       null       null       null       null
      2   null       Peter      null       null       null
      3   null       Carol      null       null       null
      4   null       John       null       null       null
      5   null       Alice      null       null       null
      6   null       null       Alice      null       null
      7   null       null       null       Peter      null
      8   null       null       null       Alice      null
      9   null       null       null       null       John
     10   null       null       null       null       Peter

但是我想要的结果是:

Index  12/13/2018  12/14/2018  12/15/2018  12/16/2018  12/17/2018
   0   Carol       Peter       Alice       Peter       John
   1   John        Carol       null        Alice       Peter
   2   null        John        null        null        null
   3   null        Alice       null        null        null

稍后我将删除列索引。 所以我达到了预期的目标:除了列索引和(正确排列的)列 12/13/2018 创建每个附加列作为新查询并过滤/删除空单元格。然后删除之前的日期列,并通过合并将新创建的日期列重新插入到查询中。

在我看来,这非常麻烦和乏味。 Power Query 中是否有更好的方法?

我会很高兴,如果你能用简单的单词描述一个更好的方法,如果可能的话,一步一步(不仅仅是 M-Code)。

【问题讨论】:

非常感谢!美妙而简单的解决方案。 【参考方案1】:

取表,用分隔符分割(逗号,每次出现),选择然后转置整个表,添加索引

let Source = Excel.CurrentWorkbook()[Name="Table1"][Content],
#"Changed Type" = Table.TransformColumnTypes(Source,"Date", type date, "List", type text),
#"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "List", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), "List.1", "List.2", "List.3", "List.4"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter","List.1", type text, "List.2", type text, "List.3", type text, "List.4", type text),
#"Transposed Table" = Table.Transpose(#"Changed Type1"),
#"Added Index" = Table.AddIndexColumn(#"Transposed Table", "Index", 0, 1),
#"Reordered Columns" = Table.ReorderColumns(#"Added Index","Index", "Column1", "Column2", "Column3", "Column4", "Column5")
in  #"Reordered Columns"

【讨论】:

看起来不错。我不得不在转置后提升标题以将日期作为列名。

以上是关于Power Query - 无间隙旋转的主要内容,如果未能解决你的问题,请参考以下文章

PowerBI:Power Query:处理因数据透视而更改的列名

循环播放无间隙的 AVAudioPlayer

涉及具有多个表的多个事务的无间隙序列

使用数据库触发器生成无间隙数字

为空 Power Query 时上移值

sqlite - 忽略 lag/lad 中的空值