Power BI - 在计算函数中使用过滤器
Power BI - Using of filters in calculate function
请参考下面我使用的示例数据:
ID Name Status Dept.
1 Austin Pending MES
2 Roy Devilered DHA
3 Steven Terminated DHA
4 Peter Pending MES
5 Sanjay Pending MES
6 Domnic Terminated LA
7 Leon Devilered MES
8 Sanal Devilered LA
9 Kevin Terminated LA
10 Binoy Pending DHA
Table 姓名是员工。
我添加了两个措施:
Count_1 =
CALCULATE(COUNT('Employee'[ID]),
'Employee'[Dept.]="LA",
'Employee'[Status]="Terminated")
Count_2 =
CALCULATE(COUNT('Employee'[ID]),
FILTER('Employee','Employee'[Dept.]="LA"),
FILTER('Employee','Employee'[Status]="Terminated"))
没有任何报表层过滤器,两者都测量 return 值 2。但是当我为 (Delivered,Pending) 中的 Status 添加报表层过滤器时,计数变为
Count_1
给出 2
Count_2
给出 blank
- 如果有人能详细解释过滤器如何影响结果,那将非常有帮助
filter
、filter(all)
、filter(allexcept)
、filter(allselected)
之间的区别
你的两个措施之间的区别是第一个将忽略现有的过滤器上下文(你在报告中设置),而第二个将保留现有的过滤器上下文。
当您在报告中添加状态(已交付,待定)的过滤器时,您将在过滤器上下文中保留以下记录:
ID Name Status Dept.
1 Austin Pending MES
2 Roy Delivered DHA
4 Peter Pending MES
5 Sanjay Pending MES
7 Leon Delivered MES
8 Sanal Delivered LA
10 Binoy Pending DHA
*我已将 "Devilered" 值更改为 "Delivered"。
您的第一个度量 (Count_1) 将忽略此过滤器上下文,因此 returns 以下数据集中 [ID] 的计数:
ID Name Status Dept.
6 Domnic Terminated LA
9 Kevin Terminated LA
您的第二个措施 (Count_2) 将保留现有的过滤器上下文,然后应用额外的过滤器。由于没有记录满足这两个过滤器,因此度量 returns 为空白值。
因为您的第一个度量忽略了现有的过滤器上下文,您可以有效地重写它:
Count_1 =
CALCULATE(COUNT('Employee'[ID]),
'Employee'[Dept.]="LA",
'Employee'[Status]="Terminated")
为此:
Count_1 =
CALCULATE(
COUNT('Employee'[ID]),
ALL('Employee'),
FILTER(
'Employee',
'Employee'[Dept.]="LA"
&& 'Employee'[Status]="Terminated")
)
结果相同。我认为这更清楚地揭示了您的第一个措施的有效行为方式。
请参考下面我使用的示例数据:
ID Name Status Dept.
1 Austin Pending MES
2 Roy Devilered DHA
3 Steven Terminated DHA
4 Peter Pending MES
5 Sanjay Pending MES
6 Domnic Terminated LA
7 Leon Devilered MES
8 Sanal Devilered LA
9 Kevin Terminated LA
10 Binoy Pending DHA
Table 姓名是员工。
我添加了两个措施:
Count_1 =
CALCULATE(COUNT('Employee'[ID]),
'Employee'[Dept.]="LA",
'Employee'[Status]="Terminated")
Count_2 =
CALCULATE(COUNT('Employee'[ID]),
FILTER('Employee','Employee'[Dept.]="LA"),
FILTER('Employee','Employee'[Status]="Terminated"))
没有任何报表层过滤器,两者都测量 return 值 2。但是当我为 (Delivered,Pending) 中的 Status 添加报表层过滤器时,计数变为
Count_1
给出 2
Count_2
给出 blank
- 如果有人能详细解释过滤器如何影响结果,那将非常有帮助
filter
、filter(all)
、filter(allexcept)
、filter(allselected)
之间的区别
你的两个措施之间的区别是第一个将忽略现有的过滤器上下文(你在报告中设置),而第二个将保留现有的过滤器上下文。
当您在报告中添加状态(已交付,待定)的过滤器时,您将在过滤器上下文中保留以下记录:
ID Name Status Dept.
1 Austin Pending MES
2 Roy Delivered DHA
4 Peter Pending MES
5 Sanjay Pending MES
7 Leon Delivered MES
8 Sanal Delivered LA
10 Binoy Pending DHA
*我已将 "Devilered" 值更改为 "Delivered"。
您的第一个度量 (Count_1) 将忽略此过滤器上下文,因此 returns 以下数据集中 [ID] 的计数:
ID Name Status Dept.
6 Domnic Terminated LA
9 Kevin Terminated LA
您的第二个措施 (Count_2) 将保留现有的过滤器上下文,然后应用额外的过滤器。由于没有记录满足这两个过滤器,因此度量 returns 为空白值。
因为您的第一个度量忽略了现有的过滤器上下文,您可以有效地重写它:
Count_1 =
CALCULATE(COUNT('Employee'[ID]),
'Employee'[Dept.]="LA",
'Employee'[Status]="Terminated")
为此:
Count_1 =
CALCULATE(
COUNT('Employee'[ID]),
ALL('Employee'),
FILTER(
'Employee',
'Employee'[Dept.]="LA"
&& 'Employee'[Status]="Terminated")
)
结果相同。我认为这更清楚地揭示了您的第一个措施的有效行为方式。