DAX从入门到精通 2-1-1 DAX的数据类型
第二章 介绍DAX
在上一章简单快速的介绍了DAX后,现在开始稍微深入的介绍下DAX语言。在这个章节里面,我们会学习DAX的语法,计算列和度量值的区别,这两者在DAX中使用频率非常高。
因为这个章节是作为一个大概介绍的章节,许多函数不会深入的讨论。在本书后面的章节,我们会进行详细深入的讨论。现在这阶段,只需要大概了解一些函数以及熟悉DAX语法即可。
了解DAX中的计算
要写出复杂的函数,就要从学习基础的DAX知识开始。包括语法,各种数据类型,运算符号,如何引用列和表。接下来会一一介绍它们。
你使用DAX对表中的列进行计算。你可以做聚合,计算,查找数值等,总而言之,所有的计算都涉及表和列的概念。因此,第一个需要学习的就是如何引用表中的列。
写法是先写表名,然后括号,接着列的名称,然后反括号
'Sales'[Quantity]
当表名不以数字开头的时候,不包含空格,不是使用系统保留的字符(例如date,sum)你可以忽略引号
划重点:
不在表名中使用空格是非常好的习惯。这样,你就避免了在公式中使用引号,也使得代码更适合阅读。牢记,表名会出现在你模型中的所有地方,无论是数据表,透视表,客户端工具例如Power View。因此,如果要在表名中包含空格,那么你就需要在所有使用到表的地方使用引号。
如果你引用的列或者度量值于你定义的函数是在同一个表,那么书写的时候,可以忽略表名。因此, 当你在sales表中写计算列或者度量值的时候,[Quantity]这样的写法是正确的。但是,即使这样写是正确的,但是当你选择列的时候(非书写时)用户界面会建议你使用表的名称作为前缀。这里,我们非常建议你只用表名前缀。这样有助于提高代码的可阅读性。
DAX的数据类型
DAX可以对多种的数据类型进行计算,一共有7种。如下列表,列出了DAX的名称以及他们通常的名称。例如:布尔值,在DAX中表现为TRUE/FALSE。
- 整型
- 小数
- 货币类型
- 日期
- 布尔值
- 文本
- 二进制的对象
DAX拥有强大的功能处理不同类型的数据,所以你不必担心数据类型的问题。当书写一个DAX表达式的时候,结果的类型取决于表达式中使用的数据类型。对于这点,你需要特别注意,已避免返回的是预期之外的情况,如果这样,就必须要调整一下表达式使用的字段。
例如:一个求和计算中,一个表达式是日期类型,那么结果也是日期类型。同样,如果是整型,那么返回的也是整型。也称为计算决定数据类型。
image.png
另外,DAX会根据计算符自动转换文本和数字。例如,如果使用&连接,那么结果就是返回文本。如下公式
= 5 & 4
返回了“54”的字符串。对于这个公式
= "5" + "4"
这个公式返回的是数字9
计算的结果取决于计算的符号,而不是原始的计算列。即使这功能看起来很方便,也会在自动转换的时候出现一些错误。作者的建议是,避免使用系统的自动转换,如果需要进行一些转换,最好是人为的控制它,申明转换的内容。例如上面的转换,可以按如下的写法:
= VALUE ( "5" ) + VALUE ( "4" )
DAX的数据类型对于使用Excel和其他语言的人来说,应该是熟悉的。但是还是有必要简单介绍下DAX的数据类型。
- 整型:DAX只有一种整型的类型,它可以存储64位的数值,所有整型的计算都是使用64位的值。
- 浮点值:小数值,以双精度方式存储。对于TSQL的类型是Float。
- 货币:以固定的小数位存储。包含4位小数,注意,所有于货币类型相关的计算,都会忽略超过4位的精度。如果需要更高精度的计算,就要把值转换位小数的类型。
默认的货币类型包含了货币符号,你可以把货币类型应用到数字和小数类型的数值,另外也可以对货币类型的数值使用格式定义,从而不显示货币符号。 - 日期类型:DAX存储日期格式使用DateTime格式。格式内部实际是使用浮点数字存储,日期的初始值是1899-12-30,小数部分代表了天,小时,分钟,秒。因此下面的表达式计算的是当前日期+1天。
= NOW () + 1
如果你仅需要日期部分,那么记得使用TRUNC函数来截除小数部分。
- 布尔值:用来表达逻辑条件,例如使用如下表达式的一个计算列,值就是布尔值
可以把布尔值是为数值,ture表示1,false表示0。这在排序的时候会比较有用,因为true>false - 字符类型:DAX中的字符都是以Unicode方式存储,每个字符用16bits存储,不区分大小书写,例如
“Power Pivot”和“POWER PIVOT”是相同的。 - BLOB:在数据模型中用来存储图片,一般是供给给客户端使用,例如Power View等来显示图片