一、Power Pivot的DAX表达式
1、单引号'',引用表名;方括号[],引用列名;不区分大小写
2、SWITCH(列名,条件值1,条件结果1,条件值2,条件结果2,...)
当列的值等于某个条件值时,返回对应的条件结果;另一种方式switch(TRUE(),条件1,条件结果1,条件2,条件结果2,...),如switch(TRUE(),'商机记录'[赢单率]<0.5,"低",'商机记录'[赢单率]>=0.5,"高")
,若赢单率列某单元格数值<0.5;则输入低;若赢单率列某单元格数值>=0.5;则输入高
3、RELATED(关联表列名) 获取连接一表某一列的数据,使用前需要点击关系图视图创建表之间的关联关系(即E-R图设置)
4、FILTER(表名,筛选条件) 筛选函数,获取符合条件的数据集
5、ALL(列名)函数,是忽略参数内容的筛选维度,即把同属一个父级下的所有子级归为一组。如下图,本函数会按照父级苹果、西瓜来分组
6、CALCULATE(计算规则(即聚合函数名(度量列)),条件1,条件2,...)
万能带有条件的汇总规则表达式,把符合条件的数据按计算规则计算,把sumifs、countifs等函数功能合并为一个函数实现。其中条件可以使用
FILTER、ALL等筛选器函数
7、DIVIDE(分子,分母) 求分数函数,若分母是空或0,返回空值或特定值
8.RANK.EQ(值,列名,排序方式)
排序函数,值参数可以是某一个列名,列名参数必须是列名(也可以通过COUNTROWS(RELATEDTABLE(TableName))来获取)。排序0或false降序,1或true升序。注意排序要针对那个维度是,数据中维度不能有重复行。如下图
9、DAX表达式可以加入筛选维度作为条件,不能把汇总规则作为条件依据
10、时间智能函数必须与时间点切片器搭配使用
11、Rankx(待排名列,排名依据列,此参数大多数情况是空着,0降序(默认)|1升序,Skip
中式排名|Dense非中式排名),这是一个用于统计排名的度量值函数,只能设置度量值时使用。如rankx =
rankx(all('区域'),'商机记录'[销售金额合计]) 统计区域按销售总金额倒序排名
12、TOPN(前几名,筛选依据,满足的条件,0降序|1升序),统计前几名度量值函数。如topn('Top_N'[Top_N 值],all('大气质量'[城市名]),[PM10avg],0) 求的是各城市按PM10平均值倒序排名取前几名城市名
13、datesinperiod和LASTDATE、MIN()函数结合的用法,DATESINPERIOD()是获取某段时间区间,格式DATESINPERIOD(时间,LASTDATE(时间)|MIN(时间),位移量(负数往前推/正数往后推),参照类型(可以是DAY|MONTH..))。LASTDATE(时间)是获取时间所属当月的最后一天,MIN(时间)是获取时间所属当月的第一天。比如datesinperiod("2019-07-26",LASTDATE("2019-07-26"),-3,MONTH)返回的是5、6、7三个月,用了LASTDATE就表明包含当月;datesinperiod("2019-07-26",MIN("2019-07-26"),-3,MONTH)返回的是4、5、6三个月,用了MIN就表明不包含当月。 calculate(avg(销售额),datesinperiod(2019-07-27,LASTDATE(2019-07-27),-3,MONTH))计算的是5-7月期间的平均值,这个方法可以计算移动平均值,在平稳状态下,通过观测此指标来推断未来情况。
14、TOTAL[Y/Q/M]TD是统计某时间期间情况函数(年/季度/月),有三个函数TOTALYTD(指定日期当年的1月1日开始至本日期期间的当年度情况)、TOTALQTD(指定日期当月的1月1日开始至本日期期间的当月度情况)、TOTALMTD(指定日期当季度的第1个月1日开始至本日期期间的当季度情况)。格式TOTAL[Y/Q/M]TD(汇总规则(度量),日期);比如 totalytd(average(销售额),2019/07/27)=从2019年1月1日开始至2019年7月27日期间当年度平均销售情况
15、dateadd函数。dateadd函数是依据指定日期或某时间序列获取某日期,格式是dateadd(指定日期,偏移步长[负数是往后偏移|正数是往前偏移],YEAR|QUARTER|MONTH|DAY)。比如dateadd(2019/07/27,-1,MONTH)=2019-06-27;dateadd(2019/07/27,-12,MONTH)=2018-07-27;时间序列 datelist={2017/01/02,2017/01/03,2017/02/05},dateadd(datelist,-1,YEAR)={2016/01/02,2016/01/03,2016/02/05}
16、previousmonth 函数。previousmonth函数是取指定日期前一个月,格式是previousmonth(日期),如previousmonth(2019/07/27)=2019-06。
17、筛选上下文与行上下文。筛选上下文是汇总规则作为筛选条件,属于链接中的类型1;行上下文是先在外面定义一个汇总规则度量名,再将这个度量名作为另一个度量的筛选条件,数据链接中的类型2。如下图:
类型1:filtersum = calculate(sum('订单表'[订单金额]),filter('产品表',sum('订单表'[订单金额])>2000)) 翻译成文字 是所有产品销售额大于2000的销售人员销售合计;
类型2:filter金额合计 =calculate('订单表'[金额合计],filter('产品表','订单表'[金额合计]>2000)) 翻译成文字是各销售人员所有产品中合计金额大于2000的产品的销售合计
18、ALL、ALLSELECTED、ALLEXCEPT三个筛选函数的区别