Power BI为什么检测到循环依赖

时间:2019-10-31 20:09:34

标签: powerbi relationship dax star-schema

当我尝试在维度#product(或#region)与作为产品x区域的笛卡尔坐标的#bridge表之间创建关系时,您能否解释为什么会遇到此循环依赖警报消息?

我已将#bridge与Sales and Budget连接起来,因为P @ G单列是产品和地区的串联。

在此处下载文件:PBIX

enter image description here

2 个答案:

答案 0 :(得分:1)

一种快速而肮脏的解决方案是使用#product创建到#regionVALUES的新版本。这可能不是最好的方法...

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

此新表可以以1:*关系链接到#bridge,因此可以用作仪表板上的切片器。

Alberto在sqlbi博客上写过有关此内容的文章:Circular dependency sqlbi blog

答案 1 :(得分:0)

解决方案很简单。不要在DAX网桥中使用CALCULATE函数。而是将所有这些列与计算列稍后添加到同一表中。

我将桥接表的原始代码更改为:

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代码,以便仅保留连接所需的列。我需要计算的列已添加为计算列。就是这样。碰巧的是,我在进行实验时发现了这一点。

对于玩桥牌游戏,我推荐阿尔贝托·法拉利(Alberto Ferrari)的这篇文章:https://www.sqlbi.com/articles/avoiding-circular-dependency-errors-in-dax/。它启发了我解决问题。我从Alberto的书中得到的是,VALUES和ALL函数对桥表不利。他提到在桥DAX表中使用CALCULATE函数的问题。该函数以某种方式转换为ALL和FILTER函数的混合。代替VALUE和ALL,使用DINSTINCT和ALLNOBLANKROW函数。

有效的PBIX文件。哇!