我有一个包含四分之一值的表,我需要添加一个新列,它给出了上一季度的最后一个非空值。例如
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
答案 0 :(得分:11)
在向表中添加自定义列时可以使用几个公式(可从“变换”功能区选项卡访问)。这是一个:
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))
答案 1 :(得分:0)
我认为有点晚了,但是我也在寻找比以下更好的解决方案: List.First(List.RemoveNulls({list}))
或默认值:
List.First(List.RemoveNulls(List.Combine {{list},{defaultValue}}})))
答案 2 :(得分:0)
您可以尝试空合并运算符(??)。除非它为null,否则以下两行都达到返回ValueA
的相同效果,在这种情况下,返回ValueB
。
if ValueA <> null then ValueA else ValueB
ValueA ?? ValueB
根据您的具体情况,必要的代码将为:
[Q4] ?? [Q3] ?? [Q2] ?? [Q1]
请注意,空合并运算符是Power Query的new addition。该文件尚未正式记录,可能not在所有环境中都可用。
信息取自this blog post。
答案 3 :(得分:0)
使用 List.RemoveNulls 让我感到困扰,因为它似乎做了多余的工作。
这是一个似乎避免处理整个列表的函数,超出第一个非空项目:
coalesce = each List.First(List.RemoveFirstN(_, each _ = null), null)
答案 4 :(得分:-3)
要找到非空的单行范围的最右边的值,您有两个方法
如果您知道中间没有空白值,则计算所有非空白并使用此值偏移范围原点
=OFFSET(C2,0,COUNTA(C2:F2)-1)
如果可能存在散布的空值,则在给定范围内使用查找以修改所有非空白,并再次使用给定范围作为结果范围
=LOOKUP(2,1/(C2:F2<>""),C2:F2)