使用 Measures 时忽略 PowerBI Visual Level Filter
PowerBI Visual Level Filter ignored when using Measures
我重现了一个我似乎无法理解的场景。下面有一个 PBIX here 和一个屏幕截图。我知道我在 PBIX 中的内容不适合完成这项工作,但我不知道我需要添加什么。
查看图表,当我移动日期滑块时,总 CountOfMatches 使用下面的度量进行相应调整。都很开心。
EndedContracts = COUNTROWS(Contracts)
但是,当我更新 EndedContracts 上的视觉级别过滤器以仅显示那些少于两个结束合同的日期时,总数不会相应调整。
如何获取 CountOfMatches 度量以考虑应用于 EndedContracts 度量的视觉级别过滤器?如果我在视觉上添加总计,这会按预期工作,但此示例是完整解决方案的抽象,它处理 1000 多个客户并且拥有单独的总计是理想的。
我还尝试将 EndedContracts 度量移至页面级筛选器,但 PowerBI 不会接受它。
为什么 Power BI 不接受 EndedContracts 作为页面级过滤器?
EndedContracts 是一个度量,因此它的显示值取决于它的分解方式。如果你根本不分解它,那么显示的值为 5。这就是 Card visual 会显示的内容。
在您的 table 中,它的细分方式基于您选择的列:您按日期而非客户进行过滤。对于任何给定日期,EndedContracts 的数量是已知的。 2017 年 1 月 3 日,有 3 份终止合同。将 EndedContracts 的数量过滤为小于 2 将过滤掉此日期。
为了证明细分完全基于您 table 中的列,请尝试将客户列添加到您的 table 中。如果您这样做,则 2017 年 1 月 3 日将不再被过滤掉。这是因为您现在按日期 和客户 细分数字,并且没有 date/customer 与 2 或更多 EndedContracts,因此不会过滤掉任何内容。
您不能将度量用作卡片视觉对象中的筛选器或用作页面筛选器的原因是因为筛选器没有隐含的方式知道您希望如何分解度量。你想根据总数过滤吗?这是不太可能的。您要根据日期总数进行过滤吗?总计按客户?按日期和客户的总数? Power BI 不知道。
你如何解决这个问题?
您需要做的是找到一种方法告诉 Power BI 如何以可以过滤的方式分解 EndedContracts 总数 5。
一种方法是通过计算 table 和 SUMMARIZECOLUMNS 语句。在 Modeling 选项卡中,select New Table,然后尝试以下操作:
Ended Contracts by Date =
SUMMARIZECOLUMNS (
Contracts[EndDate],
"Total Ended Contracts", [EndedContracts]
)
这将创建一个计算的 table,向您显示 EndDate 的 EndedContracts 编号(忽略客户)。它是屏幕截图中 table 的 DAX 等价物。 (SUMMARIZECOLUMNS 类似于 SQL 中的 GROUP BY,如果您熟悉 SQL。)
计算出 table 后,您可以按日期将其加入原始合同 table,然后使用 "Total Ended Contracts" 列作为页面过滤器。它会完全按照您的意愿运行,过滤掉所有包含 2 个或更多 EndedContracts 的日期。
为什么这行得通,但措施却行不通?因为与度量不同,您已经明确指定了要如何分解度量(在本例中是按日期)。您已经实例化了 table,现在对其进行过滤就像对数据模型中的任何其他 table/column 进行过滤一样。
我希望我的演练有助于解释为什么 Power BI 的行为不直观,以及如何解决它。如果我所说的内容令人困惑,请告诉我。感谢您为示例数据模型提供 link。很有帮助。
旁注:为什么 CountOfMatches 度量看不到应用于 table 的视觉级别过滤器?
页面上的每个视觉对象都被视为独立的。在同一页面上以不同方式(例如按日期、按客户、按销售区域)细分相同的度量标准并非不合理。视觉级别过滤器可以让您在视觉效果之间灵活选择:例如您可以将一个图表过滤为 MTD,但在另一个图表中显示 YTD 数字。
每当您希望将过滤器应用于多个视觉对象时,您要么需要执行页面级过滤器,要么对每个视觉对象应用相同的过滤器,这当然是您想要做的。不幸的是,无论是页面级筛选器还是卡片视觉上的视觉级筛选器都不会接受度量。但是,我上面的解决方案对两者都适用。
参考文献:
我重现了一个我似乎无法理解的场景。下面有一个 PBIX here 和一个屏幕截图。我知道我在 PBIX 中的内容不适合完成这项工作,但我不知道我需要添加什么。
查看图表,当我移动日期滑块时,总 CountOfMatches 使用下面的度量进行相应调整。都很开心。
EndedContracts = COUNTROWS(Contracts)
但是,当我更新 EndedContracts 上的视觉级别过滤器以仅显示那些少于两个结束合同的日期时,总数不会相应调整。
如何获取 CountOfMatches 度量以考虑应用于 EndedContracts 度量的视觉级别过滤器?如果我在视觉上添加总计,这会按预期工作,但此示例是完整解决方案的抽象,它处理 1000 多个客户并且拥有单独的总计是理想的。
我还尝试将 EndedContracts 度量移至页面级筛选器,但 PowerBI 不会接受它。
为什么 Power BI 不接受 EndedContracts 作为页面级过滤器?
EndedContracts 是一个度量,因此它的显示值取决于它的分解方式。如果你根本不分解它,那么显示的值为 5。这就是 Card visual 会显示的内容。
在您的 table 中,它的细分方式基于您选择的列:您按日期而非客户进行过滤。对于任何给定日期,EndedContracts 的数量是已知的。 2017 年 1 月 3 日,有 3 份终止合同。将 EndedContracts 的数量过滤为小于 2 将过滤掉此日期。
为了证明细分完全基于您 table 中的列,请尝试将客户列添加到您的 table 中。如果您这样做,则 2017 年 1 月 3 日将不再被过滤掉。这是因为您现在按日期 和客户 细分数字,并且没有 date/customer 与 2 或更多 EndedContracts,因此不会过滤掉任何内容。
您不能将度量用作卡片视觉对象中的筛选器或用作页面筛选器的原因是因为筛选器没有隐含的方式知道您希望如何分解度量。你想根据总数过滤吗?这是不太可能的。您要根据日期总数进行过滤吗?总计按客户?按日期和客户的总数? Power BI 不知道。
你如何解决这个问题?
您需要做的是找到一种方法告诉 Power BI 如何以可以过滤的方式分解 EndedContracts 总数 5。
一种方法是通过计算 table 和 SUMMARIZECOLUMNS 语句。在 Modeling 选项卡中,select New Table,然后尝试以下操作:
Ended Contracts by Date =
SUMMARIZECOLUMNS (
Contracts[EndDate],
"Total Ended Contracts", [EndedContracts]
)
这将创建一个计算的 table,向您显示 EndDate 的 EndedContracts 编号(忽略客户)。它是屏幕截图中 table 的 DAX 等价物。 (SUMMARIZECOLUMNS 类似于 SQL 中的 GROUP BY,如果您熟悉 SQL。)
计算出 table 后,您可以按日期将其加入原始合同 table,然后使用 "Total Ended Contracts" 列作为页面过滤器。它会完全按照您的意愿运行,过滤掉所有包含 2 个或更多 EndedContracts 的日期。
为什么这行得通,但措施却行不通?因为与度量不同,您已经明确指定了要如何分解度量(在本例中是按日期)。您已经实例化了 table,现在对其进行过滤就像对数据模型中的任何其他 table/column 进行过滤一样。
我希望我的演练有助于解释为什么 Power BI 的行为不直观,以及如何解决它。如果我所说的内容令人困惑,请告诉我。感谢您为示例数据模型提供 link。很有帮助。
旁注:为什么 CountOfMatches 度量看不到应用于 table 的视觉级别过滤器?
页面上的每个视觉对象都被视为独立的。在同一页面上以不同方式(例如按日期、按客户、按销售区域)细分相同的度量标准并非不合理。视觉级别过滤器可以让您在视觉效果之间灵活选择:例如您可以将一个图表过滤为 MTD,但在另一个图表中显示 YTD 数字。
每当您希望将过滤器应用于多个视觉对象时,您要么需要执行页面级过滤器,要么对每个视觉对象应用相同的过滤器,这当然是您想要做的。不幸的是,无论是页面级筛选器还是卡片视觉上的视觉级筛选器都不会接受度量。但是,我上面的解决方案对两者都适用。
参考文献: