用于根据同一列的前一行填充列值的 DAX
DAX for populating column value based on previous row of same column
我正在尝试复制这个 Excel 公式或 for 循环,它根据同一列的前一行值计算当前行值。
当value = 1时,Result = Rank * 1
否则,结果 = 排名 * 之前的结果
| Value | Rank | Result |
| ----- | ---- | ------ |
| 1 | 3 | 3 |
| 2 | 2 | 6 |
| 3 | 1 | 6 |
我已经尝试生成一个系列 table 来获取值和排名列,但我无法引用现有的结果列来更新它们。有没有一种方法可以使用 DAX 来获得动态行数?
可以做到,但是你需要跳出递归的心态。请注意,即使 [Value]
等于 1,我也做了 [Rank]
,因为在这种情况下 [Rank] * [Value]
等于 [Rank]
(值等于 1,对吗?)。
Result =
IF (
Table[Value] = 1,
[Rank],
[Rank] *
PRODUCTX (
FILTER ( Table, Table[Value] < EARLIER ( Table[Value] ) ),
[Rank]
)
)
编辑:
前一个过于复杂:
Result =
CALCULATE (
PRODUCT ( [Rank] ),
FILTER ( Table, [Value] <= EARLIER ( [Value] ) )
)
我正在尝试复制这个 Excel 公式或 for 循环,它根据同一列的前一行值计算当前行值。
当value = 1时,Result = Rank * 1
否则,结果 = 排名 * 之前的结果
| Value | Rank | Result |
| ----- | ---- | ------ |
| 1 | 3 | 3 |
| 2 | 2 | 6 |
| 3 | 1 | 6 |
我已经尝试生成一个系列 table 来获取值和排名列,但我无法引用现有的结果列来更新它们。有没有一种方法可以使用 DAX 来获得动态行数?
可以做到,但是你需要跳出递归的心态。请注意,即使 [Value]
等于 1,我也做了 [Rank]
,因为在这种情况下 [Rank] * [Value]
等于 [Rank]
(值等于 1,对吗?)。
Result =
IF (
Table[Value] = 1,
[Rank],
[Rank] *
PRODUCTX (
FILTER ( Table, Table[Value] < EARLIER ( Table[Value] ) ),
[Rank]
)
)
编辑:
前一个过于复杂:
Result =
CALCULATE (
PRODUCT ( [Rank] ),
FILTER ( Table, [Value] <= EARLIER ( [Value] ) )
)