13

I have a table that has values for quarters and I need to add a new column that gives me the last not null value as last quarter. For example

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  
4

4 回答 4

19

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

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

于 2015-07-14T18:31:20.933 回答
8

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

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

应用于您的特定情况,必要的代码将是:

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

请注意,空合并运算符是Power Query的新增功能。它尚未正式记录,可能并非在所有环境中都可用。

信息取自这篇博文

于 2020-09-25T17:38:40.730 回答
0

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

或默认值:

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

于 2020-06-02T23:16:57.593 回答
0

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

这是一个似乎避免处理整个列表的函数,除了第一个非空项目:

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

于 2021-02-25T07:23:47.163 回答