【发布时间】:2019-09-04 15:39:21
【问题描述】:
我有一个函数将查看“项目提交上限”列中的空字段,并查找具有相同 ID 和下一个较早日期的值,并为“项目提交上限 NoNulls”列提供该值。 DAX 不会递归地执行此操作,因此如果连续有 2 个空值,我会得到一个空白。在另一种语言中,一个简单的 while 循环 (while value is null do: XYZ) 可以解决这个问题,但 DAX 不支持 For/While 循环?
如何让 DAX 函数正常工作以应用填充的值并继续运行直到不再有空值?
(可选)我如何强制它运行 X 次(可能是 10 次)?这不是一个很好的解决方案,但可以完成工作
下面的示例表被过滤为仅显示一个 2 个 ID,不同 ID 的记录在此处显示的记录之间,因此我无法执行类似 excel 的功能“从下面的行中取值”
这是将填充先前值的DAX函数(如上图所示):
ProjectCommitCap_NoNulls =
IF (
ISBLANK ( 'Project Story Data'[Projected Commitments Cap] ),
LOOKUPVALUE (
'Project Story Data'[Projected Commitments Cap],
'Project Story Data'[ID], 'Project Story Data'[ID],
'Project Story Data'[Date of Data], CALCULATE (
MAX ( 'Project Story Data'[Date of Data] ),
FILTER (
'Project Story Data',
'Project Story Data'[ID] = EARLIER ( 'Project Story Data'[ID] )
&& 'Project Story Data'[Date of Data]
< EARLIER ( 'Project Story Data'[Date of Data] )
)
)
),
'Project Story Data'[Projected Commitments Cap]
)
我需要看起来像这样(NoNulls 中的所有值都要填写):
【问题讨论】:
-
如果您可以利用 Power Query/M 而不是 DAX,它有一个“填充”转换,可以完全满足您的需求。这样做会简单得多。
-
嘿,greggyb,不幸的是,想要的值几乎永远不会直接高于或低于需要填写的行
-
不是先按[ID]和[Date of Data]排序吗? M 中的表可以有明确的排序,这与表格引擎中的不同。