目录
Power BI--DAX函数入门
概述
DAX的全称是DATA ANALYSIS EXPRESSION,是一个公式表达式语言。
DAX公式包括函数、运算符和值,用于对表格数据模型中相关表和列中的数据执行高级计算和查询。
用在度量值、计算列、计算表和行级别安全性中使用。
度量值
度量值的作用在于解决数据并不包含解决某些重要问题所需的所有内容。
度量值是数据分析中的一个关键。度量值的计算结果也会始终随着你与报表的交互而改变,
以便进行快速和动态的临时数据浏览。
度量值在Power BI中的图标是这个计算器符号。
可以将度量值理解为一个根据上下文自动改变计算范围,并按照规定的计算规则算出结果的计算器。
计算列
凭借计算列,可以将新数据添加到模型中已存在的表。但请勿从数据源查询值并将值加载到新列中,
而是创建用于定义列值的数据分析表达式DAX公式。
与使用查询编辑器中的“添加自定义列”创建查询中包含的自定义列不同,在“报表”视图或“数据”视图中创建的计算列
以你已加载到模型中的数据为基础(如示例,计算结果是所有数据的总和,而不是行累计的结果)。
计算表
大多数情况下,你都是通过将数据从外部数据源导入模型来创建表。但借助“计算表”,你可以根据已加载到模型中的数据添加新表。
你可以创建定义表的数据分析表达式DAX公式,而非从数据源中查询值,并将值加载到新表的列中。
计算表最适合于你希望将其作为模型的一部分而存储的中间计算和数据,而非在运行中计算的或作为查询结果而存储的中间计算和数据。
行级别安全性
使用行级别安全性时,DAX公式的计算结果必须为TRUE/FALSE布尔值条件,以定义特定角色成员的查询结果可以返回哪些行。
用于限制不同角色可以访问的数据范围。
数据类型
数据类型 | 数据类型说明 |
小数 | 64位(八字节)浮点数。表示的最大精度为15位数。 |
定点小数 | 小数分隔符的位置是固定的。小数分隔符右侧始终有四位数,并可表示有意义的19位数。 用在“小数”类型舍入可能会引发错误的情况下。货币类型 |
整数 | 64位(八字节)整数值。支持19位数;在需要控制舍入的情况下,整数类型非常有用。 |
百分比 | 显示乘以100的数字,并在右侧附加百分号(%);始终显示小数点分隔符右侧两位数。 |
日期/时间 | 表示日期和时间值。这种类型实际上以整数存储,两种数据类型可以相互转换。 |
日期 | 仅表示日期(没有时间部分)。转换为模型时,日期与表示分数值的带零日期/时间值相同。 |
时间 | 仅表示时间(没有日期部分)。转换为模型时,时间值与小数位数左侧没有数字的日期/时间值相同。 |
日期/时间/时区 | 带时区偏移量的UTC日期/时间。将这种数据类型加载到模型中时,它将被转换为日期/时间类型。 |
持续时间 | 时间长度。加载到模型中时,它将被转换为整数类型,可以将其添加到日期/时间字段,或从日期/时间字段中减去。 |
文本 | Unicode字符数据字符串。 |
True/False | 布尔值 |
二进制 | 用于表示具有二进制格式的任何其他数据。 |
运算符
算术运算符 | 含义 | 示例 |
+ | 加 | 3+3 |
- | 减 | 3-3 |
* | 乘 | 3*4 |
/ | 除 | 6/3 |
^ | 求幂 | 16^4 |
比较运算符 | 含义 | 示例 |
= | 等于 | '产品表'[咖啡类型]='拿铁‘ |
> | 大于 | '日历表'[日期]>"Jan 1 2005" |
< | 小于 | '销售数据表'[数量]<5 |
>= | 大于等于 | [销售量]>=200 |
<= | 小于等于 | [销售量]<=100 |
文本运算符 | 含义 | 示例 |
& | 连接两个值生成一个连续的文本 | '产品表'[咖啡类型]&'产品表’[杯型] |
逻辑运算符 | 含义 | 示例 |
&& | 和,同时满足几个条件 | |
|| | 或,满足几个条件中的一个 |
运算符书写规范
度量值 = CALCULATE ([度量值],'表名'[列名] = ‘值’)
在DAX中度量值和本表中的列名可以直接用[]引用,而其他表中的列名必须通过'表名'[列名]引用。
聚合函数
聚合函数就是我们平时常说的统计函数,主要用来计算(求和,计数和平均值等)。
这里主要讲解一下几个函数:
函数名称 | 函数说明 | 示例 |
SUM | 求和 | |
AVERAGE | 求均值 | |
MAX | 求最大值 | |
MIN | 求最小值 | |
COUNTROWS | 求行个数 | |
COUNTA | 计算列中单元格不为空的数目 | |
COUNTBLANK | 计算列中单元格为空白的数量 | |
DISTINCTCOUNT | 求不重复值计数 |
CALCULATE函数
CALCULATE函数被称作DAX语言中最强大的函数。
CALCULATE函数自带的筛选条件可以更改和覆盖初始的筛选条件。
语法:
CALCULATE(<expression>[,<filter1>[,<filter2>[,...]]])
expression 要进行求值的表达式
filter1,filter2 可选,定义筛选器或筛选器修饰符函数的布尔表达式或表表达式
返回值:
作为表达式结果的值
CALCULATE函数运算步骤:
step1:度量值会识别它的初始筛选条件。
step2:CALCULATE函数筛选自身条件,当自身条件与初始筛选条件冲突时,剔除初始筛选条件,以自身筛选条件为基础,进行计算。
举例:
例子中产品名称列为初始筛选条件,而美式中杯销售量中由于使用CALCULATE函数消除了初始筛选条件的影响,故会出现不同。
ALL函数
作用:
返回表中的所有行或列中的所有值,同时忽略可能已应用的任何筛选器。此函数对于清除表中的所有行的筛选器以及创建针对表中所有行的计算非常有用。
语法:
ALL([<table>|<column>[,<column>[,...]]]])
参数:
table 要清除筛选器的表
column 要清除筛选器的列
table或列必须时基表或基列。
此函数不能单独使用,而是用作中间函数。列必须是同一张表中的。
返回值:
已删除的带筛选器的表或列
举例:
ALLEXCEPT函数
作用:
删除表中所有上下文筛选器,已应用于指定列的筛选器除外。
语法:
ALLEXCEPT(<table>,<column>[,<column>[,...]])
参数:
table 要从中删除所有上下文筛选器的表,针对后续参数中指定的那些列的筛选器除外
column 必须保留上下文筛选器的列
返回值:
删除了所有筛选器(针对指定列的筛选器除外)的一个表。
此函数不单独使用,而是用作中间函数,可用于更改执行其他计算的结果集。
举例:
ALLSELECTED函数
作用:
删除当前查询的列和行中的上下文筛选器,同时保留所有其他上下文筛选器或显示筛选器。
语法:
ALLSELECTED([<table>|<column>[,<column[,...]]])
参数:
table 使用标准DAX语法的现有表的名称
column 使用标准DAX语法的现有列的名称
返回值:
不带任何列和行筛选器的查询的上下文。
举例:
FILTER函数
作用:
返回一个表,用于表示另一个表或表达式的子集。
语法:
FILTER(<table>,<filter>)
参数:
table 要筛选的表,也可以是结果为表的表达式
filter 要为表的每一行计算的布尔表达式
返回值:
只包含已筛选行的表
举例: