Использование имен столбцов VS с использованием всей таблицы во ВСЕХ функциях (DAX)

Итак, я пытаюсь понять поведение функции FILTER(ALL) в DAX. Я создал два выражения DAX

1.

 sales 100 using table in ALL = 
    CALCULATE(
        [Customer sales],
        FILTER(
            ALL('Sales by Store'),
            'Sales by Store'[quantity_sold] * 'Sales by Store'[unit_price] >100
        )
    )
sales 100 using column names in ALL = 
CALCULATE(
    [Customer sales],
    FILTER(
        ALL('Sales by Store'[quantity_sold], 'Sales by Store'[unit_price]),
        'Sales by Store'[quantity_sold] * 'Sales by Store'[unit_price] >100
    )
)

На изображении выше показано, почему при использовании имени таблицы в функции ALL мы получаем значения во всех категориях. Но когда мы используем имена столбцов, мы получаем их только там, где значение больше 100, что относится только к одной категории, кофейным зернам.

Стоит ли изучать 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
271
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В первой формуле эффект использования всей таблицы заключается в удалении любого существующего фильтра в таблице. Поскольку внутренне DAX использует расширенную таблицу, это означает, что он также удаляет фильтры, установленные с использованием измерений, если они существуют.

Вместо этого во второй формуле используются только два столбца, поэтому другие существующие фильтры не удаляются, и, следовательно, мера [Customer Sales] фильтруется новым контекстом фильтра, заданным выражением FILTER(ALL...), но в то же время также фильтруется ранее существовавшим отфильтровать product_category.

Возможный способ заставить вторую формулу вести себя как первая — явно удалить другие фильтры с помощью REMOVEFILTERS (или ALL, если REMOVEFILTERS еще не поддерживается)

sales 100 using column names in ALL = 
CALCULATE(
    [Customer sales],
    FILTER(
        ALL('Sales by Store'[quantity_sold], 'Sales by Store'[unit_price]),
        'Sales by Store'[quantity_sold] * 'Sales by Store'[unit_price] >100
    ),
    REMOVEFILTERS( 'Sales by Store' ) // or any dimension, if used
)

Чтобы первый вел себя как второй, можно использовать KEEPFILTERS, который добавляет выражение FILTER к фильтрам вместо замены ранее существовавших.

 sales 100 using table in ALL = 
    CALCULATE(
        [Customer sales],
        KEEPFILTERS( 
            FILTER(
                ALL('Sales by Store'),
                'Sales by Store'[quantity_sold] * 'Sales by Store'[unit_price] >100
            ) 
        )
    )

Спасибо, а зачем вы вложили ФИЛЬТР в функцию KEEPFILTER? Могу ли я определить меру, как определено ниже? продажи 100 с использованием таблицы в ALL KEEPFILTERS = CALCULATE([Продажи клиентов], KEEPFILTERS('Продажи по магазинам'), FILTER(ALL('Продажи по магазинам'), 'Продажи по магазинам'[quantity_sold] * 'Продажи по магазинам'[ unit_price] >100 ) )

chexxmex 23.12.2020 16:28

Я добавил формулу с KEEPFILTER, чтобы объяснить различия между двумя показателями. Применение KEEPFILTERS к FILTER в первой формуле изменяет поведение первой формулы. Таким образом, существующий фильтр не заменяется, а применяется вместе с новым. Результирующий фильтр является пересечением. Формула с KEEPFILTERS('Продажи по магазинам') неправильно использует KEEPFILTERS: KEEPFILTERS следует использовать вокруг фильтра, который может заменить существующий фильтр.

sergiom 23.12.2020 19:13

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