【问题标题】:DAX-Power BI: How to avoid circular dependency in calculated columnDAX-Power BI:如何避免计算列中的循环依赖
【发布时间】:2021-04-16 17:27:49
【问题描述】:

我在 PowerBi Desktop 中处理报告,并且我有多个表,其中一些有一个包含值的期间列,但其中一对没有。我可以根据记录日期和另一个包含期间名称和数据范围的表来计算期间。当我试图建立基于周期的表之间的关系时,问题就出现了,因为计算的周期和关系的主表之间存在循环依赖关系。关系的想法是能够根据期间过滤报告。

为了简化数据,这就是问题所在: 我在尝试在表 Periods[PeriodName]Income[CalculatedPeriod]

之间添加关系时遇到问题(循环依赖)

我需要能够在报告视图中对收入和结果使用一个过滤器。通常,这是使用关联所有表的键来完成的。我对 PeriodsOutcome (1 : *) 之间的关系没有问题,因为在表结果中,PeriodName 不是计算列。但是,当我尝试添加与 Income 列 (1 : *) 的关系时,会检测到循环依赖。我知道是因为 [CalculatedPeriod] 是使用 Periods 表计算的,但我不知道如何解决这个问题

期间

PeriodName  StartDate    FinishDate
Period1     2020-Jan-01  2020-Jan-15
Period2     2020-Jan-15  2020-Jan-31
Period3     2020-Feb-01  2020-Feb-28
Period4     2020-Mar-01  2020-Mar-15
Period5     2020-Mar-15  2020-Abr-2

收入

Date        Value [CalculatedPeriod]
2020-Jan-09 25000 Period1
2020-Jan-11  5000 Period1
2020-Jan-28  3000 Period2
2020-Feb-14 18000 Period3
2020-Mar-14 12000 Period4

CalculatedPeriod= CALCULATE(VALUES(Periods[PeriodName]),FILTER(Periods,[Date]>=Periods[StartDate] && [Date] <= Periods[FinishDate]))

结果

Date        Value  Period
2020-Jan-07 16000  Period1
2020-Jan-17 11000  Period2
2020-Jan-31  5000  Period3
2020-Feb-14 13000  Period3
2020-Mar-14  9000  Period4

数据有很多其他列,并且周期列应该用作过滤器,但如果我无法与所有表创建关系,则过滤器将仅适用于相关表并且将始终显示来自不相关表的总数。

(Filter: No filters)
Income     Outcome
63000      54000

(Filter: Periods[PeriodName:"Period3"])
Income     Outcome
63000      18000

(Filter: Periods[PeriodName:"Period5"])
Income     Outcome
63000      

我该如何解决这个问题?

到目前为止,我可能认为的唯一解决方法是复制周期表。

谢谢

【问题讨论】:

  • 您需要定义日历表,存储此类日期和期间,然后将其链接到两个表。

标签: powerbi dax business-intelligence


【解决方案1】:

您可以使用 DISTINCT,以一个非常简单的模型为例,如果有 2 个表 A 和 B。假设 B 是使用 VALUES ( A[Column] ) 创建的,然后您在 A 和 B 之间建立关系这是不允许的,因为 VALUES 取决于由于无效的关系(由于缺少值而导致)而添加到关系一侧的自动空白行,这意味着 A 可能包含由于无效关系而添加的空白行,所以如果使用 VALUES 可以建立关系,那么 B 将依赖于 A,而 A 将依赖于 B。

CalculatedPeriod =
CALCULATE (
    DISTINCT ( Periods[PeriodName] ),
    FILTER (
        Periods,
        [Date] >= Periods[StartDate]
            && [Date] <= Periods[FinishDate]
    )
)

【讨论】:

  • 谢谢!这样就解决了问题,这些信息对于理解循环依赖的原因非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多