DAX: избегать ALL (), вызывающего некорректное отображение атрибута измерения в матрице - PullRequest
1 голос
/ 08 октября 2019

После полезного ответа на мой предыдущий вопрос DAX я столкнулся с новой, другой проблемой, для которой я прошу вашей помощи в этом новом вопросе:

1. Сценарий:

У нас есть модель, состоящая из одной таблицы фактов (F_Visits) и одного измерения D_Calendar. F_Visits является таблицей фактов и содержит все посещения клиентов в магазине одежды. Его поля:
Visit Id: инкрементный уникальный номер, который является естественным ключом таблицы
Customer Key: уникальный идентификатор для клиента Calendar Fk: внешний ключ измерения D_Calendar в таблице фактов

+----------+--------------+-------------+
| Visit Id | Customer Key | Calendar FK |
+----------+--------------+-------------+
|        1 | John         |   20170101  |
|        2 | John         |   20180101  |
|        3 | John         |   20180101  |
|        4 | John         |   20190101  |
|        5 | Mark         |   20170101  |
|        6 | Mark         |   20180101  |
|        7 | Jack         |   20190101  |
+----------+--------------+-------------+

2. Цель:

Создать меру Time-Intelligence Year-To-Date, которая: - независимо от выбора срезов в календаре измерений - подсчитывает количество отдельных пациентов, которые посетили магазин в Year-To-Date - сохраняет взаимодействиес D_Calendar, чтобы я мог правильно включить в атрибут матрицы из этого измерения

3. Ожидаемый результат:

Независимо от фильтров срезов на D_Calendar (например, D_Calendar [Year] = 2017) мы получаем следующий результат:

+----------+-------------+-------------+-------------+------------------+
| Visit Id | Customer Key| Calendar FK | Measure YTD | D_Calendar[Year] |
+----------+-------------+-------------+-------------+------------------+
|        4 | John        |    20190101 |           1 |             2019 |
|        7 | Jack        |    20190101 |           1 |             2019 |
+----------+-------------+-------------+-------------+------------------+

4. Текущая ситуация

+----------+-------------+-------------+-------------+------------------+
| Visit Id | Customer Key| Calendar FK | Measure YTD | D_Calendar[Year] |
+----------+-------------+-------------+-------------+------------------+
|        4 | John        |    20190101 |           1 |             2017 |
|        7 | Jack        |    20190101 |           1 |             2017 |
+----------+-------------+-------------+-------------+------------------+

Проблема заключается в том, что D_Calendar[Year] в матрице принимает значение среза, а не значение, связанное с F_Visits[Calendar FK].

Где Мера YTD определяется как:

Measure YTD =
VAR vDateFrom = 20190101
VAR vDateTo = VALUE ( FORMAT ( ( TODAY () ), "YYYYMMDD" ) )
RETURN
    CALCULATE (
        DISTINCTCOUNT ( 'F_Visits'[Customer Key] ),
        ALL ( D_Calendar ),
        KEEPFILTERS ( D_Calendar[Year] ),
        FILTER (
            ALL ( 'F_Visits'[Calendar FK] ),
            'F_Visits'[Calendar FK] >= vDateFrom
                && 'F_Visits'[Calendar FK] <= vDateTo
        )
    )
...