Tableau 我常用函数整理

日期函数

dateadd

  • datedadd (date_part, interval, date) 表示在日期 date 的基础上, 以date_part 为单位, 与之间隔 interval的日期

  • dateadd ("month", -3, #2020/3/8#) 则返回 2019/12/8 0:00:00;

  • dateadd("day", -7, #2020/3/8#) 则返回 2020/3/1 0:00:00 查看过去一周, 半年, 3个月等的日期会用到.

datediff

  • datediff (date_part, start_date, end_date, [start_of_week]) 计算两日期的差, 以 date_part 为单位.
  • datediff("week", #2020/3/8#, #2020/3/9#) 返回 0 , 3/8 与 3/9 相差 0 周
  • datediff("week", #2020/3/8#, #2020/3/9#, "monday") 返回 1 因为 3/8 是周日, 一周开始若为周一, 则相差一周啦.

isdate

  • isdate (string) 判断一个字符串是否为有效日期. 是则返回 "真", 否则 "伪"
  • isdate("2020/3/8") ; isdate("2020-03-8") 返回 "真"

makeday

  • makeday (year, month, day) 构造一个包含 年, 月, 日 的日期值, 常用于数据提取, 日期比较等
  • makeday (2020, 3, 8) 则返回 2020/3/8

maketime

  • maketime (hour, minute, second) 构造一个包含 时, 分, 秒 的日期值
  • maketime (8, 30, 0) 则返回 1899/12/30 8:30:00

max, min

  • max (date1, date2) 也可用于比较两个时间, 返回 较近/ 较远 的一个距今
  • max (#2020/1/1#, #2020-3-8#) 返回 2020/3/8; min 则是相反的用法

now

  • now () 返回当前的日期和时. 配合 date, year, month 就很灵活了.
  • now () 返回 2020/3/8 23: 22:26
  • year(now()), month (now ()), date(now()) 分别返回 2020, 3, 2020/3/8

today

  • 返回今天的日期. today () 则返回 2020/3/8 . 经常用作与一个 动态的参数值. 比如日报中算环比, 同比都会用到

类型转换

date

  • 将给定的 字符串, 数字, 日期 表达式转为日期类型. 常用于强行转换, 比如对 数据库中的各种时间强行转换
  • date("2020/3/8") 和 date("2020-3-8 2:22:22") 和 date(2020, 3, 8) 都返回 2020/3/8 这样就能准确比较了

datetime

  • 跟 date () 一样的, 只不过更加精确到 时, 分秒. 也是会用在时间的比较上的
  • datetime ("2020-3-8 22:22:22") 返回 2020/3/8 22:22:22; 而 datetime ("2020/3/8") 返回 2020/3/8 0:00:00

float, int

  • 将表达式转为 浮点数或整数. 注意的是 int 不是四舍五入, 而是直接取整.
  • 时间其实也是一个 数字类型. int (#2020-3-8#) 返回 43896; int("666") 返回 666; int("aaa") 则啥都没有.

str

  • 将表达式转为字符串类型. 可用于, 字符串的拼接. 如 字段拼接, 构造唯一值等场景. 大类, 小类 排序会用到

逻辑函数

if

  • if 条件 then 表达式 end
  • if 条件 then 表达式1 else 表达式2 end
# 多层嵌套

if [当期值] > 10000 
	then if [同期值] > 10000
    	then "1好"
        else "2好"
        end
        
elseif [当期值] <= 10000 and [当期值] > 5000
	then "较好"
    else "不好"
    end
    
....

case

  • 跟 if 的作用基本一样, 但使用更加方便, 尤其在返回结果比较多的情况下
case 表达式
when 值1 then return1
when 值2 then return2
when 值3 then return3
...
else reurnx
end

比如, 对 "省市" 字段进行 区域的划分 (创建计算字段 "大区")

case [省市]
when "吉林" or "辽宁" or "黑龙江" then "东北"
when "安徽" or "江苏" or "浙江" or "福建" then "华东"
when "江西" or "河南" or "湖北" then "华中"

else "未划分"
end

ifnull

  • ifnull (expr1, expr2) 如果结果不是 null, 则返回 expr1 否则 返回 expr2 判断时可对 if xxx else ... 优化
  • ifnull ([当期值], [同期值]) 等价于, 将当期值的 缺失值 用 同期值填充了.

isnull

  • isnull (expr) 返回布尔值. 如果表达式为 null 则返回 "真" 否则返回 "伪"
  • 注意的是, isnull (null) 返回 "真"; isull(" ") 返回 "伪". 空字符串不是空哦, 注意跟有点编程语言的区分

聚合函数

Tableau 的拖拽字段到行列, 其实就是执行了大致 SQL: 聚合函数(度量字段) group by [维度]. 默认是 sum. 这就解释了在计算字段的时候, 有的时候需要手动加 sum, 有时候又不需要. 这就需要想想它 原本的 sql 大致是怎样的逻辑即可

count

  • 对离散或度量字段, 进行计数, 会忽略 null 值, 不去重

countd

  • 对离散或度量字段, 进行计数, 会忽略 null 值, 会去重
  • 统计门店数据量, 大区啥的都经常会用到. 注意, 表连接(混合数据源) 不能用 countd. 可通过 sql来 Union 解决

sum

  • 只能对度量字段 求和, 会忽略 Null 值. Tableau 默认对度量字段聚合,要看每一条则在 数据 -> 取消聚合 即查看

avg

  • 只能用于度量字段 求均值, 会忽略 Null 值

max, min

  • 度量字段的最值; 传字符串则返回原值; 也可用做两个时间比较(如上提到)

attr

  • attr ([expr]) 如果 expr 的每一行都有值, 则返回该值. 否则返回 * , 会忽略 Null 值

median

  • 只能用于度量字段, 求中位数, 会忽略 Null 值

表计算函数

total

  • 返回给定表达式的总计, 常用于计算 各自分区中 的全部行的 聚合值等
  • total (sum([销售量])) 表示计算 各自分区中的全部行的 sum([销售量])

index

  • 返回分区中当前行的索引, 不包含于是值相关的任何排序. 常用于对某个字段和 [手机品牌] 按特定的顺序排列

....

这部分很多, 但目前很多, 没用到, 或者是不会用.

详细级别函数

也称为 " LOD" 表达式 或 "LOD" 计算.

是除视图级别外, 的其他维度上支持聚合, 能实现将 一或多个 维度 附加到 任何的聚合表达式.

与表计算, 参考线等不同在于, LOD 是在数据源中计算的. 针对大型数据源, 会大幅度提高性能 但同时也会导致 Tableau 运行更加复杂的查询 (如多表连接), 在基础数据源缓慢的情况下, 影响性能.

  • 固定 (fixed) : 灵活选择 高于 或 低于 视图层, 各个维度进行 group by 再 aggregation
  • 包含 ( include): 用于创建 高于 视图层的, 来分组聚合.
  • 排除 ( eclude): 用于创建 低于 视图层的, 来进行分组聚合.

表达也似乎不大准确, 举个栗子就好了.

fixed

  • {fixed [维度1], [维度2]... : 聚合函数 (度量字段)} 表示 对维度 dim1, dim2 ... 的维度进行聚合操作.
  • fixed 计算 在维度筛选器 之前应用, 但会受到 上下文筛选器, 数据源筛选器, 和数据提取筛选器的影响. 如果想要将筛选器应用于 fixed 表达式级别 而又不想用 上下文筛选器. 则可将其改为 include 或 exclude 表达式

通常用 fixed 这样的 LOD 表达式, 可以生成度量或维度.

  • {fixed [商品ID] : sum ([销量])} 是计算, 每件商品, 销量的总和
  • {fixed [商品ID], [年份] : sum ([销量]) 是计算每件商品, 每年 的销量总和
  • {fiexd [商品ID] : min ([订单日期]) 是计算, 每件商品的, 最早订单日期

来个栗子, 以超市数据为例, 计算 每个地区中, 每个省份的销售量, 先建一个计算字段.

然后再将 "地区" 和 "省" 放到列, 再将 地区映射到 颜色做区分.

与之相关的还有 include 和 exclude 的 LOD 表达式, 我暂时没有用到过, 就不写了先. 用到再说吧.

我感觉, 这个 Tableau , 慢慢用下来, 还是有点香的, 慢慢记录有空的话.

posted @ 2020-03-09 20:03  致于数据科学家的小陈  阅读(12789)  评论(0编辑  收藏  举报