开启新的阶段。第二阶段评为难度最易是因为他们与Excel的函数基本一样,如果你会用Excel中的If和Vlookup,这些就算不上新的知识,然而这最简单的往往也是最好用的。
1 Divide 安全除法
这是一个非常常用的函数,原因是我们做数据分析的很多指标都是相对值,环比增长率、利润率、存货周转率、离职率、借款逾期率...它们的数学表达式都是除法计算。当然我们一般可以用运算符“/”来完成,Divide(分子,分母)可谓安全除法,它的好处是可以在分母为零时防止出现报错信息。比如一个简单的除法计算,年比年增长率=(当年销售量-去年销售量)/去年销售量,写两个公式来对比:
由于没有2014年的数据,2015年的增长率出现了分母为零的情况,报出了Infinity无限大。如果用Divide,则可以返回空。
不要小看了这个空白,PowerBI的图表与Excel的数据透视表一样,默认会隐藏那些没有数据的项目。如果我们分开两张表做,你会发现带Divide的年比年增长率会隐藏2015年的报错数据,这在很多时候是我们非常需要的形式。如果没有Divide,你可能要绕个弯路,使用IF或IFERROR来达到同样的效果。
Divide的表达式除了分子和分母,其实还有一个可选项,如果不选则默认返回空。我们也可以特别设定,比如输入1,则当0是分母时返回1。
自从学会了Divide,我很少使用“/”来做除法题。
2 IF/SWITCH
IF的应用与Excel中的IF基本一样。此外它同Divide类似,最后一个参数否也是可选项,如果省略的话,则默认返回空。
IF公式用起来经常让人头疼的地方是当有特别多的条件时,外套套外套。比如我们的区域负责人名单表中有负责人的年龄,可以按照区间做一个年龄段的分层,4个分层就需要4个If嵌套来完成。这个时候Switch很好地解决了去外套的问题。如下图右,我们用Switch True的方法来定义不同条件的返回值,明显使表达式更清晰。
如果是以一个准确值来判断,Switch的用法还可以直接引用表达式:
DAX针对特别情况设计的高级公式有很多,没有最好的,只有最适合的。尽管我们学会了Divide和Switch,IF仍然是我们大多时候的选择,因为他简单靠谱。例如下面这个形式,无论是在度量值还是在列中,经常会用到。
2 关系函数Related & Relatedtable
谈到关系再次把这张模型结构图拿出来,一目了然我们之前建立的是Lookup表与数据表之间的一对多关系。建立模型其中的一个重要意义就是可以避免扁平化一张表(即把所有的数据整合到一张表里),避免扁平化是一般理想情况,然而对于一些特别情况需要我们去Vlookup其他表里的数据时,应该怎么做?
Related这个函数与Excel中的Vlookup功能相似。在咖啡数据表中,如果我们想添加一列获取杯型表中对应的体积值,只需要关联你想要的输出的体积列。是不是很简单!
反过来,如果我们到一对多的"一"端去Vlookup"多"的一端呢?显然因为多的一端是多条数据,那么返回的就不可能是唯一值,而是一张表,所以我们要用Relatedtable来完成。例如到原材料表中添加一个订单数量列,Relatedtable就会把当前行的咖啡种类关联的数据表内容抓取出来,Countrows再求得这个关联表的行数,即订单的数量。
3 Lookupvalue
在DAX中与Vlookup最相似的函数是Lookupvalue。我不得不提起它,只因为它可以做到多个项目的Vlookup。假定我们有一张按照咖啡种类和杯型定价的价格表,想在数据表中添加一列来得到对应的价格信息。你可以先脑补一下我们在Excel中一般会想到=Vlookup([咖啡种类],’价格表’列1:列3,3,)来求对应咖啡种类的价格,但是如果还要加一个杯型条件就有点麻烦了,可能要用&连接两个字段或者使用Index Match的方法来定位。现在我们有了Lookupvalue就可以做到一步到位,见下图的公式。
Lookupvalue的设计可以使我们更精准地定位搜索的目标,学会了它,我只能无情地说Vlookup是弱爆了:)。