通过表格编辑器将现有表引入Power BI数据流

在此示例中,我们将Car维度移至数据流,因此我们也可以在其他数据模型中重用此表。下面,我将详细介绍数据流的优点以及为什么将维度移动到数据流特别有用。

当前已部署为数据模型的星型模式

数据流的优势

当您想在不同数据模型之间重用特定表时,数据流特别有用。在开始之前,我在下面列出了数据流的一些优点。

  • 降低对数据源的影响。使用数据流,您只需处理一次表,并将结果集中保存在数据流中。从那时起,它可以在Power BI平台内部以不同的数据模型使用。这样,您可以避免在多个模型中运行相同的查询。
  • 事实的单一版本。从自助服务的角度来看,经常使用Power BI的地方,在查询同一张表的同时,在不同的报告中也会有不同的结果。这可能是由于应用了其他过滤器或进行了其他转换引起的。从中央角度构建数据流并允许其他人使用您的数据流将有助于获得事实的一个版本,因为每个人都使用具有相同逻辑的相同数据流实体。
  • 刷新计划优化。通常,如果刷新Power BI数据集,则将处理整个模型。所有查询将运行以获取最新数据。实际上,这是次优的,因为您多次击中数据源,甚至对于您可能只想每天或每周刷新一次的表也是如此。这些很可能是尺寸表。如果将它们放在数据流中,则可以为该数据流提供单独的刷新计划,并降低查询对数据源的影响。
  • 更少的依赖关系和更好的错误跟踪能力。如上面数据流优势中所述,整个模型将在数据集中处理。如果发生错误,则不会刷新任何表,并且该过程将停止。通过使用单独的刷新计划将逻辑拆分为多个数据流,可以降低表之间的依赖性。如果其中一个数据流刷新失败,其他数据流将继续。数据集将仅导入所有数据流的结果集,这降低了失败的机会。

总而言之,足以证明数据流是有用的!可能还有更多原因,但是当数据流穿越对话时,我通常会向其他人解释这四个原因。

移至数据流!

如上所述,我们希望将Car维度移至数据流,然后更改数据模型中的连接以从后续的数据流中读取数据。下面是逐步指南。

目前,看起来像这样:

实施数据流之前的解决方案沿袭

1.在表格编辑器中连接到Power BI XMLA端点
我们首先在Power BI服务中创建到现有数据模型的连接。打开表格编辑器后,我们选择“
文件”>“打开”>“来自数据库”(CTRL + SHIFT + O)

在表格编辑器中连接到表格模型

2.在Power BI中获取XMLA端点。
第二步,我们从先前部署的模型中获取XMLA端点。我们可以通过转到Power BI Service并转到数据集设置来获取端点。在“服务器设置”选项卡中,我们将找到端点。

默认情况下,端点类似于以下端点,可能通过数据模型连接作为初始目录进行了扩展。
powerbi://api.powerbi.com/v1.0/myorg/ [工作空间名称]

数据集设置中Power BI的XMLA端点

4.选择数据库
单击“确定”并通过Power BI服务进行身份验证之后,我们必须选择要连接的数据库。由于在本分步指南中将同时使用读取和写入功能,因此我们必须确保使用正确的兼容性级别。确保模型在兼容级别1520中。

选择具有适当兼容性级别的数据库

5.查找适当表的Power Query Expression
连接成功后,我们可以使用表格编辑器读取表格模型。在左侧菜单中,我们看到所有表格。确定要移至数据流的表,然后单击“分区”,最后单击带有三个点的小按钮以获取更多详细信息。

对我们来说,这是Car Table,我们要在其中划分一个分区以带入数据流。

表格编辑器中的表分区

6.复制Power Query表达式
打开“分区连接编辑器”后,您可以单击“表达式”字段中的小下拉按钮。在这里,您将找到我们要移至数据流的Power Query Expression。复制表达式。

在分区集合编辑器中查找功能查询表达式

7.构建数据流转
到Power BI Service并导航到要在其中定位要创建的数据流的工作区。我们只是复制了Power Query表达式,将其粘贴到空白查询中。对源进行身份验证后,单击“保存”,并为数据流指定一个合理的名称。

另请注意可能的语法差异。在这种情况下,我使用的是Azure SQL数据库。在从Analysis Services迁移到Power BI的表格模型中,连接看起来略有不同。将上面的屏幕截图与下面的屏幕截图进行比较。如果您遇到这样的困难,建议您在Power BI Desktop中快速建立到同一数据源的连接,以识别连接中的差异。

Power BI桌面(此屏幕截图)与以上表格形式编辑器中的屏幕截图之间的Azure SQL数据库连接差异。

为了清楚起见,在表格编辑器中,我的Power Query Expression如下所示:

let
Source = #"SQL/[db server name].database.windows.net;[db name]",
dbo_Car = Source{[Schema="dbo",Item="Car"]}[Data]
in
dbo_Car
 

在Power BI Desktop中,它生成以下内容:

let
Source = Sql.Database("[db server name].database.windows.net", "[db name]"),
dbo_Car = Source{[Schema="dbo",Item="Car"]}[Data]
in
dbo_Car

8.在Power BI Desktop中建立对数据流的查询
保存数据流后,请不要忘记至少处理一次。由于我们的模型是Power BI模型,因此我们也可以连接到数据流。为了连接到我们刚创建的数据流,我们快速在Power BI Desktop中为其生成了Power Query Expression。

一旦我们生成了Power Query Expression,请复制此内容。

Power BI Desktop的高级编辑器中数据流的Power Query Expression

请注意,为数据流生成的Power Query Expression包含许多硬编码的ID。如果将多个表移至数据流,则可以轻松更改此表。

9.在表格编辑器中更改Power Query Expression在
上一步中,我们复制了数据流的Power Query Expression。现在,我们回到分区集合编辑器,如步骤6所述,在这里我们将现有的Power Query Expression替换为一个指向数据流的表达式,然后单击OK。

在Partition Collection Editor中更改连接以从数据流中获取数据

10.将更改保存到数据库中
最后,我们必须将对模型所做的更改保存到Power BI Service中。此处提供了XMLA Write功能。在表格编辑器中,我们可以单击左上方的小保存按钮将更改保存到Power BI Service。

由于XMLA端点仅写入元数据,因此在模型开始从数据流中读取数据之前,请不要忘记单击刷新按钮!

将模型更改保存回Power BI Service中的数据库
 

这种方法效果很好,并且我已经测试了一个多星期。它很稳定,但是我们确实在Power BI中破坏了沿袭视图。如果我们查看沿袭,则新创建的数据流未链接到我们的数据集。

Power BI服务中的“沿袭”视图

话虽如此,Power BI每月发布一次,在撰写此博客文章时,XMLA端点的编写仍处于预览阶段。这种方法可能会突破界限吗?我希望随着时间的推移能够解决此问题,并且我还向Microsoft提供了此反馈。

不过,我可以得出结论,在将(Azure)Analysis Services模型移至Power BI数据集之后,此方法可用于下一步。也许您过去曾经通过(Azure)Analysis Services在不同的模型中多次使用同一查询,现在您可以将查询集中在数据流中,从而降低对数据源的影响,并提供一个事实版本和更好的可维护性解决方案架构。

原文地址:https://www.cnblogs.com/Javi/p/13490068.html