首发于 PowerBI大师
PowerBI公式 Divide/If/Switch/Related/Lookupvalue

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是弱爆了:)。
____________________________________





编辑于 2020-04-02 22:28

文章被以下专栏收录