loops - 为计算列循环工作 DAX 函数
问题描述
我有一个函数将查看“项目提交上限”列中的空字段,并查找具有相同 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 中的所有值):
解决方案
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] )
&& NOT ( ISBLANK ( 'Project Story Data'[Projected Commitments Cap] ) )
&& 'Project Story Data'[Date of Data]
< EARLIER ( 'Project Story Data'[Date of Data] )
)
)
),
'Project Story Data'[Projected Commitments Cap]
)
正如@greggyb 指出的那样,在查询编辑器中使用“填充”转换是一个更简单的解决方案。
继续使用 DAX,您可能会发现此问答也很有用: 返回由另一列排序的最高值
推荐阅读
- chart.js - 带有 2 个 y 轴的 Chart.js
- python - 使用 python 创建条形图,每周显示数据
- javascript - 无法使用 ReactJS 在输入字段中输入文本值
- html - 如何在 Shiny 中默认选择 verbatimTextOutput 中的文本?
- laravel - paytm pg 错误代码 419(页面已过期),即使表单数据在交易中成功
- r - R one-liner 用于反转列表的嵌套顺序?
- google-sheets - 如何根据 Google 表格中相邻列中的值返回一系列单元格
- java - 按下按钮时没有任何反应
- java - 使用 Jackson 库时如何实现错误处理程序
- reactjs - 如何使用 Jest 使用新的 React Router Hooks 模拟 history.push