PowerBI公式 Divide/If/Switch/Related/Lookupvalue
开启新的阶段。 第二阶段评为难度最易是因为他们与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仍然是我们大多时候的选择,因为他简单靠谱。例如下面这个形式,无论是在度量值还是在列中,经常会用到。
3 关系函数Related & Relatedtable
谈到关系再次把这张模型结构图拿出来,一目了然我们之前建立的是Lookup表与数据表之间的
一对多
关系。建立模型其中的一个重要意义就是可以避免
扁平化
一张表(即把所有的数据整合到一张表里),避免扁平化是一般理想情况,然而对于一些特别情况需要我们去Vlookup其他表里的数据时,应该怎么做?
Related 这个函数与Excel中的 Vlookup 功能相似。在咖啡数据表中,如果我们想添加一列获取杯型表中对应的体积值,只需要关联你想要的输出的 体积列 。是不是很简单!
反过来,如果我们到一对多的 "一" 端去Vlookup "多" 的一端呢?显然因为多的一端是多条数据,那么返回的就不可能是唯一值,而是一张表,所以我们要用 Relatedtable 来完成。例如到原材料表中添加一个 订单数量 列,Relatedtable就会把当前行的咖啡种类关联的数据表内容抓取出来,Countrows再求得这个关联表的行数,即 订单的数量 。
4 Lookupvalue
在DAX中与Vlookup最相似的函数是
Lookupvalue
。我不得不提起它,只因为它可以做到
多个项目的Vlookup
。假定我们有一张按照
咖啡种类
和
杯型
定价的价格表,想在数据表中添加一列来得到对应的价格信息。你可以先脑补一下我们在Excel中一般会想到
=Vlookup([咖啡种类],’价格表’列1:列3,3,)
来求对应
咖啡种类
的价格,但是如果还要加一个
杯型条件
就有点麻烦了,可能要用
&连接两个字段
或者使用
Index+Match
的方法来定位。现在我们有了Lookupvalue就可以做到一步到位,见下图的公式。
Lookupvalue的设计可以使我们更精准地定位搜索的目标,学会了它,我只能无情地说Vlookup是弱爆了:)。
____________________________________