Решение простое. Не используйте функцию 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 файл. Ура!