适用范围: Power BI Desktop Power BI 服务

Power BI 允许你可视化来自各种源的数据。 创建视觉对象时,Power BI 仅显示相关数据,以便正确地管理数据的显示方式。 Power BI 根据视觉对象的配置和基础数据模型确定相关的具体数据。 本文介绍 Power BI 如何确定相关数据。 我们还添加了说明如何做出决定的示例。

确定相关数据

若要阐述 Power BI 如何确定要显示的相关数据,让我们将表看作一个简单的示例。 使用本文末尾的 示例数据模型 部分中介绍的模型,考虑通过以下设置生成一个表:

1. 来自同一个表的组: Product[Color] - Product[Size]

Product[Color] Product[Size]

在此示例中,Power BI 仅显示存在的组合。 不会显示模型中不存在的组合,例如(“无”+“蓝色”)或(“亚光”+“红色”)。 确定存在哪些组合的条件是 “Sum(Sales[Quantity])”的值不为空。

让我们看看其他情况:

3. 来自不同但直接相关的表的组且不包含度量值: ProductStyle[Finish] - Product[Color]

ProductStyle[Finish] Product[Color]

由于没有显式度量值且这两个表直接相关,因此 Power BI 尝试注入度量值来约束生成的组合。 在本例中,Power BI 会注入 CALCULATE(COUNTROWS('Product')) 度量值,该值不应为空,因为“Product”是两个表共有的。

在本例中,Power BI 会显示“产品”表中包含条目的组合,不会显示(“无”+“蓝色”)和(“亚光”+“红色”)的组合 。

4. 来自不同且不相关的表的组

示例模型不包含此组合,但如果存在来自不同且不相关的表的组,Power BI 将无法关联两个列。 结果将是每个列的所有值的叉积。 在这种情况下,Power BI 会引发“无约束联接”类型的错误,因为此类叉积在数据库中计算的成本很高,并且不会向用户提供很多信息。

显示不含数据的项目

前面部分介绍了 Power BI 如何确定要显示的相关数据。 但是,有时候可能需要显示不含数据的项。

利用“显示不含数据的项”功能,可以包括不含度量值数据(空度量值)的数据行和列。

若要启用“显示不含数据的项”功能,请执行以下步骤:

  • 选择一个视觉对象。
  • 在“值”字段中,右键单击该字段并从显示的菜单中选择“显示不含数据的项”,如下图所示 :
  • “显示不含数据的项”功能在以下情况下不起任何作用:

  • 未向视觉对象添加度量值,分组列来自同一个表。
  • 各个组不相关。 Power BI 不会为具有不相关的组的视觉对象运行查询。
  • 度量值与所有组均无关。 在这种情况下,度量值不会仅针对某些组的组合为空。
  • 有一个用户定义的不含空度量值的度量值筛选器。 例如:SalesAmount > 0
  • 通过启用“显示不含数据的项”选项,可能会降低性能,并可能导致视觉对象呈现缓慢或数据导出超时。

    “显示不含数据的项目”的工作原理

    “显示不含数据的项”的最有趣用法是存在度量值的情况。 假设存在组来自同一个表或可以通过模型中的路径进行关联的情况。 例如,“ProductStyle”与“Product”直接相关,与“Sales”间接相关。 可以通过“Product”表关联“ProductStyle”和“ProductCategory”。

    让我们看看以下几个有趣的情况,并在关闭和打开“显示不含数据的项”时进行比较。

    1. 对同一个表中的列进行分组: Product[Color] - Product[Size] - Sum(Sales[Quantity])

    关闭“显示不含数据的项”功能时的显示方式:

    Product[Color] Product[Size] Sum(Sales[Quantity])

    请注意两个新组合在打开此功能时的显示方式:“蓝色 - 大型”和“红色 - 大型”。 这两个条目在 “Sales”表中没有相应的“Quantity” 。 但是,它们显示在“Product” 表中。

    2. 对相关表中的列进行分组: ProductStyle[Finish] - Product[Color] - Sum(Sales[Quantity])

    关闭“显示不含数据的项”功能时的显示方式:

    ProductStyle[Finish] Product[Color] Sum(Sales[Quantity])

    注意 “光泽-红色”和“无、空白”显示为组合的方式。 下面是它们出现的原因:

  • Power BI 首先考虑“ProductStyle[Finish]”,然后选择所有要显示的值,这样就生成了“光泽、亚光、无”。
  • 使用其中的每个值,Power BI 选择了所有相应的“Product[Color]”条目。
  • “无”与任何“Product[Color]”都不对应,因此该值显示为空白。
  • 值得注意的是,选择列值的机制依赖于顺序,并且可以将其视为表之间的“左外部联接” 操作。 如果列的顺序更改,那么结果也会更改。

    现在请看更改顺序的示例,以及此更改对结果的影响。 此示例与此部分中的第二项相同,但更改了顺序。

    Product[Color] - ProductStyle[Finish] - Sum(Sales[Quantity])

    打开“显示不含数据的项”功能时的显示方式:

    Product[Color] ProductStyle[Finish] Sum(Sales[Quantity])

    注意“ProductStyle[Finish]=None”没有显示在表中。 在本例中,Power BI 先选择了“Product”表中的所有“Color”值。 然后,对于每种颜色,Power BI 选择了相应的“Finish”值,其中包含数据。 由于“无”未显示在“颜色”的任何组合中,因此未选中该项。

    Power BI 视觉对象行为

    在视觉对象中的一个字段上启用“显示无数据的项目”后,将自动为该同一视觉对象 Bucket 或层次结构中的其他所有字段启用该功能 。 视觉对象 Bucket 或层次结构可以是其轴或图例,也可以是类别、行或列 。

    例如,在“行”Bucket 中的带有四个字段的矩阵视觉对象上,如果一个字段启用“显示不含数据的项”,则矩阵中的所有项目都将启用它。 在下图中,在“行”Bucket 的第一个字段“SupplierID”字段中启用了“显示无数据的项目” 。 “行”Bucket 中的其他字段也会自动启用该功能。

    相反,“列”Bucket 中显示的“洲”字段不会自动启用“显示不含数据的项” 。

    如果将视觉对象转换为不同类型(例如,将矩阵视觉对象转换为表视觉对象),通常会看到此视觉对象行为。 在此类转换中,移动到 Bucket 中的任何字段都将自动启用“显示无数据的项目”,其中 Bucket 中的字段已启用该功能 。 在上述示例中,如果“SupplierID”启用了“显示不含数据的项”功能且视觉对象转换为表格,则“列”Bucket 中的“Continent”字段(以及“行”Bucket 中的字段)将移动到表视觉对象所使用的唯一 Bucket(即“值”Bucket)中。 因此,“值”Bucket 中的所有字段都将启用“显示不含数据的项”。

    使用“导出汇总数据”功能时,“显示不含数据的项”功能的行为与导出转换为表视觉对象时的行为相同。 因此,在导出图表矩阵视觉对象等视觉对象时,导出的数据可能与显示的视觉对象不同。 产生这种行为的原因是,作为导出过程的一部分,转换为表视觉对象为要导出的所有字段启用“显示不含数据的项”。

    示例数据模型

    本部分介绍本文中的示例使用的示例数据模型。

    Product[ProductId] Product[ProductName] Product[Color] Product[Size] Product[CategoryId] Product[StyleId]