适用范围:
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]