zoukankan      html  css  js  c++  java
  • 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 , 慢慢用下来, 还是有点香的, 慢慢记录有空的话.

  • 相关阅读:
    putty配置
    BroadcastReceiver应用详解 (转)
    linux主设备号和次设备号
    Enable screen lock and HOME key (eclair and older versions)(转)
    C#获取用户桌面等特殊系统路径
    java中Thread与Runnable的区别
    博文索引
    FlinkCDC实践
    关于libxml2.so.2不被Gstreamer链接的解决
    s.length什么意思
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/12450662.html
Copyright © 2011-2022 走看看