从本篇文章开始,我们将正式开始学习DAX的相关知识。本篇文章将介绍DAX的运算符、数据类型以及数据类型间的转换与计算方面的内容。
运算符
运算符 | 含义 | 示例 |
---|---|---|
( ) | 改变计算优先级和分组 | (1+2)*3 |
+ | 相加 | 1+2 |
− | 相减 | 2-1 |
* | 相乘 | 1*2 |
/ | 相除 | 8/2 |
= | 等于 | 1=2 |
<> | 不等于 | 1<>2 |
> | 大于 | 2>1 |
>= | 大于或等于 | 200 >= 100 |
< | 小于 | 5 < 0 |
<= | 小于或等于 | 5 <= 100 |
== | 严格相等 | 0 == BLANK() |
& | 文本连接符 | "Value is" & "A" |
&& | 逻辑"与" | [CountryRegion] = "USA" && [Quantity]>0 |
|| | 逻辑"或" | [CountryRegion] = "USA" || [Quantity]>0 |
NOT | 逻辑"非" | NOT [Quantity] > 2 |
IN | 元素包含在列表中 | [CountryRegion] IN {"USA", "Canada"} |
NOT IN | 元素不包含在列表中 | NOT [CountryRegion] IN {"USA", "Canada"} |
数据类型
数据类型 | 含义 |
---|---|
Integer | 整数 |
Float | 十进制数 |
String | 文本 |
TRUE/FALSE | 布尔值 |
Currency | 货币 |
DateTime | 日期 |
Binary | 二进制 |
Blank | 空值 |
Variant | 变体 |
上述列出的数据类型中,根据含义应该都比较好理解,所以我就只介绍一下其中的变体类型。变体类型指的是一个表达式的结果有可能存在两种或以上的数据类型,当我们使用了IF函数且各个结果分支所返回的值的数据类型都不一致时,该表达式的结果的数据类型即为变体。
我们常用的数据类型可以概括为:数值、文本与空值,其中数值既包括了整数与小数,也包括了布尔值与日期,因为布尔值与日期本质上是以整数的形式存储在DAX引擎中的。一般来说,我们无需重点关注数据类型,因为数据在存储的时候我们就已经设置好了各个数据的数据类型了,而且当需要手动转换成指定的数据类型时,IDE也会自动给出数据类型的名称提示,所以我们不需要背下各种数据类型的名称,大概了解下即可。
数据类型转换
- 自动转换规则:
- 数据类型的自动转换是根据运算符来判断的,运算符会自动把参与运算的值的数据类型转换成合适的类型,转换失败则报错
- 将非零值用作布尔值,则自动转换成TRUE
- 将零值用作布尔值,则自动转换成FALSE
- 将TRUE用做整数,则自动转换成1
- 将FALSE用作整数,则自动转换成0
- 空值遇到相加、相减与逻辑运算符时,会自动转换成零或布尔值
- 日期可直接当作整数进行处理,1899年12月30日对应零,每增加一天则整数加一,但需注意1900年的闰年错误
- 日期遇到相加、相减运算符时,结果仍为日期类型,遇到相乘、相除运算符时,结果为数值类型
- 严格相等运算符不会自动进行数据类型转换
- 手动转换:
- 使用CONVERT函数,例如:将整数:123 转换为字符串:CONVERT(123,STRING)
- 利用自动转换规则,例如:将整数:123 转换为字符串:123&"";将字符串:“123” 转换为整数:"123"*1 或 "123"+0
- 一些参考例子:
表达式 | 结果 |
---|---|
"1" + "2" | 3 |
1 & 3333 | "13333" |
IF(-5,"TRUE","FALSE") | TRUE |
IF( 5,"TRUE","FALSE") | TRUE |
IF( 0,"TRUE","FALSE") | FALSE |
TRUE( ) *1 | 1 |
FALSE( ) *1 | 0 |
BLANK ( ) | 空值 |
BLANK ( ) = 0 | True |
BLANK ( ) == 0 | False |
BLANK ( ) == BLANK ( ) | True |
BLANK ( ) && TRUE | False |
BLANK ( ) || TRUE | True |
BLANK ( ) + 0 | 0 |
BLANK ( ) – 4 | -4 |
4 / BLANK ( ) | 无穷大 |
BLANK ( ) * 4 | 空值 |
BLANK ( ) / 4 | 空值 |
INT ( BLANK ( ) ) | 空值 |
数据类型转换是最基础的内容,但其作用不容轻视。须知万丈高楼平地起,基础不牢,地动山摇。因此我建议大家多读几遍本文中关于数据类型转换的内容,并且最好亲自动手去实践一下,在掌握好数据类型转换之后,再去学习后续的内容!
DAX系列文章中涉及到的案例文件,均已上传到QQ群:344353627,若有需要,可自行加群获取。