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 , 慢慢用下來, 還是有點香的, 慢慢記錄有空的話.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM