DAX语言Word下载.docx
《DAX语言Word下载.docx》由会员分享,可在线阅读,更多相关《DAX语言Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
输入表名称开始键入表名称。
公式记忆式键入功能会提供一个下拉列表,其中包含以这些字母开头的有效名称。
输入列名称键入括号,然后从当前表的列清单中选择列。
对于其他表中的列,首先键入表名称的前几个字母,然后从记忆式键入下拉列表中选择该列。
6DAX计算类型
●计算列
●计算度量值
6.1DAX表名和列名语法
创建新的列或度量值,表名的一般格式:
'
TableName'
[ColumnName]
如果表名中有空格,那么表名周围的单引号则是必需的。
如果表名没有空格,则可以省略单引号,语法如下:
TableName[ColumnName]
也可以完全省略表名而只使用列名,但这对于清晰的函数来说不是一个好的做法。
列名称必须始终包含方括号。
最佳做法是执行以下操作:
●表名中无空格;
●始终在公式中包含表名(不要将其省略掉,即使DAX允许)。
6.2创建计算列
当需要划分或筛选值,或者要对表中的每一行进行计算时,计算列非常有用。
计算列所需元素:
●新的列名
●至少一个函数或表达式
如果在计算列公式中引用一个表或列,则无需再表中指定行——PowerBI会为每个计算的当前行计算列。
6.3创建计算度量值
当计算百分比或比率,或者需要复杂的聚合时,使用计算度量值。
计算度量值的必需元素与计算列的必需元素是相同的:
●新的度量值名称
7DAX函数
DAX拥有许多可用于成形、组织或分析数据的函数。
●聚合函数
●计数函数
●逻辑函数
●信息函数
●文本函数
●日期函数
●…
7.1聚合函数
DAX提供多种聚合函数,包括以下常用函数:
●SUM
●AVERAGE
●MIN
●MAX
●SUMX(以及其他X函数)
这些函数仅适用于数字列,并通常一次只能聚合一列。
但是以X结尾的特殊聚合函数(例如SUMX则可同时处理多列。
这些函数循环访问表,并为每一行计算表达式)。
(1)求销售的咖啡杯数:
[销售量]=Sum(‘销售数量表’[数量])
(2)求数量列的平均值:
[平均销售量]=Average(‘销售数据表’[销售量])
(3)将每一行数据视为一位顾客购买的订单,求订单中最大的杯数:
[最大杯数]=Max(‘销售数据表’[数量])
7.2计数函数
DAX中经常使用的计数函数包括:
●COUNT
●COUNTA:
计算列中单元格不为空的数目
●COUNTBLANK:
计算列中单元格为空白的数量
●COUNTROWS:
求表中行的个数
●DISTINCTCOUNT:
对列中不重复值计数
这些函数用来计数不同的元素,如非重复值、非空值和表行。
(1)数据表中的每一行都是一笔订单,求行的个数就是求订单数量
[订单数量]=Countrows(‘销售数据表’)
(2)创建一个门店数量的度量值:
[门店数量]=Distinctcount(‘销售数据表’[门店])
7.3逻辑函数
DAX的逻辑函数包括:
●AND
●OR
●NOT
●IF
●IFERROR
这些特殊函数还可以用运算符表达。
例如,在DAX公式中AND可以输入为&
&
。
如果公式中存在两个以上条件,则可以使用运算符(如&
),但在其他情况最好使用函数名本身(如AND),以增强DAX代码可读性。
7.4信息函数
DAX中的信息函数包括:
●ISBLANK
●ISNUMBER
●ISTEXT
●ISNONTEXT
●ISERROR
尽管这些函数在具体情况下有用,但提前知道列的数据类型,而不依赖这些函数来提供数据类型仍很有价值。
DAX使用MAX和MIN函数来聚合和比较值。
7.5文本函数
DAX中的文本函数包括:
●CONCATENTATE
●REPLACE
●SEARCH
●UPPER
●FIXED
这些文本函数与同名的Excel函数工作方式类似。
7.6日期函数
DAX包含以下日期函数:
●DATE
●HOUR
●NOW
●EOMONTH
●WEEKDAY
尽管这些函数对于从日期值中计算和提取信息很有用,但它们并不适用于使用日期表的时间智能。
7.7Calculate函数
计算由指定筛选器修改的上下文中的表达式。
语法:
CALCULATE(<
expression>
<
filter1>
filter2>
…)
参数:
术语
定义
expression
要进行计算的表达式
filter1,filter2,…
(可选)定义筛选器的布尔表达式或表达式的逗号分隔的列表
Eg:
Calculate销售量=calculate([销售量],’产品表’[咖啡种类]=”拿铁”,’产品表’[杯型]=”中”)
7.8All函数
返回表中的所有行或返回列中的所有值,同时忽略可能已应用的任何筛选器。
可用于清楚筛选器并对表中的所有行创建计算。
ALL({<
table>
|<
column>
[,<
[,…]]]})
All函数可以引用表或者列。
table
要清除其筛选器的表
column
要清除其筛选器的列
All函数的参数必须或者是对某一基表的引用,或者是对某一基列的引用,不能将表的表达式或列的表达式与All函数一起使用。
All销售量=calculate([销售量],all(‘销售数据表’))
注意
引用表比较简单,即清除该表的所有筛选限定条件,当使用All函数引用列时,需注意:
(1)必须保证All函数所清除的筛选列和初始筛选条件中的筛选列一致(同一张表的同一列)。
(2)All函数所有引用列参数必须来自同一张表,否则是无效的。
7.9Allexcept和Allselected函数
7.9.1Allexcept函数
删除表中除已应用于指定列的筛选器之外的所有上下文筛选器。
ALLEXCEPT(<
[,<
[,…]])
Allexcept函数的语法组成分为两部分,第一部分是表,第二部分是想要排除的列,与All函数一样,它可以引用多列,并且返回的结果是表,所以在度量值中不能够单独使用,需要配合像Calculate和Countrows这些可以引用表的函数使用。
Eg:
Allexcept=calculate([销售量],allexcpt(‘产品表’,’产品表’[杯型]))
7.9.2Allselected函数
对表中所显示的筛选条件执行清除筛选,而其他筛选条件皆保留。
ALLSELECTED([<
tableName>
columnName>
])
Allselected(表或列),它返回的结果也是表。
7.10Filter函数:
高级过滤器
筛选器函数,返回结果是一张表,无法单独使用,经常与Calculate函数搭配,也可以直接与某些聚合函数搭配使用,比如Countrows(Filter(表,筛选条件))公式来计算表的行数。
FILTER(‘表’,筛选条件)
例子:
求拿铁中杯咖啡的销售量
Filter销售量=calculate([销售量],
filter(‘产品表’,’产品表’[咖啡种类]=”拿铁”&
’产品表’[杯型]=”中”))
等同于:
注意:
当筛选条件出现如下类型,Calculate函数中的直接筛选条件不可用,需要用Filter函数:
●[列]=[度量值]
●[列]=公式
●[列]=[列]
●[度量值]=[度量值]
●[度量值]=公式
●[度量值]=固定值
如:
求每个季度拿铁咖啡的销售量超过200杯的门店的销售量。
Filter销售量=calculate([销售量],filter(‘门店信息表’,[销售量]>
200))
7.11Divide函数:
安全除法
Divide(分子,分母,可选项)
可选项如果不选则默认返回空值,也可以特别设定,比如将此可选项设为1,则当分母为0时返回1。
作用:
可以在分母为0时,防止出现报错信息。
①Divide([数量],0),得到的结果为空值。
②年比年增长率=([销售量]-calculate([销售量],previousyear(‘日历表’[日期])))
/
calculate([销售量],previousyear(‘日历表’[日期]))
③年比年增长率divide=divide(([销售量]-calculate([销售量],previousyear(‘日历表’[日期])))
calculate([销售量],previousyear(‘日历表’[日期]))
7.12If/Switch函数
①If年龄分层=if([年龄]>
20&
[年龄]<
=30,”21-30”,
if([年龄]>
30&
=40,”31-40”,
if([年龄]>
40&
=50,”41-50”,
if([年龄]>
50,”50以上”))))
If函数当有特别多条件,会“外套”套“外套”,使用Switch函数能解决这个问题。
新建一个度量值,用Switch+True函数的方法来定义不同条件的返回值,明显会使表达式更清晰。
②Switch年龄分组=switch(true,
[年龄]>
[年龄]>
[年龄]>
[年龄]>
50,”50以上”)
Switch+True函数适用于逻辑判断,如果逻辑判断是以一个准确值作为依据,那么Switch函数还可以直接引用表达式,如下:
Switch日历=switch(‘日历表’[月],
1,”一月”,2,”二月”,3,”三月”,4,”四月”,5,”五月”,6,”六月”,
7,”七月”,8,”八月”,9,”九月”,10,”十月”,11,”十一月”,12,”十二月”)
7.13关系函数:
Related、Relatedtable和Lookupvalue
Lookup表与数据表
Related函数专为关系管道建立,所以使用时不用考虑上下文在关系模型中转换的问题。
数据表引用Loolup表(多对一)
产品名称=related(‘产品表’[产品名称])
可嵌入其他公式:
收入=[数量]*related(‘产品表’[价格])
一对多,使用Relatedtable:
在产品表中添加一个“订单数量”列,求每种产品对应的订单数量。
订单数量=countrows(relatedtable(‘销售数据表’))
多条件查询,Lookupvalue
Looupvalue(‘产品表’[价格],目标输出结果列
’产品表’[咖啡种类],’销售数据表’[咖啡种类],条件1
’产品表’[杯型],’销售数据表’[杯型])条件2
Lookupvalue函数主要包括3各部分:
第一、输入目标输出结果的列名称,即产品表中的“价格”列;
第二、输入目标表中将要搜索的范围;
第三、输入原标中需要搜索的关联字段。
7.14TimeIntelligence函数:
时间只能函数
获取日历表
①利用Excel制作
②在PowerQuery中直接建立一张日期表。
第一步:
新建一个空查询;
第二步:
在公式中输入公式:
=List.Dates。
注意:
在编辑查询器中输入的公式用的是M语言,要区分大小写。
输入Start(日期起点)、Count(长度)、Step(颗粒度)等。
第三步:
单击“转换”选项卡中的“到表”命令,将其转换成表格格式。
8书写规则
举例:
度量值=CALCULATE([销售量],’产品表’[咖啡种类]=“拿铁”)
等号左边是度量值名称,等号右边是度量值公式。
在输入公式时,使用单引号引用某张表,使用中括号表示度量值或列。
*在写度量值公式时,如果想引用的是哪张表中的某一列,那么需要使用限定列。
限定列:
明确所引用的是哪张表中的哪一列。
9运算符
算数运算符
含义
示例
+(加号)
加
3+3
-(减号)
减或符号
3-1-1
*(星号)
乘
3*3
/(正斜杠)
除
3/3
^(插入号)
求幂
16^4
比较运算符
=
等于
‘产品表’[咖啡种类]=“拿铁”
>
大于
‘日历表’[日期]>
“Jan12015”
<
小于
‘销售数量表’[数量]<
5
大于或等于
[销售量]>
=200
小于或等于
[销售量]<
=100
文本运算符
(与号)
连接(或串联)两个值以生成一个连续的文本值
‘产品表’[咖啡种类]&
‘产品表’[杯形]&
”杯”
(双与号)
And和,同时满足几个条件
‘门店信息表’[门店]=”北京市”&
’产品表’[咖啡种类]=”拿铁”
||(双竖线符号)
Or或,满足任意一个条件
’(产品表’[咖啡种类]=”拿铁”||’产品表’[杯型]=”中”)