我尝试使用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进行过滤,然后按时过滤?
答案 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")
)