使用Measures时忽略PowerBI Visual Level Filter

时间:2017-10-13 09:12:10

标签: powerbi dax measure

我做了一个我似乎无法弄清楚的情景。有PBIX here和下面的屏幕截图。我知道我在PBIX中所做的工作是不正确的,但我不知道我需要添加什么。

查看图表,当我移动日期滑块时,总CountOfMatches会使用下面的度量进行相应调整。都很开心

EndedContracts = COUNTROWS(Contracts)

Screen Shot

但是,当我更新EndedContracts上的视觉级别过滤器以仅显示少于两个已结束合约的日期时,总数不会相应调整。

如何使用CountOfMatches度量来考虑应用于EndedContracts度量的可视级别过滤器?如果我在视觉上添加总计,这可以按预期工作,但是这个示例是完整解决方案的抽象,它处理1000个客户并且具有单独的总数是理想的。

我还尝试将EndedContracts度量移动到页面级过滤器,但PowerBI不会接受它。

1 个答案:

答案 0 :(得分:2)

为什么Power BI不接受EndedContracts作为页面级过滤器?

EndedContracts是一种度量,因此其显示值取决于它的分解方式。如果你根本不打破它,那么显示的值是5.这就是卡片视觉效果所显示的。

在您的表格中,细分方式取决于您选择的列:您按日期过滤,而不是按客户过滤。对于任何给定日期,EndedContracts的数量是已知的。 2017年1月3日,有3个已完成的合约。将EndedContracts的数量过滤为小于2将过滤此日期。

要证明细分完全基于表中的列,请尝试将customer列添加到表中。如果您这样做,那么2017年1月3日将不再被过滤掉。这是因为您现在按日期 和客户 细分了数字,并且没有日期/客户组合使用2个或更多EndedContracts,因此不会过滤任何内容进行。

您无法在卡片视觉或网页过滤器中使用度量作为过滤器的原因是因为过滤器没有隐含的方式来了解您希望如何分解度量。你想根据总数进行过滤吗?这是不太可能的。您想根据总日期过滤吗?客户总数?总日期和客户? Power BI不知道。

你如何解决这个问题?

您需要做的是找到一种方法告诉Power BI如何以可过滤的方式将EndedContracts总数分解为5。

执行此操作的一种方法是通过计算表和SUMMARIZECOLUMNS语句。在 Modeling 选项卡中,选择 New Table ,然后尝试以下操作:

Ended Contracts by Date =
SUMMARIZECOLUMNS (
    Contracts[EndDate],
    "Total Ended Contracts", [EndedContracts]
)

这将创建一个计算表,显示EndDate的EndedContracts数字(忽略客户)。它是屏幕截图中表格的DAX等价物。 (如果您熟悉SQL,SUMMARIZECOLUMNS就像SQL中的GROUP BY一样。)

获得此计算表后,您可以按日期将其加入原始合同表,然后使用"总结合约"列作为页面过滤器。它将完全符合您的要求,使用2个或更多EndedContracts过滤掉所有日期。

Diagram showing the join between the calculated table and the original table

为什么这样做,但措施没有?因为与度量不同,您已明确指定了如何分解度量(在本例中为按日期)。您已实例化该表,现在对其进行过滤就像对数据模型中的任何其他表/列进行过滤一样。

我希望我的演练有助于解释为什么Power BI不直观,以及如何解决它。如果我说的话令人困惑,请告诉我。感谢您提供示例数据模型的链接。这非常有帮助。

旁注:为什么CountOfMatches测量不会看到应用于表格的视觉级别过滤器?

您网页上的每个视觉效果都被认为是独立的。同一措施在同一页面上以不同方式分解(例如按日期,按客户,按销售区域),这是不合理的。视觉级别过滤器可以为您提供视觉效果之间的灵活性:例如:您可以将一个图表过滤为MTD,但在另一个图表中显示YTD编号。

每当您希望将过滤器应用于多个视觉效果时,您需要执行页面级别过滤,或者对每个视觉应用相同的过滤器,这当然是您尝试做的。不幸的是,无论是网页级过滤器还是Card visual上的可视级别过滤器都不会接受度量。但是,上面的解决方案对两者都有效。

参考文献:

SUMMARIZECOLUMNS:https://msdn.microsoft.com/en-us/library/mt163696.aspx