在使用 Power BI 的 Direct Lake 语义模型时,你可能会遇到创建多个维度副本的问题。特别是在处理复杂的维度关系时,直接复制底层 Delta 表数据可能会导致一些错误和不便。今天我们就来探讨一个切实可行的解决方案。
痛点:重复维度导致的错误
在 September 2024 年,我曾撰写了一篇关于如何在 Direct Lake 语义模型中创建多个相同维度副本而不复制底层 Delta 表数据的文章。然而,不少读者反馈尝试时遇到了各种错误和问题。经过与社区专家的交流,我们找到了一个避免这些错误的方法。
解决方案:使用 Power BI Desktop 编辑脚本
假设你有一个基于 OneLake 的 Direct Lake 语义模型,其中包含两个表——事实表 Conversation 和维度表 Person。Conversation 表记录了两个人之间的对话,而此时你的模型中只有一个 Person 维度表,并且从 Conversation 表的 FromPersonId 列到 Person 表的 PersonId 列之间存在关联。
要添加第二个 Person 维度副本而不复制数据,你可以按照以下步骤操作:
-
打开 Power BI Desktop:进入编辑语义模型模式。
-
切换视图:在 TMDL 视图中,转到右侧的数据面板,并切换到 Model 选项卡。
-
扩展表达式并脚本化:点击 Expressions 并将其拖拽到 TMDL 窗格以进行脚本化。确保你的模型结构如下:
Person (原始维度) - FromPersonId -> Conversation - PersonId -> Person -
添加新维度副本:在 Model 选项卡中,为第二个 Person 维度创建一个新的角色。
具体操作步骤如下:
- 在 Model 视图中右键点击 Person 维度表。
- 选择“添加角色”(Add Role)。
- 命名新角色,例如 “Person_Role2”,并确保其数据源与原始维度相同。
- 最后,在 Conversation 表中将新角色的 FromPersonId 列关联到新的 Person_Role2 维度。
通过上述步骤,你可以在不复制底层 Delta 数据的情况下成功创建多个维度副本,并解决在 Direct Lake 语义模型中的常见问题。
国内用户怎么看
这种方法不仅适用于跨国公司,也适合国内许多企业在构建复杂数据模型时遇到的类似难题。对于那些正在处理大规模数据集并在 Power BI 中寻找高效解决方案的人来说,这是一个非常实用且值得尝试的方法。





