Power BI - 在计算功能中使用过滤器

MJo*_*Joy 2 calculated-field dax measures powerbi

请参考下面我使用的示例数据:

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
Run Code Online (Sandbox Code Playgroud)

表名是Employee.

我添加了两个措施:

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"))
Run Code Online (Sandbox Code Playgroud)

如果没有任何报表图层过滤器,则两个度量都会返回值2.但是当我在(已传递,待定)中添加状态报表图层过滤器时,计数将更改为

Count_12

Count_2blank

  • 如果有人能够解释过滤器如何详细地影响结果,那将会非常有用
  • 之间的区别filter,filter(all),filter(allexcept),filter(allselected)

dyb*_*zon 6

两个度量之间的区别在于第一个度量将忽略现有的过滤器上下文(您在报告中设置),而第二个将保留现有的过滤器上下文.

在报表中为"已发送,待处理"状态添加过滤器时,您将在过滤器上下文中保留以下记录:

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
Run Code Online (Sandbox Code Playgroud)

*我已将"Devilered"值更改为"Delivered".

您的第一个度量(Count_1)将忽略此过滤器上下文,因此返回以下数据集中的[ID]的计数:

ID  Name     Status         Dept.
6   Domnic   Terminated     LA
9   Kevin    Terminated     LA
Run Code Online (Sandbox Code Playgroud)

您的第二个度量(Count_2)将保留现有的过滤器上下文,然后将应用其他过滤器.由于没有记录满足这两个过滤器,因此该度量返回空值.

因为您的第一个度量忽略了现有的过滤器上下文,所以您可以有效地重写:

Count_1 =    
CALCULATE(COUNT('Employee'[ID]),
'Employee'[Dept.]="LA",
'Employee'[Status]="Terminated")
Run Code Online (Sandbox Code Playgroud)

对此:

Count_1 =    
CALCULATE(
    COUNT('Employee'[ID]),
    ALL('Employee'),
    FILTER(
        'Employee',
        'Employee'[Dept.]="LA" 
        && 'Employee'[Status]="Terminated")
)
Run Code Online (Sandbox Code Playgroud)

并最终获得相同的结果.我认为这更清楚地揭示了你的第一个衡量标准是如何有效行事的.