Попытка понять CALCULATE и FILTER в DAX

Я пытаюсь поиграть с выражениями FILTER и CALCULATE DAX. Я хотел бы узнать количество отдельных заказов, в которых есть товары, цена которых меньше средней стоимости категории: Велосипеды. Сначала я создаю меру для расчета средней стоимости велосипедов, которая составляет 913,61.

avg product cost bikes =
CALCULATE (
    AVERAGE ( AW_Product_DIM[ProductCost] ),
    AW_Product_Categories_DIM[CategoryName] = "Bikes"
)

Затем я создаю меру для расчета общего количества заказов.

Total Orders =
DISTINCTCOUNT ( AW_Sales[OrderNumber] )

Затем у меня есть функция РАСЧЕТ с ФИЛЬТРОМ для расчета общего количества заказов, в которых есть продукты, стоимость которых меньше средней стоимости всех продуктов, которая составляет 913,61.

Sales less than Bike's avg =
CALCULATE (
    [Total Orders],
    FILTER (
        AW_Product_DIM,
        AW_Product_DIM[ProductCost] < [avg product cost bikes]
    )
)

Не могли бы вы помочь мне понять, почему я не получаю никакого значения в столбце «Продажи меньше, чем среднее значение велосипеда»? Все товары в категории «Аксессуары и одежда» меньше средней стоимости велосипеда, которая составляет 913,61. Таким образом, продажи должны быть на 16983 меньше, чем в среднем у Bike по аксессуарам и на 6976 по одежде. Всех велосипедов больше 1000, так что должно быть пусто.

Пожалуйста, обратитесь к

Попытка понять CALCULATE и FILTER в DAX

У которого есть представление Matrix, которое я пытаюсь визуализировать.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мера вычисляется в контексте, из которого она вызывается. Когда вы вызываете меру внутри ФИЛЬТРА (или любой функции итератора), она вычисляется в контексте строки таблицы, которую вы итерируете, и может иметь другое значение для каждой строки.

Один из способов исправить это — вычислить его один раз вне ФИЛЬТРА и повторно использовать это значение для каждой строки, которую ФИЛЬТР выполняет итерацию, следующим образом:

Sales less than Bike's avg =
VAR AvgBikeCost = [avg product cost bikes]
RETURN
    CALCULATE (
        [Total Orders],
        FILTER (
            AW_Product_DIM,
            AW_Product_DIM[ProductCost] < AvgBikeCost
        )
    )

Это именно то, чего я пытаюсь достичь. Поскольку я изучаю PowerBI, я хотел бы знать, можем ли мы каким-либо другим образом достичь таких результатов, например, используя комбинацию функций DAX, таких как CALCULATE и REMOVEFILTERS и т. д.?

chexxmex 22.12.2020 18:23

Можно настроить контекст в FILTER, чтобы заставить его работать, но это будет гораздо менее эффективно, чем однократное вычисление значения.

Alexis Olson 22.12.2020 18:27

Да, вы можете показать мне, как? Пожалуйста, только для понимания

chexxmex 22.12.2020 22:17

Добавление ALL ( AW_Product_Categories_DIM ) (или REMOVEFILTERS вместо ALL) в качестве еще одного аргумента в CALCULATE к вашей первой avg мере может помочь. Однако мне нужно увидеть диаграмму отношений модели, чтобы знать наверняка.

Alexis Olson 23.12.2020 15:19

Другие вопросы по теме