前些天,群里有朋友抛了个图出来:
问,这些公式里怎么这么多问号?有1个(?)的,还有2个(??)的,还有3个(? ??)的……
其实,这个问题并不复杂,完全可以用已学过的知识来替代!以下分两种情况来进行说明:
- 1个问号 -
如:c{0}? ,这其实是Power Query用于简化列表取值的容错方法。
因为,对一个列表取某个位置的,非常有可能这个列表根本不存在这个位置的值,比如,列表c可能是空的,那你要取第1个值(c{0}),就会出错:
加上问号,将实现这种容错机制,在取不到值时,返回null:
实际上,这个可以写成:
代码语言:javascript复制try c{0} otherwise null
当然,如果非要深究两者有什么差异,还是有的:
比如,取1个值,而这个值是存在的,但是一个错误值
此时,两者是有差别的,加问号结果下图所示:
而用try...otherwise...,则会屏蔽掉该错误:
- 2个问号 -
如:x??y ,其实,这等同于
代码语言:javascript复制if x=null then y else x
然后,1个的和2个的结合在一起:c{0}? ??y,直接按上面的两种情况转换,即相当于:
代码语言:javascript复制if (try c{0} otherwise null)=null then y else c{0}
很长是不是?写成了问号感觉能省很多事,是不是?其实没这么复杂,真理解了这也就是:
代码语言:javascript复制try x otherwise y
说到底,就是if...then...else...和try...otherwise...两个简单写法的一种简写方式(专业称谓:语法糖),关于类似的问题还可以参考文章《什么叫“语法糖”?搞懂才不怕别人装13!| 附微软官方M语法及函数手册下载》。
日常工作中我其实一般不建议使用太多语法糖的写法,因为这一时之便其实省不了太多功夫,但对于步骤公式(代码)的阅读性却影响很大,尤其是在相关内容要和其他人进行分享时,使用传统直接的写法,更有利于互相之间的沟通和工作的开展。