如何在Power BI Desktop中定义度量表

在本文中,我向您展示了一个简单的技巧,可以使您的Power BI模型更加有条理和可读性。我称其为“测量表”。让我解释。故事是我当时正在设计一个有很多桌子的模型。数据库模式不是正确的星型模式,因此有很多度量分布到许多不同的表中。最重要的是,我们使用不同的主表创建了许多计算得出的度量,这使得查找特定度量或计算得出的度量非常困难。我想,当在开发时很难找到计算出的度量时,客户很难找到,理解和使用我们创建的度量。当我们在许多不同的表中有很多度量时,所计算度量的可见性可能是个问题。当您需要在许多不同的表之间导航以找到计算得出的度量时,您很快就会在客户培训课程中感到这个问题。

考虑您创建一个 直接连接到SSAS多维的Power BI模型 实例。您会立即注意到,所有度量值组都有一个特殊的计算图标(Power BI中的测量组图标),而不是普通表格图标(Power BI中的表格图标),从而使最终用户更容易识别度量标准组。例如,您可以轻松地在“ Internet销售”度量值组下找到任何与“ 互联网销售”相关的计算度量。

SSAS多维目录连接中的度量值组

我知道,我们可以很容易地搜索和找到度量,但是,如果我们可以将所有度量放入一个或多个表中,而这些表仅包含相关的已计算度量,而没有其他内容,那么我们的模型将更加组织化并且更加用户友好。例如,我们可以创建一个用于时间智能计算的度量表,并将其命名为“销售时间智能度量”,然后将所有 计算出的指标,例如“年初至今的销售量”,“全年常规的销售量”,“一段时间内的销售期间”。这将使您的模型美观,整洁,易于使用并且易于客户学习。它还将帮助您更轻松地培训客户。

在本文中,我将连接到SQL Server实例,并将使用著名的Adventure Works数据库。我还向您展示了如何在“导入”和“ DirectQuery”两种模式下完成工作,因为DirectQuery模式存在一些限制,这使我们难以完成所需的工作。

开始吧。

这个怎么运作

这个想法是添加一个只有一个列的新表,该列中只有一个值。然后我们需要隐藏该列。由于没有要显示的列,因此整个表被隐藏了。然后,我们将此表用作所有相关计算量度的“主表”。请记住,我们不会隐藏表格,而只会隐藏列。在这种情况下,Power BI Desktop将表识别为度量表,因此它使用度量组图标(Power BI Measure Group图标) 为了它。

在导入模式下创建度量表

  • 打开Power BI桌面
  • 获取数据
  • 连接到SQL Server数据库(Adventure Works示例)

Power BI从SQL Server 01获取数据

  • 选择所需的表(在我们的例子中为FactInternetSales)
  • 点击“选择相关表”按钮
  • 点击“加载”

Power BI从SQL Server 02获取数据

  • 点击“导入”,然后点击确定

Power BI从SQL Server导入模式获取数据

  • 单击“主页”选项卡中的“输入数据”

Power BI输入数据

  • 输入“ Column1”的值
  • 输入表格名称,然后点击“加载”

Power BI创建表

  • 从“字段”窗格中展开新表,然后隐藏“ Column1”列

Power BI隐藏列

  • 由于没有可见的列要显示,因此这将隐藏整个表格
  • 从功能区的“建模”选项卡中单击“新度量”以创建新的计算度量

Power BI新措施

  • 输入所需的DAX表达式以进行新的计算量度,然后按Enter

Power BI新措施DAX

  • 这将在“字段”窗格的第一个表中创建计算的度量

Power BI新措施02

  • 再次单击编辑栏以启用度量属性
  • 单击“主表”,然后从列表中选择新创建的表

Power BI新措施 change 首页 table

  • 如您所见,表格连同计算出的度量再次出现在“字段”窗格中

Power BI任务窗格

  • 如您所见,表格仍然具有普通表格图标,但是,如果您向右切换字段窗格,然后向左切换,则图标将被刷新

Power BI Toggle任务窗格

您可以创建更多的表,例如“转销商销售额”,依此类推,然后将计算出的度量值移动到相应的表中。在某些情况下,如果您创建了所需的所有计算量度,或者当客户不需要从事实表中查看任何量度时,则可以隐藏整个事实表。

Power BI度量表

在DirectQuery模式下创建度量表

基本上,我们需要执行相同的过程,但是,这次我们要以DirectQuery模式连接到SL Server数据库。因此,要获取数据,我们要做完全相同的事情:

打开Power BI Desktop => Get Data=>连接到SQL Server数据库,依此类推。

在获取数据的第一步,输入数据库名称很重要。

Power BI从SQL Server 02获取数据

但是,您会立即注意到在DirectQuery模式下“输入数据”按钮被禁用。

在DirectQuery中禁用Power BI输入数据

没关系。总有另一种方法可以实现目标。

如前所述,获取数据时需要输入数据库名称。这很重要,因为我们将在接下来的步骤中重新使用连接,如果我们没有输入数据库名称,则会收到以下消息:

“在DirectQuery模式下,不支持从多个数据库连接到表”

在DirectQuery中禁用Power BI连接到不同数据鼻的功能

好的,这就是窍门。

在DirectQuery模式下连接到SQL Server数据库后,请执行以下步骤:

  • 单击功能区中的“编辑查询”

Power BI编辑查询

  • 点击“最近的来源”,然后点击最新的来源

Power BI重用现有源

  • 选择一个表。您选择哪个表都没有关系,因为我们将在后续步骤中对其进行修改。点击确定

Power BI导航器

  • 这将在“查询”窗格中添加新表(在我的示例中为“ AdventureWorksDWBuildVersion”)

Power BI查询编辑器

  • 从功能区的“主页”选项卡中单击“高级编辑器”

Power BI高级编辑器

Power BI高级编辑器02

  • 您需要做的就是添加一个简单的查询,例如“ [[Query =”SELECT 1 AS NEW_COLUMN”]” to the source

Power BI高级编辑器03

  • 现在,您必须注释掉/删除下一行以及“
  • 将“来源”放在“”块
  • 不要忘记删除逗号“,“来源”行末尾的“”
  • 点击“完成”

Power BI高级编辑器04

  • 您应该会看到一个只有一列的表格

查询编辑器中的Power BI新表

  • 重命名查询,然后单击“关闭”& Apply”

查询编辑器02中的Power BI新表

好,现在我们有了一个只有一列的表。从这里开始,其余过程就像我们之前所做的一样。

Power BI new table  在  领域 pane

  • 隐藏“ New_Column”列
  • 添加新度量,然后将“主表”更改为新创建的表
  • 左右切换任务窗格,操作完成

Power BI措施表02

你可能认为

“嗯……这是一个漫长的过程。如果我要创建多个度量表怎么办?我需要一次又一次地重做整个过程吗?”

答案是否定的,您不必为要添加到模型中的每个度量表重做该过程。您需要做的就是根据您已经创建的查询创建参考查询。

为此:

  • 单击功能区中的“编辑查询”以打开“查询编辑器”

Power BI编辑查询02

  • 右键单击您先前创建的查询,然后单击“参考”

Power BI参考表

  • 重命名参考表,然后“关闭& Apply”

Power BI参考表02

  • 从这里开始,您需要遵循之前解释的相同过程

Power BI措施表03

  • 全部做完!

8 thoughts on “如何在Power BI Desktop中定义度量表

  1. 我已经在同一个问题上苦苦挣扎了一段时间,但通过直接查询连接到Analysis Services表格多维数据集。

    有时我的FACT表带有Measure符号,并且位于字段列表的顶部,有时它们带有Table符号,并且位于字段列表的中间。在大型数据模型中,必须为一个FACT表查找一个位置,而为其他FACT表查找另一个位置,这是非常令人沮丧的(无论表类型如何,都可以按字母顺序!

    I’我们进行了广泛的考察,两个FACT表(带和不带Measure符号)都只有带有计算器或Sigma符号的字段。一些Sigma符号字段是ID’s,而不是基础或计算的度量,但这两者都是正确的。没有TEXT或DATE或其他字段。有什么想法吗?一世’我已经在寻找答案了一段时间…

    如果有帮助,我可以附加屏幕截图。

    1. 嗨,斯科特,

      欢迎来到BIInsight.com。
      那’是的,如果FACT表中有任何可见的列,则在以“连接实时”模式从Power BI连接到表格模型时,该表将显示为普通表而不是度量表(也称为多维度量组) 。

      相反,如果隐藏FACT表中的所有列,以便仅剩下一些度量和KPI,则在将实时BI从Power BI连接到模型时,该表将显示为度量表。
      隐藏所有列后,下面的屏幕截图显示了与上面的屏幕截图完全相同的模型。

      让我对带有Sigma符号和带有Calculator符号的字段进行更多说明。
      具有Sigma符号的字段称为隐式度量。隐式度量是包含数值的表中的列。隐性措施是您不采取的措施’创建它们。由于表列是隐式度量,因此它们’在表中具有唯一性(不能有两个具有相同名称的列)。
      相反,带有计算器符号的字段确实是您通过编写DAX表达式创建的度量。这些字段称为显式度量。明确的措施在整个 模型 无论保存该度量的表如何。所以 不能 在模型中有两个具有相同名称的显式度量。
      所以,如果你’主要使用Power BI作为您选择的报告工具,那么您可以考虑隐藏FACT表中的所有列,并且仅使“显式度量”和“ KPI”保持可见。
      这是一个屏幕快照,显示了与之前的屏幕快照相同的模型,但是我仅取消了一个ID列(带有Sigma符号)的隐藏。
      当您关闭“Fields”Power BI中的“选项卡”或关闭并重新打开PBIX文件,“Internet Sales”将不再显示为度量表。

      最后但并非最不重要的一点是,连接到表格模型时,不同的报表工具的行为会有所不同。例如,当您从Excel连接到相同的表格模型时,无论是否隐藏FACT表中的列,它都会检测所有度量并将这些度量显示在其对应表下方的列表顶部。如果FACT表中有一些列,则Excel还将该表显示为列表中的维。

      希望有帮助。
      干杯。

  2. Soheil,谢谢您的出色解释!

    I know this is not a Microsoft forum per se but this is problematic for scenarios where we want 基础 measures coming from the Data Warehouse itself, not 达克斯 . This is true 在 lots of scenarios for performance, ease of ETL maintainence, etc…

    即使我们带那些“base”量入多维数据集,将其隐藏,然后创建DAX,我们’仍然不能达到上述预期的结果。那时候我不’t see that we would have any choice but to NEVER do a 基础 measure 在 the ETL/Source…它总是必须在DAX中吗?

    听起来对吗?

    有什么想法/想法吗?

    1. 嗨,斯科特,

      完全没有问题,我’很高兴您选择在这里提出您的问题。
      要回答您的问题,我必须说,每当您在视觉对象上放置隐式度量时,Power BI都会创建临时的显式度量。
      临时的显式措施必定会影响您的视觉效果’重新使用,因此,当您在其他视觉效果中使用相同的隐式度量时,Power BI会创建另一个专用于该视觉效果的显式度量,这不是一个好习惯。
      实际上,最佳实践是为所有隐式度量创建显式度量,并将所有隐式度量隐藏在模型中。特别是当你’重新构建为多种报告工具(包括Power BI)服务的SSAS表格模型。

      干杯

  3. 使用建议的直接查询事实表和度量值表,完成DQ后度量值是否会更新?我认为他们没有’t,这使得视觉效果不取决于测量值。这个准确吗?如果是这样,这似乎是将度量保留在DQ表中的原因。我想念什么吗?谢谢!

    1. 你好约翰,

      欢迎来到BIInsight.com。
      度量表中的度量与“直接查询”模式或“数据导入”模式中的任何其他度量一样。
      但是,区别在于在Power BI Service的上下文中模型在直接查询模式下刷新的频率。
      我想你’重新使用本地数据库,因此不可避免地要使用本地数据网关。
      在Power BI Service的“数据集”设置中配置网关时,可以选择刷新数据集的频率。
      最少的数据刷新时间为15分钟。
      请查看此以获取更多详细信息: //docs.microsoft.com/en-us/power-bi/refresh-data.
      那 said, when you 在 teract with the visuals 在 your report, the Dataset fires concurrent queries back to your data source, therefore your data refreshes.
      因此,如果您不触摸报告,例如在屏幕上投影仪表板/报告时,没有人手动与仪表板/报告进行交互,则数据集刷新的最低频率将接管并自动刷新数据。否则,每当您与视觉效果进行交互时,您的数据都会刷新。
      但是,在Power BI Desktop中,并非完全如此。
      没有适用于Power BI Desktop的自动数据刷新设置,因此您无需’除非您单击刷新按钮或与视觉交互,否则当数据源中的数据发生更改时,将看不到数据中的任何更改。
      在某些情况下,即使您与视觉效果进行交互(例如更改切片器中的值),也可能会注意到数据更改未显示在报告中。
      原因是Power BI Desktop使用缓存并在实际更改数据源中的数据时显示缓存的数据。
      因此,我的建议是,如果要在Power BI Desktop中开发报表,请单击“刷新”按钮以确保您的数据是最新的。
      对于Power BI服务,您不应’如果正确配置网关,则不会有任何问题。

      希望有帮助。
      干杯。

  4. 解决您所描述问题的好方法。必须考虑到对“drill trough” functionality 在 client tolls, that 基础d on measure’s “home”表(除非另有说明)。

有什么想法吗?在这里与我们分享:

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.