DAX:优雅而神秘
作为DAX用户,使用DAX有点像玩魔兽争霸:易于上手,难于精通。所谓易于上手,是指只要用户懂一点Excel函数,那么他可以很快用DAX构建一些基本数据模型,大约覆盖一半以上的业务场景;而难于精通之处在于,其核心理念与其他语言有很大差别:calculate函数、上下文概念、扩展表等,在其他语言中无法找到对应概念,可以说是一种“孤岛式知识”。即使懂SQL、PowerQuery的人、甚至C#程序员,在深入学习DAX时,都会感到吃力:无法把先前的经验复用到DAX中。
从语言设计角度来说,DAX是优雅的:短短几行代码,就可以实现复杂的查询,同时实现筛选器、切片器等复杂功能。然而优雅是有代价的。一方面,DAX自带的函数相当于黑箱,而且每个函数有许多隐晦之处,我们很难知道自己的代码真正是如何被执行的(“Explicit is better than implicit!”)。另一方面,DAX不支持自定义函数,这使得许多问题只有少数的几种解法(你无法在DAX中自定义循环函数、递归函数等)。而且,Power BI、Excel中虽然提供了DAX intellisense,但是却不支持debug,出现错误后我们无法像C#那样逐步调试,这无疑增加了用户的心智负担。
整体而言,DAX是优雅而神秘的,值得学习,可以拓展思维。
另:M函数的设计与DAX形成了鲜明对比:M函数的语法类似C#(Linq)与F#(let .. in ..),作为C#、F#程序员,我更喜欢M函数。
有关键情节透露