如何在电源查询中执行 COALESCE?

How can I perform COALESCE in power query?

我有一个具有季度值的 table,我需要添加一个新列,为我提供上个季度的最后一个非空值。例如

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  

将自定义列添加到 table 时可以使用几个公式(可从转换功能区选项卡访问)。这是一个:

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))

我认为有点晚了,但我也在寻找比以下更好的解决方案: List.First( List.RemoveNulls( { 列表 } ) )

或默认值:

List.First( List.RemoveNulls( List.Combine { { list }, { defaultValue } } ) )

您可以尝试 空合并运算符 (??)。以下两行实现返回 ValueA 的相同效果,除非它为空,在这种情况下返回 ValueB

if ValueA <> null then ValueA else ValueB
ValueA ?? ValueB

适用于您的具体情况,必要的代码为:

[Q4] ?? [Q3] ?? [Q2] ?? [Q1]

请注意,空合并运算符 new addition to Power Query. It has not been officially documented yet and may not 在所有环境中都可用。

信息取自this blog post

使用 List.RemoveNulls 让我很困扰,因为它似乎做了比必要更多的工作。

这是一个似乎可以避免处理整个列表的函数,超出第一个非空项:

合并 = 每个 List.First(List.RemoveFirstN(_, 每个 _ = null), null)