【问题标题】:Power BI why circular dependency is detectedPower BI 为什么检测到循环依赖
【发布时间】:2019-10-31 20:09:34
【问题描述】:

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

我已通过单列 P@G 将 #bridge 与 Sales and Budget 连接起来,女巫是产品和区域的串联。

在此处下载文件:PBIX

【问题讨论】:

    标签: powerbi relationship dax star-schema


    【解决方案1】:

    解决方案很简单。不要在 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 文件。万岁!

    【讨论】:

      【解决方案2】:

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

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

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

      Alberto 在 sqlbi 博客上写过这个:Circular dependency sqlbi blog

      【讨论】:

      • 谢谢你,奥斯卡拉尔。我设法避免了肮脏的解决方案。我想添加一个链接,指向我在回答中发布的 Alberto Ferrari 的另一篇文章。
      • 不知何故,我错过了通过投票来感谢您的回答。感谢您的提示。
      • 干杯,考虑到解决方案的可怕性质,不确定是否值得投票......但谢谢:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多