Запрос SSAS DAX .... как показать итоги по значениям атрибутов, которые соответствуют условиям cal c - PullRequest
0 голосов
/ 20 февраля 2020

В кубах наших компаний мы регулярно используем функцию РАСЧЕТ для наших мер. Мы также регулярно сталкиваемся со сценарием, в котором, хотя мы применяем фильтр в РАСЧЕТЕ, возвращаемое итоговое значение показывает одно и то же значение в нескольких строках, а не в строках, где выполняется условие.

Пример снимка экрана ниже .

enter image description here

Где мы хотим, чтобы сумма отображалась только в той строке, где атрибут = "Y"

РАСЧЕТ

=
CALCULATE (
    DISTINCTCOUNT ( 'Sales'[Transaction_Header_ID] ),
    'Sales'[Is_Named_Sale] = "Y",
    'Member'[Member_Has_Email_Flag] = "Y"
)

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

Member_Has_Email_Flag Total

Y                     249239

N

Если кто-нибудь сможет это объяснить, он будет очень признателен.

Приветствия

1 Ответ

0 голосов
/ 20 февраля 2020

Подумайте, что происходит в ячейке отчета, где 'Member' [Member_Has_Email_Flag] равен "N".

Из отчета мы получаем фильтр 'Member' [Member_Has_Email_Flag] = "N". Затем, внутри функции CALCULATE, вы переопределяете этого фильтра на "Y". Таким образом, формула игнорирует фильтры, поступающие из отчета, и заменяет их на «Y», давая вам одинаковое число независимо от внешнего фильтра. Вот как работает CALCULATE - он изменяет внешние фильтры, заменяя их фильтрами, которые вы предоставляете внутри функции.

Чтобы устранить проблему, используйте функцию KEEPFILTERS:

=
CALCULATE (
    DISTINCTCOUNT ( 'Sales'[Transaction_Header_ID] ),
    'Sales'[Is_Named_Sale] = "Y",
    KEEPFILTERS('Member'[Member_Has_Email_Flag] = "Y")
)

Здесь вы указываете CALCULATE оставить внешний фильтр ('N ") и объедините его с новым фильтром (" Y Msgstr "). Поскольку нет записей, в которых это поле было бы одновременно Y и N, формула теперь будет возвращаться пустой.

...