Power BI, почему определяется круговая зависимость - PullRequest
0 голосов
/ 31 октября 2019

Не могли бы вы объяснить, почему я сталкиваюсь с этим предупреждающим сообщением о круговой зависимости, когда пытаюсь создать связь между измерением #product (или #region) и таблицей #bridge, которая является декартовой для области продукта x региона?

Я связал #bridge с продажами и бюджетом с помощью одного столбца. P @ G - объединение продукта и региона.

Скачать файл можно здесь: PBIX

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

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

Я изменил исходный код таблицы мостов:

ADDCOLUMNS (
    CROSSJOIN ( '#product', '#region' ),
    "P@R", COMBINEVALUES("@",'#product'[product], '#region'[region]),
    "sales", CALCULATE ( SUM ( Budget[target] ) ),
    "IsSale", IF ( CALCULATE ( SUM ( Budget[target] ) ) > 0, "Yes", "No" )
)

На что-то попроще:

ADDCOLUMNS (
    CROSSJOIN ( '#prodact', '#region' ),
    "P@R", COMBINEVALUES("@",'#prodact'[product], '#region'[region])
)

Я изменил код DAX таблицы мостов так, чтобычтобы оставить только столбцы, необходимые для объединений. Столбцы, которые мне нужно было рассчитать, я добавил как вычисляемые столбцы. Вот и все. По чистой случайности я узнал об этом, экспериментируя с ним.

Для игры с бридж-столами я рекомендую статью Альберто Феррари: https://www.sqlbi.com/articles/avoiding-circular-dependency-errors-in-dax/. Это вдохновило меня на решение этой проблемы. Из текста Альберто я понял, что функции VALUES и ALL не годятся для таблиц моста. Он упоминает проблему использования функции CALCULATE внутри таблиц DAX моста. Функция как-то переводится в смесь функций ALL и FILTER. Вместо VALUE и ALL используйте функции DINSTINCT и ALLNOBLANKROW.

Рабочий PBIX файл. Ура!

0 голосов
/ 01 ноября 2019

Быстрое и грязное решение заключается в создании новых версий #product и #region с использованием VALUES. Вероятно, это не лучший способ сделать это ...

NewProduct = VALUES('#product'[product])

Эти новые таблицы могут быть связаны с #bridge с отношением 1: * и, таким образом, могут использоваться в качестве среза на панели инструментов.

Альберто написал об этом в блоге sqlbi: Циркулярная зависимость в блоге sqlbi

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...