DAX-запрос для подсчета значений на основе другой кумулятивной меры DAX - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть эта таблица:

Id   Length(m)   Defect  Site   Date
1    10          1       y      10/1/19
2    60          0       x      09/1/19
3    30          1       y      08/1/19
4    80          1       x      07/1/19
5    20          1       x      06/1/19

Я хочу подсчитать количество дефектов и идентификаторов, которые были на последних 100 м длины (отсортировано по дате DESC), сохраняя при этом возможность этого изменятьс дополнительными фильтрами.Например, каково количество дефектов для сайта x за последние 100 м или каково количество дефектов за последние 100 м с идентификатором больше 1.

На вопрос «Какова сумма?дефектов для сайта x за последние 100 м ', я хотел бы, чтобы результат был равен 2, поскольку таблица должна выглядеть следующим образом:

Id   Length(m) Length Cum.   Defect  Site   Date
4    80        80            1       x      07/1/19
5    20        100           1       x      06/1/19

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

Также важно отметить, что фильтрация будет выполняться в PowerBI.Я не хочу жестко кодировать фильтры в запросе DAX.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 25 сентября 2019

Allwright!

Я понял это.Я предположил, что идентификатор элементов (?) Увеличивается во времени, поэтому самый старый элемент имеет самый низкий идентификатор.

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

Важно использовать ALLSELECTED, чтобы сохранить все внешние фильтры на месте.После этого довольно просто отфильтровать таблицу с максимальным значением CumulativeMeters <= 100 метров и местом, где строка является дефектом.Подсчет строк в итоговой таблице дает результат, который вы ищете: </p>

# Defects last 100m = 
CALCULATE (
    COUNTROWS ( Items ),
    FILTER (
        ADDCOLUMNS (
            Items,
            "CumulativeMeters", CALCULATE (
                SUM ( Items[Length(m)] ),
                FILTER (
                    ALLSELECTED(  Items ),
                    Items[Date] <= EARLIER ( Items[Date] )
                        && Items[Id] <= EARLIER ( Items[Id] )
                )
            )
        ),
        [CumulativeMeters] <= 100
            && Items[Defect] = 1
    )
)

Надеюсь, что поможет,

Ян

...