DAX表达式:Power Pivot的特有函数集
1. DAX表达式的结果应用在数据透视表中
2. DAX表达式的结果作用于整列或者表中所有行
3. 还需注意以下几点:
- a. 表名用“''”引用。
- b. 字段名(列名)用“[]”引用。
- c. 要注意函数表达式中参数的数据类型,尤其是要将“表”与“数值”正确区分。
- d. 与Excel公式相同,除了直接在编辑器的公式区域输入公式外还可以通过单击公式编辑栏前 的“fx”图标启动“插入函数”对话框,在对话框中选择需要的函数使用。
- e. 表达式中的函数名不分大小写,比如“ALL”函数也可以记作“all”。
相关参考网站:
https://msdn.microsoft.com/zh-cn/library/ee634365(v=sql.105).aspx https://msdn.microsoft.com/zh-cn/library/vs/alm/hh272053
dax表达式中,主要是进行数据透视,既可以创建列值(例如:新建一列值=原列值*1000,但是这种尽量在PQ中完成),也可以创建度量值,还可以创建表。
函数:
1、switch(表达式,值1,结果1,值2,结果2,....其他情况结果)
switch函数中不能出现逻辑符号判断,只能是一个结果替换一个值
例如:将赢单率字段中0.15替换为"L"、0.25替换为"L"、0.5替换为"M"、0.75替换为"H"、其他替换为"-"
WinOdds = SWITCH([赢单率],0.15,"L",0.25,"L",0.5,"M",0.75,"H","-")
2、related(合并字段)
在表创建连接关系的情况下,用related直接写字段名,就可以合并到其他表中需要合并的字段
例如:将商机相关企业信息表中的有无拖欠还款情况字段合并到本表中。
Risk = RELATED('商机相关企业信息'[有无拖欠还款情况])
3、filter(表,筛选条件)
第一个参数是筛选的表范围,第二个参数是筛选的条件。
4、calculate(计算规则,条件 ,条件2...)
用来求条件下的任意规则的计算,条件可以有多个
例如:对商机记录表中WinOdds="H",并且Risk="无"的数据进行汇总
1高赢单率低风险金额合计 = CALCULATE(SUM('商机记录'[商机金额(M)]),FILTER('商机记录','商机记录'[WinOdds]="H"),FILTER('商机记录','商机记录'[Risk]="无"))
5、all,既能忽略筛选维度,也能忽略汇总维度。
- 计算总合计值,合计值不随指定维度而合并同类项,指定维度对度量失去筛选能力。
- all函数中放表名,那么表中的所有维度都失去筛选意义
- all下面有很多的衍生函数,allselected就是其中的一个
例如:该度量值计算之后在城市维度下不进行分类汇总。
所有城市对应的商机金额的合计值 = CALCULATE(SUM('商机记录'[商机金额(M)]),all('商机相关企业信息'[城市]))
6、allselected,用法同all,但是只忽略汇总维度,不忽略筛选维度
7、distinctcount,不重复计数
8、totalmtd()计算规则整理
参照的是时间点,位移到当前月的第一天, 返回的是当前月第一天到今天的汇总值;如果切片器是时间段,是受后点影响
MtD = totalmtd(sum('调用的函数'[金额]),'调用的函数'[日期])
9、mPreviousMonth 计算规则整理
mPreviousMonth = calculate([金额合计],PREVIOUSMONTH('调用的函数'[日期]))
参照的是时间点,位移到上个月的第一天,返回的是上个月一整个月的汇总值;如果切片器是时间段,是受前点影响
10、mDateAdd 计算规则整理
mDateAdd = calculate(sum('调用的函数'[金额]),dateadd('调用的函数'[日期],-1,MONTH))
参照的是时间点,位移到到上一个月,返回上一个月指定天的值;如果切片器是时间段,可以参照时间段,返回的是前点和后点各往后移一个月的汇总值,如果时间段为:3.1-3.29,返回整个2月的值;如果时间段是2.1-2.28,则返回的是1.1-1.31的值;如果想获得1.1-1.30的值,那么在dateadd中减去day,而不是month。
其他注意事项:
1、不要认为PP创建的默认的连接规则是正确的的,一定要检查。
2、公式中调出字段,在当前表下打[],既可以调出该表下面的所有字段;如果是在其他表中,则打单引号,可以调出所有表中的字段。
3、在没有选择表的情况下创建度量值时,可能会创建到其他的表里,只要表正确连接,这个时候使用是不受影响的。修改度量字段属于的表可以选中字段,度量工具>主表 中修改即可
4、度量工具位置可以修改度量值的格式
5、维度可以分为两种,放在透视表中的汇总维度和放在切片器中的筛选维度
6、上下文的概念,上下文分为行上下文和筛选上下文。行上下文是对每一行进行计算,行上下文的汇总方式是类型二,筛选上下文的汇总方式是类型一。不能把聚合函数放到另一个函数的内部嵌套直接使用。calculate函数可以将筛选上下文直接转换为行上下文,因此,sum可以用到calculate函数中。
9对金额排名 = rankx(all('商机相关企业信息'[城市]),[1金额合计]) //行上下计算,正确
9.对金额排名 = rankx(all('商机相关企业信息'[城市]),CALCULATE(SUM('商机记录'[商机金额(M)]))) //将筛选上下文转换为行上下文,正确
9错金额排名 = rankx(all('商机相关企业信息'[城市]),SUM('商机记录'[商机金额(M)])) //行上下文汇总,错误
.png)
7、一个比较神奇的用法:
calculate中,条件直接跟,不使用函数可以得到下图中的结果。
8上海商机金额合计 = CALCULATE(SUM('商机记录'[商机金额(M)]),'商机相关企业信息'[城市]="上海")
.png)
8、时间智能函数: https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2014/ee634763(v=sql.120)。在使用时间智能函数的时候,需要先进行充分的测试,包括参照的是点还是段、位移量、返回的是点还是段
9、PQ中生成的列表要转化为表才能在PP中使用,PQ中的指定为任意类型的字段,在PP中会默认为文本。








暂无数据