首页 > 解决方案 > Power BI / Power Query - CSV标签到没有唯一ID的事实的维度?

问题描述

我有一个事实表

日期 姓名 标签 数量
2020-01-23 购买12333 日常,化学家,健康 123.83
2020-01-22 购买12333 日常,食物 232.99
2020-01-23 购买 48321 日常,超市,健康 23.11

我想为标签列创建一个星型模式,以便我可以查看“每天”的所有记录(显示 3 条记录),然后选择食物(显示 1 条记录)或健康和日常(显示 2 条记录)。

我可以通过用逗号分隔并分配代理键来在电源查询中创建一个新表,但是当没有明显的唯一键(名称不能保证是唯一的)时,我还需要能够定位事实表。我可以做些什么来创建一个代理键来定位事实表?是否有基于事实表中的 3 个不同列(日期、名称和金额)的散列技术来生成唯一键?

标签: powerbipowerquery

解决方案


这更像是一片雪花,根据您关于您选择不分配代理键的评论,它可能会错过标记,但它可能仍然是您正在寻找的东西,或者至少可以帮助您到达那里。

我从你的表开始,作为一个名为 Fact 的表: 在此处输入图像描述

然后我添加一个索引列并将其重命名为 ID: 在此处输入图像描述

然后我引用 Fact 表来创建一个名为 NamesAndTags 的新表,然后选择 ID 和 tags 列并删除其他列,然后使用它= Table.ExpandListColumn(Table.TransformColumns(#"Removed Other Columns", {{"tags", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "tags")来获取: 在此处输入图像描述

然后我引用 IDsAndTags 表来创建一个我称之为标签的新表,然后我用它= Table.Distinct(Table.SelectColumns(Source,{"tags"}))来获取:

在此处输入图像描述

然后我关闭并应用并转到模型视图并从此更改关系: 在此处输入图像描述

对此:

在此处输入图像描述

通过将交叉过滤器方向更改为两者。

然后在 Power BI 中,我可以创建一个表和一个筛选器,我可以在其中执行此操作:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

这是我的 IDsAndTags 的 M 代码:

let
    Source = Fact,
    #"Removed Other Columns" = Table.SelectColumns(Source,{"ID", "tags"}),
    Custom1 = Table.ExpandListColumn(Table.TransformColumns(#"Removed Other Columns", {{"tags", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "tags"),
    #"Changed Type" = Table.TransformColumnTypes(Custom1,{{"tags", type text}})
in
    #"Changed Type"

这是我的标签 M 代码:

let
    Source = IDsAndTags,
    #"Removed Other Columns" = Table.Distinct(Table.SelectColumns(Source,{"tags"}))
in
    #"Removed Other Columns"

推荐阅读