PowerBI/DAX之运算符与数据类型

从本篇文章开始,我们将正式开始学习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( ) *11
FALSE( ) *10
BLANK ( )空值
BLANK ( ) = 0True
BLANK ( ) == 0False
BLANK ( ) == BLANK ( )True
BLANK ( ) && TRUEFalse
BLANK ( ) || TRUETrue
BLANK ( ) + 00
BLANK ( ) – 4-4
4 / BLANK ( )无穷大
BLANK ( ) * 4空值
BLANK ( ) / 4空值
INT ( BLANK ( ) )空值

数据类型转换是最基础的内容,但其作用不容轻视。须知万丈高楼平地起,基础不牢,地动山摇。因此我建议大家多读几遍本文中关于数据类型转换的内容,并且最好亲自动手去实践一下,在掌握好数据类型转换之后,再去学习后续的内容!

### PowerBI DAX 逻辑运算符使用方法 在 PowerBI 的数据建模过程中,DAX 提供了多种逻辑运算符来处理条件判断和布尔表达式的构建。这些运算符可以用于创建复杂的计算列、度量值以及表格过滤等操作。 #### 常见的逻辑运算符及其功能 | 运算符 | 描述 | | --- | --- | | `AND` 或者 `&&` | 当两个参数都为真时返回 true;否则返回 false | | `OR` 或者 `\|\|` | 如果任意一个参数为真则返回 true;只有当两者均为假才返回 false | | `NOT` | 对单个参数取反,如果原值为 true 则变为 false 反之亦然 | 下面通过具体例子展示如何应用上述逻辑运算符: 假设有一个销售记录表 SalesTable, 包含字段 OrderDate (订单日期), Amount (金额). 需要找出在过去一年内销售额大于等于 $1000 订单的数量. ```dax CountOfOrders := COUNTROWS( FILTER( SalesTable, YEAR(TODAY()) - YEAR(OrderDate) <= 1 && Amount >= 1000 ) ) ``` 此公式利用 AND (`&&`) 来组合两个条件:一个是时间范围内的约束,另一个是对交易额的要求。最终 COUNTROWS 函数统计满足这两个标准的所有行数[^1]. 对于 OR(`\|\|`) 的应用场景如下所示: ```dax HighValueOrRecentSales := SUMX( FILTER( SalesTable, Year(OrderDate)=Year(Today()) || Amount>5000 ), Amount ) ``` 这里 SUMX 结合 FILTER 实现了一个查询——求解本年度或金额超过五千美元的所有订单总金额。注意这里的 OR 关键字连接了两个独立但互斥的选择准则. 最后来看 NOT 的简单实例: ```dax NonZeroSalesDays = CALCULATE ( DISTINCTCOUNT(SalesTable[OrderDate]), NOT(ISBLANK(SalesTable[Amount])) ) ``` 这段代码旨在获取有实际发生业务活动的日子数量(即排除掉那些没有任何销售收入入账的日历日),其中 NOT() 方法用来否定 ISBLANK() 测试的结果,从而筛选出非空白项对应的唯一日期数目.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值