【发布时间】:2019-10-31 20:09:34
【问题描述】:
您能否解释一下为什么当我尝试在维度#product(或#region)和作为产品 x 区域的笛卡尔坐标的#bridge 表之间创建关系时遇到此循环依赖的警告消息?
我已通过单列 P@G 将 #bridge 与 Sales and Budget 连接起来,女巫是产品和区域的串联。
在此处下载文件:PBIX
【问题讨论】:
标签: powerbi relationship dax star-schema
您能否解释一下为什么当我尝试在维度#product(或#region)和作为产品 x 区域的笛卡尔坐标的#bridge 表之间创建关系时遇到此循环依赖的警告消息?
我已通过单列 P@G 将 #bridge 与 Sales and Budget 连接起来,女巫是产品和区域的串联。
在此处下载文件:PBIX
【问题讨论】:
标签: powerbi relationship dax star-schema
解决方案很简单。不要在 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 文件。万岁!
【讨论】:
一个快速而肮脏的解决方案是使用VALUES 创建#product 和#region 的新版本。这可能不是最好的方法......
NewProduct = VALUES('#product'[product])
这个新表可以通过 1:* 关系链接到 #bridge,因此可以用作仪表板上的切片器。
Alberto 在 sqlbi 博客上写过这个:Circular dependency sqlbi blog
【讨论】: