显示 Power BI 中不含数据的项目

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

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

Screenshot of the Visualizations menu, highlighting the Show items with no data within the X-axis dropdown menu.

确定相关数据

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

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

Product[Color] Product[Size]
蓝色 大型
蓝色 中等
蓝色 小型
Red 大型

在此示例中,Power BI 显示表“[Product]”中存在的“[Color-Size]”的组合。

现在让我们看看其他组合:

2. 来自不同但直接相关的表的组且包含一个度量值:ProductStyle[Finish] - Product[Color] - Sum(Sales[Quantity])

ProductStyle[Finish] Product[Color] Sum(Sales[Quantity])
光泽 蓝色 10
亚光 蓝色 15

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

让我们看看其他情况:

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

ProductStyle[Finish] Product[Color]
光泽 蓝色
光泽 Red
亚光 蓝色

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

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

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

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

Screenshot of an error dialog, stating Can't determine relationships between the fields.

显示不含数据的项目

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

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

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

  1. 选择一个视觉对象。
  2. 在“值”字段中,右键单击该字段并从显示的菜单中选择“显示不含数据的项”,如下图所示 :

Screenshot of the Fields menu, highlighting the Show items with no data feature.

“显示不含数据的项”功能在以下情况下不起任何作用:

  • 未向视觉对象添加度量值,分组列来自同一个表。
  • 各个组不相关。 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])
蓝色 中等 15
蓝色 小型 10

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

Product[Color] Product[Size] Sum(Sales[Quantity])
蓝色 大型
蓝色 中等 15
蓝色 小型 10
Red 大型

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

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

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

ProductStyle[Finish] Product[Color] Sum(Sales[Quantity])
光泽 蓝色 10
亚光 蓝色 15

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

ProductStyle[Finish] Product[Color] Sum(Sales[Quantity])
光泽 蓝色 10
光泽 Red
亚光 蓝色 15

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

  • Power BI 首先考虑“ProductStyle[Finish]”,然后选择所有要显示的值,这样就生成了“光泽、亚光、无”。
  • 使用其中的每个值,Power BI 选择了所有相应的“Product[Color]”条目。
  • “无”与任何“Product[Color]”都不对应,因此该值显示为空白。

值得注意的是,选择列值的机制依赖于顺序,并且可以将其视为表之间的“左外部联接”操作。 如果列的顺序更改,那么结果也会更改。

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

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

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

Product[Color] ProductStyle[Finish] Sum(Sales[Quantity])
蓝色 光泽 10
蓝色 亚光 15
Red 光泽

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

Power BI 视觉对象行为

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

Screenshot of the Fields menu entries for axis and legend.

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

Screenshot of the fields menu, highlighting Show items with no data from the SupplierID shortcut menu.

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

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

导出数据

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

示例数据模型

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

模型Diagram of the relationships in the data model.

数据

Product[ProductId] Product[ProductName] Product[Color] Product[Size] Product[CategoryId] Product[StyleId]
1 Prod1 蓝色 小型 1 1
2 Prod2 蓝色 中型 2 2
3 Prod3 Red 大型 1 1
4 Prod4 蓝色 大型 2 2
ProductCategory[CategoryId] ProductCategory[CategoryName]
1 电话
2 照相机
3 TV
ProductStyle[StyleId] ProductStyle[Finish] ProductStyle[Polished]
1 光泽
2 亚光
3
Sales[SaleId] Sales[ProductId] Sales[Date] Sales[Quantity]
1 1 2012 年 1 月 1 日 0:00 10
2 2 2013 年 1 月 1 日 0:00 15

本文介绍了如何在 Power BI 中启用“显示不含数据的项目”功能。 你可能还会对以下文章感兴趣: