Расчет Dax фильтра на основе суммы с начала года
В табличной модели SSAS я пытаюсь подсчитать количество отдельных клиентов, которые приобрели данный продукт за период с начала года. Таблица содержит показатели, которые не являются явными суммами, поэтому я получаю декартово произведение всех продуктов для каждого клиента, независимо от того, нет ли продаж. Я пытаюсь ограничить счет, отфильтровывая комбинации клиент / продукт с YTD Sales = 0. Однако я не могу заставить ФИЛЬТР распознавать контекст DATESYTD. Это только когда-либо фильтрует на основе продаж, существующих в течение выбранного календарного месяца. Я пытался вставить функцию ALL в разные стороны.
Это то, что я до сих пор.
Measure:
CALCULATE (
DISTINCTCOUNT ( Fact[Customer] ),
DATESYTD ( Calendar[Date] ),
FILTER ( Fact,
CALCULATE ( [Sum of Sales], DATESYTD ( Calendar[Date] ) ) <> 0
)
)
Эта мера, например, будет подсчитывать отдельных клиентов, покупающих продукт в месяце № 5, если месяц № 5 явно выбран. Однако в него не входит клиент, который приобрел этот товар в месяце № 2 того же года.
1 ответ
Я думаю, что следующий DAX должен добиться цели:
COUNTROWS(
FILTER(
VALUES(Fact[Customer]),
CALCULATE ( [Sum of Sales], DATESYTD ( Calendar[Date] ) ) <> 0
)
)
Также убедитесь, что ваша таблица "Календарь" помечена как таблица дат. Если по какой-либо причине вы предпочитаете не помечать его как таблицу дат, перепишите вышеупомянутый DAX:
COUNTROWS(
FILTER(
VALUES(Fact[Customer]),
CALCULATE ( [Sum of Sales], DATESYTD ( Calendar[Date] ), ALL('Calendar') ) <> 0
)
)
Изменить: У вас есть записи в вашей таблице фактов, где [Sum of Sales]
это 0? Если нет, то вы могли бы значительно упростить и улучшить производительность, написав:
CALCULATE(
DISTINCTCOUNT(Fact[Customer]),
DATESYTD( Calendar[Date] )
)
Опять же, если вы не пометили свою таблицу "Календарь" как таблицу дат, добавьте ALL(Calendar)
удалить фильтр по конкретным календарным столбцам.