如何在电源查询中执行 COALESCE?
Posted
技术标签:
【中文标题】如何在电源查询中执行 COALESCE?【英文标题】:How can I perform COALESCE in power query? 【发布时间】:2015-07-14 11:17:22 【问题描述】:我有一个包含季度值的表,我需要添加一个新列,该列为我提供上一季度的最后一个非空值。例如
ID | Project | Q1 | Q2 | Q3 | Q4 | Current Quarter Value
1 | bal bal | 23 | 32 | 34 | null | 34
2 | cuz cuz | 43 | 56 | null | null | 56
【问题讨论】:
【参考方案1】:在向表中添加自定义列时可以使用几个公式(可从“转换”功能区选项卡访问)。这是一个:
if [Q4] <> null then [Q4] else if [Q3] <> null then [Q3] else if [Q2] <> null then [Q2] else [Q1]
如果不想写这么多 if 语句,可以将列添加到列表中,过滤掉空值:
List.Last(List.Select([Q1], [Q2], [Q3], [Q4], each _ <> null))
【讨论】:
失败的原因是什么?您的查询是什么样的?您能否复制高级编辑器中显示的查询代码? 最终使用了嵌套的 if 解决方案...不实用,但它有效,谢谢! 我会使用List.Last(List.RemoveNulls([Q1], [Q2], [Q3], [Q4]))
如果我能给 +10,我会的。谢谢!
@MikeHoney 为什么是List.Last
?为什么最后,而不是第一个。如果不为空,不应该是 [Q1] 吗?或者如果它不为空,Last sellect Q4 不?【参考方案2】:
您可以尝试 null 合并运算符 (??)。以下两行都达到了返回ValueA
的相同效果,除非它为null,在这种情况下返回ValueB
。
if ValueA <> null then ValueA else ValueB
ValueA ?? ValueB
适用于您的具体情况,必要的代码是:
[Q4] ?? [Q3] ?? [Q2] ?? [Q1]
请注意,空合并运算符是 Power Query 的 new addition。它尚未正式记录,not 可能在所有环境中都可用。
信息取自this blog post。
【讨论】:
【参考方案3】:我认为有点晚了,但我也在寻找比以下更好的解决方案: List.First( List.RemoveNulls( list ) )
或默认值:
List.First(List.RemoveNulls(List.Combine list , defaultValue ) ) )
【讨论】:
【参考方案4】:使用 List.RemoveNulls 让我感到困扰,因为它似乎做的工作超出了必要。
这是一个似乎避免处理整个列表的函数,除了第一个非空项目:
coalesce = each List.First(List.RemoveFirstN(_, each _ = null), null)
【讨论】:
以上是关于如何在电源查询中执行 COALESCE?的主要内容,如果未能解决你的问题,请参考以下文章
如何在本机查询中使用 NVL 或 COALESCE 获取 Spring Data JPA 中的值列表