DAX-Power BI:如何避免计算列中的循环依赖
DAX-Power BI: How to avoid circular dependency in calculated column
我在 PowerBi Desktop 中处理一份报告,我有多个 tables,有些有一个带有值的期间列,但其中一对没有。我可以根据记录日期和另一个具有期间名称和数据范围的 table 来计算期间。由于计算周期与关系的主要 table 之间的循环依赖性,当我试图根据周期建立 table 之间的关系时,问题就来了。关系的想法是能够根据期间过滤报告。
简化数据,就是这个问题:
我在尝试添加 table Periods[PeriodName] 和 Income[CalculatedPeriod][= 之间的关系时遇到问题(循环依赖) 15=]
我需要能够在报表视图中对收入和结果使用一个过滤器。通常,这是使用关联所有 table 的键来完成的。我在处理 Periods 和 Outcome (1 : *) 之间的关系时没有问题,因为在 table 结果中,PeriodName 不是计算出来的柱子。但是,当我尝试添加与 Income 列 (1 : *) 的关系时,检测到循环依赖。我知道是因为 [CalculatedPeriod] 是使用 Periods table 计算的,但我不知道如何解决这个问题
经期
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
数据有很多其他列,期间列应该用作过滤器,但如果我不能与所有 table 建立关系,过滤器将只适用于table 相关,并且将始终显示不相关 table 的总数。
(Filter: No filters)
Income Outcome
63000 54000
(Filter: Periods[PeriodName:"Period3"])
Income Outcome
63000 18000
(Filter: Periods[PeriodName:"Period5"])
Income Outcome
63000
我该如何解决这个问题?
到目前为止,我可能认为的唯一解决方法是复制句点 table。
谢谢
您可以使用 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]
)
)
我在 PowerBi Desktop 中处理一份报告,我有多个 tables,有些有一个带有值的期间列,但其中一对没有。我可以根据记录日期和另一个具有期间名称和数据范围的 table 来计算期间。由于计算周期与关系的主要 table 之间的循环依赖性,当我试图根据周期建立 table 之间的关系时,问题就来了。关系的想法是能够根据期间过滤报告。
简化数据,就是这个问题: 我在尝试添加 table Periods[PeriodName] 和 Income[CalculatedPeriod][= 之间的关系时遇到问题(循环依赖) 15=]
我需要能够在报表视图中对收入和结果使用一个过滤器。通常,这是使用关联所有 table 的键来完成的。我在处理 Periods 和 Outcome (1 : *) 之间的关系时没有问题,因为在 table 结果中,PeriodName 不是计算出来的柱子。但是,当我尝试添加与 Income 列 (1 : *) 的关系时,检测到循环依赖。我知道是因为 [CalculatedPeriod] 是使用 Periods table 计算的,但我不知道如何解决这个问题
经期
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
数据有很多其他列,期间列应该用作过滤器,但如果我不能与所有 table 建立关系,过滤器将只适用于table 相关,并且将始终显示不相关 table 的总数。
(Filter: No filters)
Income Outcome
63000 54000
(Filter: Periods[PeriodName:"Period3"])
Income Outcome
63000 18000
(Filter: Periods[PeriodName:"Period5"])
Income Outcome
63000
我该如何解决这个问题?
到目前为止,我可能认为的唯一解决方法是复制句点 table。
谢谢
您可以使用 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]
)
)