在此,借助Power BI 极客的讲解,在自己复习记录一遍。
烂程序员关心的是代码,好程序员关心的是数据结构和他们之间的关系
— Linux 创始人 Torvalds
模型,我之前的理解和学习中,一直认为模型就是算法模型,诸如回归、、决策树、朴素贝叶斯等模型;而现在在Power BI中说的模型更多的是指数据模型。
数据模型是现实世界的抽象。换句话说,数据模型就是表与表之间构成的各种关系。有了关系之后,就可以实现多表联动。
模型又按其结构形状,分星型模型和雪花模型,不同的模型对业务的适应度也不相同。
前面也说了,模型就是表与表之间的关系构成。最简单模型的就是单个表;多个表之间的关系有三种,一对一、一对多、多对一,还有种特殊的多对对。都可以在Power BI的模型界面进行设计。
这里介绍的函数基本都是和Excel相对应的一些函数,只是对一些又特殊区别的做一点补充解释。
函数 | 说明 | 示例 | 备注 |
---|---|---|---|
date | 返回时间格式 | date(2023,2,28) | / |
day/month/year/QUARTER | 返回相应的天/月/年/季度 | DAY(“2022-2-23”) | / |
HOUR/MINUTE/SECOND | 返回相应的小时/分钟/秒 | SECOND(“2022-2-23 23:25:36”) | / |
now/today | 返回当前时间 | today() | now返回时间;today只显示日期 |
EDATE | 返回按指定月数平移后的日期 | EDATE(today(),2) | 第二个参数可以为负,表示前n月 |
EOMONTH | 返回指定月数平移后的月份的最后一天 | EOMONTH(today(),2) | 它和edate的区别在于它返回该月的最后一天 |
DATEVALUE | 将文本格式的日期转换为日期时间格式 | DATEVALUE(“2022-2-23”) | / |
WEEKDAY | 返回当前日期对应的星期数 | WEEKDAY(today(),3) | 第二个参数表示每周从星期几开始算,1代表周日 |
为了便于在公式内部操作模型关系,DAX 提供了两个非常有用的函数:RELATED 和 RELATEDTABLE
换句话说,就是当你在一个表想使用另一个表的列时,就需要这个两个函数的帮助,前提是两个表构建了数据关系。
两者的区别是RELATED 返回列,RELATEDTABLE返回表
DAX 根据运算符的需要执行数据类型的自动转换。但还是提供了一组函数用来执行显示的类型转换。
DAX 中的文本函数都与 Excel 差不多, 这里不在做详细解释,只列举函数:
聚合函数在Excel中也是最常见的,这里不在赘述,常见的聚合函数有:SUM、AVERAGE、MIN、MAX、COUNT 、COUNTBLANK (返回列中空单元格的数量)、COUNTROWS (返回表中的行数)、DISTINCTCOUNT (返回列中非重复值的个数)等。
除了上述的常规的聚合函数,Power BI中给还有一类X函数,例如:SUMX()、MAXX()等,这类函数叫迭代函数,它们的计算逻辑是先按行进行表达式的值,再按聚合方式求结果。
sumx(sales[price] * 0.9] :先对每行的价格打九折,然后计算打完折的合计值
同上,逻辑函数也和Excel一样,如 AND, FALSE, IF, IFERROR, NOT, TRUE 和 OR。
这里有个函数需要重点说明下:SWITCH函数
正如它的名字,它就相当于一个开关,通过不同的条件,执行不同的表达式,它在BI中有很强大的作用。
参数:
表达式:可以是式子,也可以是值
值1:条件
结果1:满足条件1后执行的结果
其他条件及对应结果
例如:
变化排名 = SWITCH(
SELECTEDVALUE(‘top’[变化]),
“TOP”,RANKX(all(‘产品名’),CALCULATE([变化量])),
“BOT”,RANKX(all(‘产品名’),CALCULATE([变化量]),ASC))
上述参数从参数中选择值,当选择的值是TOP时,按降序排名,如果选择的值是BOT时,按升序排名;以实现通过选择不同的按钮,获得不同的数据,再BI中效果展示如下图:
三角函数就是数学中的三角函数,DAX 提供了丰富的三角函数,这些函数对于某些计算非常有用。因为它们的用法比较简单,这里不再深入介绍。
常用的三角函数有:SIN、COS、TAN、SQRT等
同样,数学函数这里不再深入介绍。
常用的数学函数有:ABS(绝对值)、DIVIDE(除)、EXP(次幂)、FACT(阶乘)、LOG(对数)、PI(圆周率)、RAND(随机数)等
信息函数可以用来分析表达式的类型,所有这些函数都以 IS- 开头,返回一个 TRUE/FALSE 值,可以在任何逻辑表达式中使用,我一般把它们叫判断函数。