逻辑函数
有时候,你需要在表达式中建立一个逻辑关系,例如。根据列的值不同而实施不同的计算或者拦截错误。这时候,你可以使用DAX中的逻辑函数。之前我们已经学过if和iferror函数。
逻辑函数很简单,它们的功能和它们的名字一样,有AND, FALSE, IF, IFERROR, NOT, TRUE, and OR。例如,当price价格包含正确的数值时候,计算数量*价格。可以这样写表达式:
Amount = IFERROR ( Sales[Quantity] * Sales[Price], BLANK ( ) )
如果没有使用iferror,那么如果其中一行出现计算错误,那么该错误将传导到整个列,导致整个列计算错误。所以使用了iferror,就可以拦截报错,并且替换为一个空值blank。
另外一个有趣的函数是switch,当你有一列包含不多的唯一值时候,你想对这些值进行不同的计算。例如product表有一列包含了L,M,S,XL,你要把它们转换为有意义的表达式。可以用if函数嵌套的写法。如下:
SizeDesc =
IF ( DProduct[Size] = "S", "Small",
IF ( Product[Size] = "M", "Medium",
IF ( Product[Size] = "L", "Large",
IF ( Product[Size] = "XL", "Extra Large", "Other" ) ) ) )
另一种更高效的写法是使用switch函数:
SizeDesc =
SWITCH ( Product[Size],
"S", "Small",
"M", "Medium",
"L", "Large",
"XL", "Extra Large",
"Other"
)
后面的代码具有更高的可读性,虽然不会速度更快,因为DAX会自动把switch转换为嵌套的if函数。
小技巧
这里有个关于switch的小技巧,针对同样的表达式实行多个条件的判断。因为switch会自动转换为多个嵌套的if函数,第一个达到匹配要求的会被返回,因此,可以使用下面的写法格式:
SWITCH (
TRUE (),
Product[Size] = "XL" && Product[Color] = "Red", "Red and XL",
Product[Size] = "XL" && Product[Color] = "Blue", "Blue and XL",
Product[Size] = "L" && Product[Color] = "Green", "Green and L"
)
使用ture()作为第一个参数,意思就是返回第一个判断结果为true的表达式。
网友评论