2017-10-13 144 views
1

我已经制作了一个我似乎无法解决的情况。有一个PBIX here,并在下面的屏幕截图。我知道我在PBIX中有什么不正确的工作,但我不知道我需要添加什么。使用度量时忽略了PowerBI可视级别过滤器

看图中,当我移动日期滑块时,CountOfMatches的总数会相应地进行调整使用以下措施。一切都开心。

EndedContracts = COUNTROWS(Contracts) 

Screen Shot

然而,当我更新的EndedContracts视觉层次过滤器,只显示有不到两年的期限合同的日期,总量不进行相应的调整。

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

我也尝试将EndedContracts度量移动到Page Level Filter,但PowerBI不接受它。

回答

1

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

EndedContracts是一种度量,因此它的显示值取决于它如何分解。如果你完全没有分解它,那么显示的值是5.这是一张卡片视觉会显示的内容。

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

为了演示细分完全基于表中的列,请尝试将客户列添加到表中。如果你这样做,那么2017年1月3日将不再被滤除。这是因为您现在按日期划分了数字和客户,并且没有包含2个或更多EndedContracts的日期/客户组合,所以没有任何东西被过滤掉。

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

你如何解决这个问题?

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

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

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

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

一旦拥有此计算表,您可以按日期将其加入到原始合同表中,然后使用“Total Ended Contracts”列作为页面过滤器。它的行为完全符合你的要求,用2个或更多EndedContracts过滤掉所有日期。

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

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

我希望我的演练有助于解释为什么双向电力的行为不直观,以及如何解决它。让我知道我说过的话是否令人困惑。感谢您提供指向示例数据模型的链接。这非常有帮助。

旁注:为什么可以CountOfMatches措施看不到应用到表中的视觉层次过滤器?

每个可视页面上被认为是独立的。在同一页面上以同样的方式进行不同的分解(例如按日期,按客户,按销售地区划分)并非不合理。视觉水平过滤器可以让您在视觉效果之间灵活运用:例如您可能会将一个图表过滤为MTD,但会在另一个图表中显示YTD数字。

每当你想过滤器被应用到多种视觉效果,您可能需要做一个页面级过滤器,或相同的过滤器适用于每个可视化,这肯定是你所试图做的。不幸的是,卡片视觉上的页面级别过滤器和视觉级别过滤器都不会接受度量。上面的解决方案对两者都适用,但是。


参考文献:

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

+0

这是一个很好的答案,谢谢伦纳德。我发现另一个工作是更通用的 - 但你的作品完美适用于特定的场景。 –

+0

不客气。绝对将您的通用解决方案作为答案! – Leonard

+0

不幸的是它被埋在客户PBIX中。总之,我有一个手动输入1和0的表格。然后计算我的度量值为布尔值1/0,以确定它们是否包含在计数中。然后我有作为视觉的计数,其中所述量度= 1 COUNTROWS(FILTER(vwMember,[_MeasureMemberFallsInRange] = 1))。 –