取消过滤一个字段并过滤另一个字段不起作用

时间:2017-01-19 19:22:13

标签: powerbi dax

我尝试使用All()函数取消过滤一个名为CycleName的字段,然后使用FILTER()函数过滤我的Moment字段。但由于某些原因,将两个函数组合在PowerBI中会返回错误。

这是我的DAX功能:

CurrentForecastVar = CALCULATE(SUM([Amount]), FILTER(ALL(PowerBIHeadcount[CycleName]), [Moment] = "Current Forecast"))

错误是:"列'时刻'无法找到或未在此表达式中使用。"

我觉得奇怪的是,如果我尝试过滤只有PowerBI正确检测我的Moment列:

CurrentForecastVar = CALCULATE(SUM([Amount]), FILTER(PowerBIHeadcount, [Moment] = "Current Forecast"))

为什么我不能对CycleName进行过滤,然后按时过滤?

2 个答案:

答案 0 :(得分:0)

尝试使用ALL(PowerBIHeadcount)

CurrentForecastVar =
CALCULATE ( SUM ( [Amount] ), FILTER ( ALL ( 'PowerBIHeadcount' ), [Moment] = "Current Forecast" ) )

在整个表上使用ALL函数将禁用应用于表中任何列的任何explit过滤器,如果您可以使用此解决方案,则可能需要使用{{1} }。

如果有帮助,请告诉我。

答案 1 :(得分:0)

您不能使用[Moment]列的原因是因为FILTER的第一个参数是表或返回表的函数。与

ALL(PowerBIHeadcount[CycleName])

返回仅包含CycleName的单列表,并且由于未在过滤条件中指定表引用,因此函数会尝试使用提供的表中的列。并且没有[Moment]列init。尝试明确指定

PowerBIHeadCount[Moment] = "Current forecast"

这是始终指定完全符合条件的名称的最佳做法。 所以决赛将是:

CurrentForecastVar = CALCULATE(SUM([Amount]), FILTER(ALL(PowerBIHeadcount[CycleName]), PowerBIHeadcount[Moment] = "Current Forecast"))

另一种选择是将您从CycleName列中删除的过滤器作为CALCULATE函数中的另一个参数,并保留FILTER。 E.g:

CurrentForecastVar = 
CALCULATE(
SUM([Amount]),
ALL(PowerBIHeadcount[CycleName]), 
FILTER(PowerBIHeadcount, [Moment] = "Current Forecast")
)