规范化 power query 中的 csv 字段 (M)

Normalizing a csv field in power query (M)

背景

我正在 Excel(Power Query、Power Pivot 和 Power View)的 Power BI 插件中构建一个简单的仪表板,以获得一些 Power BI 经验。仪表板用于显示顾问(即我自己)制作的简单时间报告。我想用于输入数据的格式是 Excel table 如下:

InputData:
Date       | Timecode  | Duration[hrs] | Tags
-----------|-----------|---------------|----------------------
2016-02-01 | CustomerA | 1.2           | Support;ProductA
2016-02-01 | CustomerB | 0.3           | Support;ProductB
2016-02-02 | Internal  | 4.2           | Development;ProductA

Date字段很简单。时间报告的日期。 Timecode 是报告小时数的 "name"。在通用软件中,这通常是项目代码或类似代码,但我想将其保留在客户基础上。 Duration 是一个浮点数,表示当天该时间码花费的小时数。 Tags 列是有趣的部分:为了简化输入,希望它是一个(分号)分隔字符串,但在为 Power View 创建数据模型时不会这样做。

我想做的是一个包含所有标签的单独 table,以及一个 link table 将标签连接到时间报告中的相应行。在 Power view 报告中,我希望能够在标签上过滤我的时间报告,例如分析在 ProductASupport.

上花费的时间

问题

如何使用 Power BI 将非规范化字段(如上面的 Tags 替换为维度 table 和 link-table Excel 的插件?我如何得到以下三个 tables:

TimeReport:
Date       | Timecode  | Duration[hrs] | TimeReportID
-----------|-----------|---------------|----------------------
2016-02-01 | CustomerA | 1.2           | 1
2016-02-01 | CustomerB | 0.3           | 2
2016-02-02 | Internal  | 4.2           | 3

LinkTable:
TimeReportID | TagID  
-------------|--------
1            | 1
1            | 2
2            | 1
2            | 3
3            | 4
3            | 2

TagsTable:
TagID  | TagName  
-------|----------
1      | Support 
2      | ProductA
3      | ProductB
4      | Development

尝试

通过仅选择标签列,然后拆分、旋转和删除重复项(受 this link 启发,我设法创建了所有标签的列表,如:

Tags:
TagName
----------
Support
ProductA
ProductB
Development

但我无法理解如何 link table 彼此。请帮助我。

我想你有两个选择:

  1. 使用 Power Query,添加合并和扩展列步骤以将 TimeReport 加入 LinkTable,然后加入 TagsTable
  2. 使用 Power Pivot,加载所有 3 个表,然后转到图表视图并建立它们之间的关系。使用 "Hide from Client Tools" 隐藏对用户无意义的列,例如标记 ID

我更喜欢 Power Query,因为它的功能更灵活并且更容易调试。