Powerbi Почему измерение дает разные результаты в зависимости от эквивалентных фильтров

У меня есть мера, которая подсчитывает строки таблицы, игнорируя фильтрацию по переменной зачисления в высшие учебные заведения:

count_ignore_ps = CALCULATE(COUNTROWS(highschool_recent_year), REMOVEFILTERS(highschool_recent_year[ps_enr]))

Вот он используется в кластерной гистограмме в качестве оси Y. По оси X обозначено обучение в школах и высших учебных заведениях. При таком использовании мерой должно быть общее количество рядов в школе. Это работает так, как задумано на левом графике, но не на правом графике.

На левом графике есть фильтры:

  • Гонка 1 или Гонка 2 или Гонка 3
  • нет фильтра в школе

На правом графике есть фильтры:

  • Гонка 1 или Гонка 2 или Гонка 3
  • Школа А или Школа Б или Школа С

Есть только три школы, поэтому никаких фильтров по школам и объединение всех школ должно быть одинаковым. Эта мера дает другой результат.

Я думаю, это связано с тем, что 10 учащихся расы 1 зачислены и 0 учащихся расы 1 не зачислены в школу А. Поэтому по какой-то причине эта мера не учитывает учащихся в другом условии.

Кто-нибудь знает, что может быть причиной этой проблемы или решения?

Вот ссылка на данные игрушки: https://drive.google.com/file/d/143r4Nlmz819kdvaBCz6KFdkxAVP0R5ov/view?usp=sharing

Вот ссылка на файл powerbi: https://drive.google.com/file/d/1fYP1Akv2wY2vIy9mRMrl3O26WpHwTtPk/view?usp=sharing

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

Ответы 2

Я вполне уверен, что это существует автоматически. Вы применяете два фильтра к одной и той же таблице, что приводит к срабатыванию автоматического существования. Подробнее здесь: https://www.sqlbi.com/articles/understanding-dax-auto-exist/

Если вы используете звездообразную схему, она работает как положено.

Ваш первый запрос выглядит так:

DEFINE
    VAR __DS0FilterTable = 
        TREATAS({"Race 1",
            "Race 3",
            "Race 2"}, 'sim_data_norace1_not_enrolled'[race])

    VAR __DS0Core = 
        SUMMARIZECOLUMNS(
            'sim_data_norace1_not_enrolled'[school],
            'sim_data_norace1_not_enrolled'[ps_enr],
            __DS0FilterTable,
            "count_ignore_ps", 'sim_data_norace1_not_enrolled'[count_ignore_ps]
        )

    VAR __DS0PrimaryWindowed = 
        TOPN(
            1001,
            __DS0Core,
            'sim_data_norace1_not_enrolled'[school],
            1,
            'sim_data_norace1_not_enrolled'[ps_enr],
            1
        )

EVALUATE
    __DS0PrimaryWindowed

ORDER BY
    'sim_data_norace1_not_enrolled'[school], 'sim_data_norace1_not_enrolled'[ps_enr]

И твой второй:

DEFINE
    VAR __DS0FilterTable = 
        TREATAS({"School A",
            "School B",
            "School C"}, 'sim_data_norace1_not_enrolled'[school])

    VAR __DS0FilterTable2 = 
        TREATAS({"Race 1",
            "Race 3",
            "Race 2"}, 'sim_data_norace1_not_enrolled'[race])

    VAR __DS0Core = 
        SUMMARIZECOLUMNS(
            'sim_data_norace1_not_enrolled'[school],
            'sim_data_norace1_not_enrolled'[ps_enr],
            __DS0FilterTable,
            __DS0FilterTable2,
            "count_ignore_ps", 'sim_data_norace1_not_enrolled'[count_ignore_ps]
        )

    VAR __DS0PrimaryWindowed = 
        TOPN(
            1001,
            __DS0Core,
            'sim_data_norace1_not_enrolled'[school],
            1,
            'sim_data_norace1_not_enrolled'[ps_enr],
            1
        )

EVALUATE
    __DS0PrimaryWindowed

ORDER BY
    'sim_data_norace1_not_enrolled'[school], 'sim_data_norace1_not_enrolled'[ps_enr]

Обратите внимание, что два фильтра объединены во втором запросе, и, как вы указали, у вас нет «Гонка 1 не зарегистрирована».

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

Как заметил Дэвид, это похоже на функцию «автосуществования» Power BI. https://www.sqlbi.com/articles/understanding-dax-auto-exist/

ИМХО, это досадная ошибка в движке Power BI, и единственное жизнеспособное решение — создать «таблицы измерений» для атрибутов, которые необходимо фильтровать.

В этом примере я создал «таблицу измерений» под названием «Расы», связал ее с вашей таблицей и заменил существующий фильтр уровня страницы на «Расы[раса].
https://1drv.ms/u/s!AmLFDsG7h6JPiI0t_-0Wx__LjcW4EA?e=RVUrEW

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

Я предпочитаю создавать такие таблицы с помощью Power Query — полагаться на DAX более хрупко, и легко создать проблемы с циклическими зависимостями (еще одна ошибка, IMO, на другой день...).

Джеффри Ван заявил в сообщении на Reddit 3 года назад, что они планируют «исправить» это поведение. К сожалению, обновлений пока нет, и это обычная ловушка, в которую попадают люди, особенно те, кто думает, что PBI — это взять и поиграть.

davidebacci 19.08.2024 13:31

В моих реальных данных есть несколько категорий, которые я буду считать. Должен ли я составить таблицу «Расы», «Школы», «Доход» для каждой категории с объединением от 1 до многих с основной таблицей?

Victor Feagins 19.08.2024 18:09

@VictorFeagins да, именно. Вам придется быть осторожным и заменять ссылки на эти текущие поля (в фильтрах, полевых колодцах и т. д.) эквивалентными полями из новых таблиц измерений.

Mike Honey 20.08.2024 01:47

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

Требуется помощь с мерой DAX для расчета последовательного расстояния в Power BI
Как обрабатывать несколько записей измерений с одинаковым именем, даже если они имеют уникальный ключ/отношение с таблицей фактов (1:M)?
Проблема с запросом DAX: расчет текущего значения с использованием расчетного значения предыдущей строки
Извлеките дату начала и окончания отпуска по болезни в запросе мощности (пробелы и острова)
Как подсчитать, имеет ли ваш столбец одинаковые значения в другом столбце в отдельной связанной таблице
Как в Power Query рассчитать общее время, отработанное за несколько дней, на основе графика рабочих смен и без учета выходных?
Ошибка измерения Dax в таблице со 100 строками, но не в таблице с 50 строками
POWERBI – DAX – RunningTotal
Необходимо вычислить количество различных чисел и процент в одной строке, используя power bi dax
DAX рассчитывается относительно прошлого месяца, квартала и года

Похожие вопросы

Требуется помощь с мерой DAX для расчета последовательного расстояния в Power BI
Как обрабатывать несколько записей измерений с одинаковым именем, даже если они имеют уникальный ключ/отношение с таблицей фактов (1:M)?
Проблема с запросом DAX: расчет текущего значения с использованием расчетного значения предыдущей строки
Expression.Error — мы не можем преобразовать значение типа Function в тип List
Преобразование символов в дату и получение данных за последние два года
Извлеките дату начала и окончания отпуска по болезни в запросе мощности (пробелы и острова)
Игнорирование ошибки в Table.ExpandTableColumn или автоматическая замена на ноль
Как связать Power BI с рабочей областью Azure Log Analytics для анализа данных из LAW в Power BI?
Среднее время цикла в моем коде Python и виджете «Время цикла» различается
Как подсчитать, имеет ли ваш столбец одинаковые значения в другом столбце в отдельной связанной таблице