Power BI — использование фильтров в функции расчета

Ниже приведены примеры данных, которые я использовал:

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

Имя таблицы — Сотрудник.

Я добавил две меры:

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"))

Без каких-либо фильтров слоя отчета обе меры возвращают значение 2. Но когда я добавляю фильтр слоя отчета для состояния в (доставлено, ожидает), счетчик изменяется на

Count_1 дает 2

Count_2 дает blank

  • Было бы очень полезно, если бы кто-нибудь подробно объяснил, как фильтры влияют на результаты.
  • Разница между filter, filter(all), filter(allexcept), filter(allselected)

person MJoy    schedule 27.06.2017    source источник


Ответы (1)


Разница между двумя вашими мерами заключается в том, что первая будет игнорировать существующий контекст фильтра (который вы установили в своем отчете), а вторая сохранит существующий контекст фильтра.

Когда вы добавите в свой отчет фильтр для статуса (Доставлено, Ожидается), в контексте фильтра останутся следующие записи:

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) будет игнорировать этот контекст фильтра и поэтому возвращает количество [ID] в следующем наборе данных:

ID  Name     Status         Dept.
6   Domnic   Terminated     LA
9   Kevin    Terminated     LA

Ваша вторая мера (Count_2) сохранит существующий контекст фильтра, а затем применит дополнительный фильтр. Поскольку никакие записи не удовлетворяют обоим этим фильтрам, мера возвращает пустое значение.

Поскольку ваша первая мера игнорирует существующий контекст фильтра, вы можете эффективно переписать это:

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")
)

И в итоге с тем же результатом. Я думаю, что это более четко показывает, как эффективно ведет себя ваша первая мера.

person dybzon    schedule 27.06.2017
comment
Спасибо Расмус! !! - person MJoy; 28.06.2017
comment
Отличное объяснение. Я вслепую сталкивался с этим и смог идеально применить это к своей ситуации и, что более важно, с полным пониманием. - person Erik; 09.02.2018