使用 powerquery 将具有多列的表反透视为具有两列的表,这些列表示原始表中的日期对?

时间:2021-06-23 15:46:53

标签: pivot-table powerquery unpivot

假设我有一个“水平”数据集,其中包含:

  1. 唯一键
  2. 跨多个列的多个“对”日期(即事件 A 开始、事件 B 开始、事件 C 开始等,以及事件 A 结束、事件 B 结束、事件 C 结束等的单独列)。
  3. 特定“事件”的单个日期(不是一对)。

本质上看起来像这样:

数据集

<头>
唯一键 事件A开始 事件A结束 单一日期事件 事件B开始 事件B结束 第二次单日活动
键 1 2021 年 1 月 1 日 2021 年 1 月 3 日 2021 年 1 月 2 日 2021 年 1 月 5 日 2021 年 1 月 10 日 2021 年 1 月 10 日
键 2 2021 年 1 月 7 日 2021 年 1 月 10 日 null null null null

如何使用 PowerQuery 将上面的数据集转换成这样的表格?

预期输出:

<头>
唯一键 活动 开始日期 结束日期
键 1 事件 A 2021 年 1 月 1 日 2021 年 1 月 3 日
键 1 单一日期事件 null 2021 年 1 月 2 日
键 1 事件 B 2021 年 1 月 5 日 2021 年 1 月 10 日
键 1 第二次单日活动 null 2021 年 1 月 10 日
键 2 事件 A 2021 年 1 月 7 日 2021 年 1 月 10 日

我试过了:

  • Unpivot 但我无法将“Event A Start”和“Event A End”都重命名为“Event A”。我什至尝试将所有“事件 [x] 开始”重命名为“事件 [x]”,对所有“事件 [x]”进行了“反透视选择”。然后我将所有“事件 [x] 结束”重命名为“事件 [ x]",然后对这些列执行逆透视。不幸的是,Key 和 Event 列没有对齐。
  • 合并查询:我尝试将一个查询与另一个合并,但并没有完全获得所需的输出。我创建了两个单独的查询(一个带有键、事件和开始日期;另一个带有键、事件和结束日期)。但这并没有达到预期的效果。我认为这是因为单个日期事件为“空”?

我觉得我肯定做错了什么,所以在这里询问是否可以根据输入数据使用 PowerQuery 实现我想要的输出?

1 个答案:

答案 0 :(得分:0)

您肯定需要在逆枢轴之上做一些额外的工作。

这是我的处理方式:

reinterpret_cast

步骤:

  1. 取消旋转日期列
  2. 添加一个新列以将每一行标记为开始日期/结束日期
  3. 去掉[Event]列中的“Start”/“End”后缀
  4. 旋转第 2 步中的新列
相关问题