规范化 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 报告中,我希望能够在标签上过滤我的时间报告,例如分析在 ProductA
或 Support
.
上花费的时间
问题
如何使用 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 彼此。请帮助我。
我想你有两个选择:
- 使用 Power Query,添加合并和扩展列步骤以将 TimeReport 加入 LinkTable,然后加入 TagsTable
- 使用 Power Pivot,加载所有 3 个表,然后转到图表视图并建立它们之间的关系。使用 "Hide from Client Tools" 隐藏对用户无意义的列,例如标记 ID
我更喜欢 Power Query,因为它的功能更灵活并且更容易调试。
背景
我正在 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 报告中,我希望能够在标签上过滤我的时间报告,例如分析在 ProductA
或 Support
.
问题
如何使用 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 彼此。请帮助我。
我想你有两个选择:
- 使用 Power Query,添加合并和扩展列步骤以将 TimeReport 加入 LinkTable,然后加入 TagsTable
- 使用 Power Pivot,加载所有 3 个表,然后转到图表视图并建立它们之间的关系。使用 "Hide from Client Tools" 隐藏对用户无意义的列,例如标记 ID
我更喜欢 Power Query,因为它的功能更灵活并且更容易调试。