逻辑函数(Tableau)

知识整理。

1. IF

IF函数的常用表达形式为

IF test THEN value END

IF test THEN value1 ELSE value2 END

IF test1 THEN value1 ELSEIF test2 THEN value2 ELSEIF test3 THEN value3 … END。

使用IF test THEN value END时,先对test进行判断,如果为True 则返回value,否则为Null。

例如IF [当期值]>10000 then "好" END,该语句对源数据行记录依次进行判断,如果当期值大于10 000,则该行赋值为"好",如果当期值小于或等于10 000,则该行值赋值为Null。使用IF test THEN value1 ELSE value2 END时,先对test进行判断,如果为True则返回value1,否则返回value2。例如IF [当期值]>10000 THEN "好" ELSE "不好" END ,源数据某行数据当期值为12 000,则赋值为"好",若某行数据当期值为9000,则赋值为"不好"。前面两个语句最终的结果只有两类,如果要表示结果为多类,则需要用IF test1 THEN value1 ELSEIF test2 THEN value2 ELSEIF test3 THEN value3 … END。例如,IF[当期值]>10000 THEN "好" ELSEIF [当期值]<=10000 AND [当期值]>5000 THEN "较好" ELSE "不好" END,表示当当期值大于10 000时,赋值为"好",当期值为大于5000并且小于等于10 000时为"较好",其余的为"不好"。

注意这里"大于5000并且小于等于10000"的表达式为" [当期值]<=10000 AND [当期值]>5000",而不是"5000<[当期值]<=10000",因为Tableau在执行判断的时候先判断"5000<[当期值] ",这时返回值为布尔值True 或 False ,继续就变成True(或False)<=10000,出错。

有时候上述三种类型任然不能满足需求,比如在[当期值]>10000的条件下,如果同期值大于10 000则为"好1",其他为"好2",则可通过内嵌条件语句来实现。具体语句可表示为IF[当期值]>10000 THEN (IF [同期值]>10000 THEN "好1" ELSE "好2" END) ELSEIF [当期值]<=10000 AND [当期值]>5000 THEN "较好" ELSE "不好" END。

另外,test可以是字段与字段比较,字段与参数比较。比如 IF [当期值]>[同期值] THEN "

增长" ELSE "不增长" END。

2. CASE

CASE函数的作用和IF一样,但更方便使用,尤其是在返回结果较多的情况下。其表达式格式为:

CASE expression

WHEN value1 THEN return1

WHEN value2 THEN return2

WHEN value3 THEN return3

ELSE return4

END

编写函数时当然不必换行,只是换行逻辑更清楚些。该表达式表示当expression= value1时

返回return1、当expression= value2时返回return2,以此类推。它等价于IF expression= value1 THEN return1 ELSEIF expression= value2 THEN return2 ELSEIF expression= value3 THEN return3 ELSE return4 END。

例如:

CASE [省市]

WHEN "吉林" OR "辽宁" OR "黑龙江" THEN "东北"

WHEN "安徽" OR "江苏" OR "浙江" OR "福建" THEN "华东"

WHEN "四川" OR "江西" OR "河南" OR "湖北" OR "湖南" OR "重庆" THEN "华中"

END

该表达式将省市(部分)划分了不同的区域。CASE 主要是判断某 expression 与某些值是否匹配,但如果条件中存在比较,则还是得用IF语句。比如当期值大于10 000为"好",得用IF语句。

3. IIF

函数公式为IIF(test, value1, value2, [unknown]),其中test为逻辑判断表达式。test 必须是布尔值:数据源中的布尔字段或使用运算符的逻辑表达式的结果(或 AND、OR 或 NOT 的逻辑比较)。如果 test 计算为 True,则 IIF 返回 value1 值,如果 test 计算为 False,则 IIF 返回 value2值。布尔比较可能生成值既不是 True 也不是 False,通常是因为测试中存在 Null 值,这时IIF返回的最后一个参数[unknown],如果省略此参数,则会返回 Null。

例如IIF(7>5, "7大于5", "7不大于5")=#7大于5# 。再如IIF([当期值]>[同期值], "当期值大于同期值", "当期值小于或等于同期值"),执行语句时,对每一条行记录对当期值和同期值进行比较:如果当期值大于同期值,即[当期值]>[同期值]为True,返回值为#当期值大于同期值#;若当期值小于或等于同期值,则[当期值]>[同期值]为False,返回值为#当期值小于或等于同期值#。

4. IFNULL

函数公式为IFNULL(expression1, expression2),如果结果不为 Null,则 IFNULL 函数返回第

一个表达式,否则返回第二个表达式。

例如IFNULL([当期值],[同期值])=[当期值] 如果不为空,则返回当期值,如果为空,则返回[同期值]。这实际上等价于将当期值的空值填补为同期值。

5. ISDATE

函数公式为ISDATE(string),返回布尔值,如果string可以转换为日期,则返回True,否则返回False。

例如ISDATE("1/1/2014") = TRUE ,ISDATE("1/2014") = FALSE。

6. ISNULL

函数公式为ISNULL(expression),返回布尔值,如果表达式为空,则返回True,否则返回False。

7. Min

函数表达式MIN(expression) 或 MIN(expression1,expression2) ,表示返回一个表达式在所有记录间的最小值,或两个表达式对于每个记录的最小值。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值