我有一个有 2 个度量的表 - One and Two。两者都使用 CALCULATE 并具有过滤器。还有切片机。虽然Two正确地忽略了切片器的过滤器上下文,One但事实并非如此。
“年”[年] 是一个整数。
One = CALCULATE(SUM(Years[Sales Amount]),FILTER(Years, 'Years'[Year] = 2010))
Two = CALCULATE(SUM(Years[Sales Amount]),'Years'[Year] = 2010)
我(在学习中)缺少什么?我了解 Microsoft 建议不要使用 FILTER 作为过滤器参数。我只是想掌握它的工作方式。
Fer*_*osa 10
有一些棘手的细节CALCULATE会产生不同的结果。I\xe2\x80\x99 将显示差异并在下面提供示例。
One = CALCULATE(SUM(Years[Sales Amount]),FILTER(Years, \'Years\'[Year] = 2010))\nRun Code Online (Sandbox Code Playgroud)\n首先,请记住每种语言都是从最内部的函数到最外部的函数进行计算。
\n这意味着Power BI将首先计算该函数FILTER,该函数将返回一个仅包含2010年的表。只有在此之后Power BI才会执行CALCULATE。
这里有一个棘手的部分:如果第二个参数中有一个过滤器,则CALCULATE可以忽略切片器(有关措施二的更多详细信息)。然而,第二个参数没有过滤器,只有一个表!(之前计算过,现在只包含2010年)。
由于没有筛选器,因此CALCULATE应用上下文筛选器(示例中的切片器),排除 2013 年之前的任何内容。\n鉴于此,没有行与“措施一”的筛选器匹配,结果将为空(如果切片器设置为 2013-2018 年) , 当然)。
Two = CALCULATE(SUM(Years[Sales Amount]),\'Years\'[Year] = 2010)\nRun Code Online (Sandbox Code Playgroud)\n第二个度量确实有一个过滤表达式:\'Years\'[Year] = 2010
\n当提供过滤器表达式时,该CALCULATE函数会更改过滤器上下文(其中包含切片器或页面上的过滤器等)以评估表达式。
对于每个过滤器表达式,有两种可能的结果CALCULATE:
结果 A.如果列已在筛选器上下文中,则现有筛选器将被表达式中的参数覆盖CALCULATE。即,切片器(或此页面或所有页面上的过滤器\xe2\x80\xa6)并不重要
这就是你的第二个措施的情况!
\n由于您在表达式和切片器中都使用了“Years”[Year] CALCULATE ,因此上下文过滤器将被CALCULATE表达式中的过滤器覆盖。我的意思是,结果是忽略切片器/过滤器上下文,您会发现结果为“3”。
结果 B。如果列不在筛选器上下文中,则新筛选器将添加到筛选器上下文中以计算表达式。换句话说,它将同时考虑切片器/过滤器上下文和CALCULATE.
为了举例说明这种行为,我创建了一个新措施:
\nThreeSalesFilter = CALCULATE(SUM(Years[Sales Amount]), \'Years\'[Sales Amount]=3)\nRun Code Online (Sandbox Code Playgroud)\n它与第二小节保持完全相同的行,对吗?Year=2010 是同一行 Sales Amount=3。\n但是,此度量的结果是空白,而不是 3。相当有趣!
\n同样,发生这种情况是因为CALCULATE正在使用 \'Years\'[Sales Amount] 但切片器/过滤器上下文正在使用 \'Years\'[Year] \xe2\x80\x93 另一列。因此CALCULATE过滤器“加入”过滤器上下文;不要覆盖它。
下面是仪表板的再现,包括我的第三个变量。
\n\n如果您需要更多详细信息或说明,请在评论中告诉我,我将在此处进行编辑。
\n| 归档时间: |
|
| 查看次数: |
5031 次 |
| 最近记录: |