计算列与度量值
一般有两个地方可以经常输入DAX公式:计算列和度量值。
1
新建列
Power BI虽然源于Excel,但毕竟是不同的产品。我们要试图抛弃Excel中单元格思维的方式,在BI中的表是以列式存储,没有Excel中以A1单元格定位的形式,对于习惯于Excel的你可能要适应一段时间,不过这是件好事情,因为这样的方式使公式易于阅读理解。
我们点击新建列,与Excel输入公式的方法类似,在公式栏里先定义列的名称[利润],再输入“=”,并赋予它计算公式 [价格]-[成本],利润列就添加到了表中,在右边的窗口里添加的计算列有个计算的小标识。
你会发现利润列中所有的行都按照公式自动执行了计算,无一列外,这点不像Excel可以针对某个单元格编辑结果。在PP中的表,一个公式对应一整列,如果你想有例外,你需要使用If函数来编辑。
Power BI的列与Excel表中的列基本类似,不是新鲜事物,相信你试一次就可以掌握。但我要特别提醒的是你应该尽量避免使用计算列除非你不得不使用它。
因为列和度量值都可以输入DAX公式,很多初学者会疑惑,到底应该用列还是度量值。新建列的方法会增加数据的复杂程度,增加文件占内存量,减慢模型的运算速度。如果一定要新建列,也要尽量在源数据上去做。 相信我,以这样的原则去思考会帮你避免很多麻烦。
2
度量值
Power Pivot中真正的变革者是度量值,就是它被人称作“Excel 20年历史上最好的事"。我们先试着做个较简单的。与新建列的方法类似,点击新建度量值,分别输入度量值名称[城市数量],“=”,计算公式 用distintcount来计算城市列中不重复的项目。一个完整的度量值就建好了,你会看到在右边的窗口里它有个计算器符号的小标识。
你可能会有疑问,在数据透视表中,也可以通过值设置和计算字段来编辑值,度量值与他们呢又有什么区别呢? 我来举两个小例子。
第一,如果我们想计算有多少个城市(即城市的不重复计数),在值设置里面的选项是没有的,即便用计算字段里的公式也不能满足,也就是说普通数据透视表里提供的值计算能力是极其有限的。
其实Power BI很全面,在新版中添加了不重复计数选项的,以后可能还会更新更多的功能,但是我并不建议大家去使用,这个方法的度量值叫内隐式度量值,与之相对的是我们完全用公式书写的度量值,叫明确式度量值。我们应该尽量避免使用内隐式度量值,原因主要有三点:它的功能很少,满足不了太多需求;不明确的计算逻辑会使后面的数据工作出现麻烦;而且这也不会帮助我们学习DAX
第二,针对计算字段这张图,数据透视表中的值是销售量,如果老板想要表中的值为月销售量的环比增长率是多少,怎么办?可能你想到的是再做一张透视表求上个月的销售量,再通过两张透视表写Excel公式计算 (当月销售量-上月销售量)/上月销售量。
可是老板想按切片器里的城市分别计算环比增长率呢?50多个城市啊!老板还想要每个月的环比增长率,季度环比增长率,按咖啡类别不区分杯型的,按杯型不区分咖啡类别的......完了,你的心中是不是有一万只草泥马飞过......老板的要求真多。其实不是老板的要求多,这些要求完全是现实中对数据的合理需求,只不过现有的工具却无法满足,所以我们必须探索新的工具,否则真是伤不起。
针对这个例子,在PP中我们只要写一个度量值公式定义环比增长率的计算逻辑。这个度量值就可以放在任何表里,参与任何筛选分类,无论老板想要的是按咖啡种类、杯型还是城市,你只需要几秒钟的移动类别字段的工作。
即使老板想要的是季度环比增长率,我们只要把Previousmonth替换成Previousquarter。所以度量值也被称作“移动的公式”。(下面的这个公式中的[销售量]是咖啡数据表中数量列的总计=sum('咖啡数据'[数量]) ,你会发现使用度量值中的另一个好处是可以重复引用其他度量值,关于Divide、Calculate、Previousmonth函数实际操作会在后面公式章节中具体来讲,本节的目的主要为了说明概念)
现在有没有体验到"Excel20年历史上最好的事"。当你学会只要写一个公式,所有的计算都搞定,所有的需求都满足,你的职业生涯甚至你的生活都被改写了。我想你可能有过多年的Excel学习史,看过许多书籍,不断地积累实践经验,试问有哪个公式哪个技巧会让你有度量值这种颠覆性的感觉?
感谢您关注公众号PowerBI大师