Неактивные отношения, влияющие на меры - PullRequest
1 голос
/ 20 апреля 2019

У меня есть следующие таблицы и отношения в нашем отчете pbix: enter image description here

По некоторым очевидным причинам мне нужно иметь связь (неактивна) между датами [дата] и Таблица2 [T2Date].Однако это приводит к тому, что флуктуация данных измеряет «Общая сумма» в таблице 1.

Вот несколько скриншотов: enter image description here

До родства (Даты [дата] - Таблица2 [T2Date]):

enter image description here

После родства (Даты [дата] - Таблица2 [T2Date]):

enter image description here

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

Для справки прилагаю отчет pbix.

https://drive.google.com/open?id=1XknisXvElS6uQN224bEcZ_biX7m-4el4

Любая помощь будет оценена :)

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Ссылка, которую дает @MikeHoney, содержит действительно полезную информацию о тонкостях отношений и имеет отношение к этой проблеме (смотрите!), Но эта проблема в конечном счете не связана, в частности, с двунаправленной фильтрацией. Фактически, я могу воспроизвести это с этой упрощенной структурой отношений:

Relationship Diagram

Ключевой момент, на который следует обратить внимание, заключается в том, что когда вы присоединяете Table2 к Dates, поскольку Table2 содержит T2Date значений, которые не соответствуют ни одному Date[date], это создает дополнительную строку в Dates с пустой датой, которую вы можете заметить в своем фильтре на 6. Year, когда это отношение существует (активное или неактивное) Отфильтровывая, что этот пробел в фильтре 6. Year будет работать, за исключением того, что по вашему показателю вы используете ALL(Dates) для удаления всей фильтрации, выполненной для этой таблицы.

Существует несколько способов устранения этого несоответствия, самым простым из которых является замена ALL на ALLNOBLANKROW. Если вы используете ALLSELECTED, это также будет работать в сочетании с фильтрацией пробелов в вашем фильтре уровня отчета на 6. Year.

Очистив некоторые элементы, не относящиеся к этому контексту, и изменив ALL на ALLNOBLANKROW, ваш общий показатель можно записать так:

ALLNOBLANKROW =
VAR EndServiceDate =
    MAX ( Dates[Date] )
RETURN
    CALCULATE (
        SUM ( Table1[Net Amount] ),
        FILTER (
            ALLNOBLANKROW ( Dates ),
            Dates[Date] <= EndServiceDate
        ),
        Table1[Flag2] = 1,
        Table1[Flag] = TRUE ()
    )

Результаты без фильтра 6. Year и с двумя мерами, один с использованием ALL, а другой с ALLNOBLANKROW:

Comparison Table

Обратите внимание, что каждая строка в столбце ALL была уменьшена на -7,872.01. Это сумма всех значений Net Amount, которые не соответствуют ни одной дате в таблице Dates. Если вы удалите отношение с Dates[date] до Table2[T2Date], то пустая строка больше не будет существовать, и оба они будут соответствовать версии ALLNOBLANKROW.

2 голосов
/ 22 апреля 2019

Установка направления перекрестного фильтра на Обе в любых отношениях немного рискованны - вы по существу передаете управление проектами запросов времени выполнения роботам Power BI.Тогда есть риск, что они придумают «креативный» дизайн запроса, который будет неожиданным.

Есть некоторое понимание того, как это происходит в недавнем выступлении Альберто Феррари:

https://www.sqlbi.com/tv/understanding-relationships-in-power-bi/

Я уверен, что вы согласитесь, что это довольно ужасно.

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

...