目錄
1、Tableau中的運算符
運算符是一個符號,通知編譯器執行特定的數學或邏輯操作,Tableau有多個運算符用於創建計算字段和公式,可用的運算符的詳細信息和操作的順序(優先級)如下:
運算符類型:常規運算符、算術運算符、關係運算符、邏輯運算符
(1)常規運算符
下表顯示了Tableau支持的常規運算符。這些運算符對數字、字符和日期數據類型起作用
運算符 |
描述 | 例子 |
+(addition) |
它添加兩個數字, 它連接兩個字符串, 它增加了日期的天數 |
7+3 利潤+銷售額 \'abc\'+\'def\'=\'abcdef\' #April 15,2004# + 15 = #April 30,2004# |
-(subtraction) |
它減去兩個數字 它從日期中減去天數 |
-(7+3) = -10 #April16,2004# - 15 = #April1,2004# |
(2)算術運算符
這些運算符僅對數字數據類型起作用
運算符 | 描述 | 例子 |
*(Multiplication) | 數值乘法 | 23 * 2 =46 |
/(Division) | 數字部 | 45/2 = 22.5 |
%(modulo) | 數值分割提醒 | 13%2 = 1 |
^(power) | 提升到權力 | 2 ^ 3 = 8 |
(3)比較運算符
這些運算符用於表達式,每個運算符比較兩個數字、日期或字符串,並返回布爾值(TRUE或FALSE)
運算符 | 描述 | 例子 |
2 ^ 3 = 8… (此時=不是賦值等號) |
比較兩個數字或兩個字符串或兩個日期相等。返回布爾值TRUE或FALSE |
\'Hello\'=\'Hello\' S = 15/3 |
! = 或(不等於) | 比較兩個數字或兩個字符串或兩個日期不相等。返回布爾值TRUE,如果他們返回FALSE |
\'好\'\'壞\' 18! = 37/2 |
>(大於) 等等 |
比較兩個數字或兩個字符串或兩個日期,其中第一個參數大於秒。返回FALSE或TRUE |
[利潤] > 2000 [Category] > \'Q\' [發貨日期] >= April 1,2004# |
比較兩個數字或兩個字符串或兩個日期,其中第一個參數小於秒。返回FALSE或TRUE |
[利潤] [類別] [發貨日期] |
(4)邏輯運算符
這些運算符用於其結果爲布爾值的表達式,給出輸出爲TRUE或FALSE
運算符 | 描述 | 例子 |
---|---|---|
AND | 如果存在於AND運算符兩側的表達式或布爾值被計算爲TRUE,則結果爲TRUE。 否則結果爲FALSE。 | [發貨日期]> #April 1,2012#AND [Profit]> 10000 |
OR | 如果存在於AND運算符兩側的任何一個或兩個表達式或布爾值被計算爲TRUE,則結果爲TRUE。 否則結果爲FALSE。 | [發貨日期]> #April 1,2012#OR [Profit]> 10000 |
NOT | 此運算符否定其後存在的表達式的布爾值。 | NOT [Ship Date]> #April 1,2012# |
(5)優先級
① -(negate) ② ^(power) ③ *,/,% ④ +,- ⑤ ==,>,=
2、函數
常見內置函數:數字函數、字符串函數、日期函數、邏輯函數、聚合函數
(1)數字函數
數字函數 | ||
功能 | 描述 | 例子 |
CEILING(number) | 將數字四捨五入爲等於或大於值的最接近的整數 |
CEILING(2.145) = 3 |
FLOOR(數字) | 將數字舍入爲值相等或更小的最近整數 | FLOOR(3.1415) = 3 |
ROUND(數字,[小數]) | 將數字四捨五入到指定的位數 | ROUND(3.14152,2) = 3.14 |
POWER(基數,次方) | 將數字提高到指定的地方 | POWER(5,3) = 125 |
ABS(數字) | 取絕對值 | ABS(-10) |
ACOS(number) | 返回給定數字的反餘弦,結果以弧度表示 | ACOS(-1) = 3.14159265358979 |
ASIN(number) | 返回給定數字的反正弦,結果以弧度表示 | ASIN(1) = 1.5707963267949 |
ATAN(number) | 返回給定數字的反正切,結果以弧度表示 | ATAN(180) = 1.5652408283942 |
ATAN2(y number,x number) | 返回兩個給定數字(x和y)的反正切,結果以弧度表示 | ATAN2(2,1) = 1.10714 |
COS(number); COT(number) |
返回角度的餘弦,以弧度爲單位指定角度; 返回角度的餘切,以弧度爲單位指定角度 |
COS(PI()/4) = 0.707106781186548; COT(PI()/4) = 1 |
DEGREES(number) | 將以弧度表示的給定數字轉換爲度數 | DEGREES(PI()/4) = 45.0 |
DIV(整數1,整數2) | 返回將整數1除以整數2的除法運算的整數部分 | DIV(11,2) = 5 |
EXP(number) | 返回e的給定數字次冪 |
EXP(2) = 7,389 EXP(-[Growth Rate]*[Time]) |
LN(number) | 返回數字的自然對數。如果數字小於或等於0,則返回null | |
LOG(number [,base]) | 返回數字以給定底數爲底的對數,如果省略了底數值,則使用底數10 | |
MAX(number.number) | 返回兩個參數(必須是同種類型)中的較大值。如果任一參數爲null,則返回null,MAX也可應用於聚合計算中的單個字段 |
MAX(4,7) MAX(Sales,Profit) MAX(First Name,[Last Name]) |
MIN(number,number) | 返回兩個參數(必須是同種類型)中的較小值。如果任一參數爲null,則返回null,MAX也可應用於聚合計算中的單個字段 |
MIN(4,7) MIN(Sales,Profit) MIN(First Name,[Last Name]) |
PI() | 返回數字常量pi:3.14159 | |
POWER(number,power) | 計算數字的指定次冪 |
POWER(5,2) = 52 = 25 POWER(Temperature,2) 也可以使用^符號: 5^2 = POWER(5,2) = 25 |
Radians(number) | 將給定數字從度數轉換爲弧度 | RADIANS(180) = 3.14159 |
SQUARE(number) | 返回數字的平方 | SQUARE(5) = 25 |
如何使用:在列/行裏都可以,直接輸入計算函數,右鍵選擇維度查看計算結果
(2)字符串函數
功能 | 描述 | 例子 |
ASCII(string) | 返回string的第一個字符的ASCII代碼 | ASCII('A') = 65 |
CHAR(number) | 返回通過ASCII代碼number編碼的字符 | CHAR(65) = 'A' |
Contains(string,substring) (區分大小寫) |
如果給定字符串包含指定子字符串,則返回true | CONTAINS("Calculation","alcu") = true |
ENDSWITH(string, substring) (區分大小寫) |
如果給定字符串以指定子字符串結尾,則返回true,會忽略尾隨空格 | ENDSWITH("Tableau","leau") = true |
FIND(string,substring,[start]) | 返回substring在string中的索引位置,如果未找到substring,則返回0。如果添加了可選參數start,則函數會忽略在索引位置start之前出現的任何substring實例,字符串中的第一個字符爲位置1 |
FIND("Calculation","alcu") = 2 FIND("Calculation","a",3) = 7 FIND("Calculation","aswd") = 0 |
FINDNTH(string,substring, occurrence) |
返回指定字符串內的第n個子字符串的位置,其中n由occurrence參數定義 | FINDNTH("Calculation","a",2) = 7 |
LEFT(string,number) | 返回字符串最左側一定數量的字符 | LEFT("Matador",4) = "Mata" |
LEN(string) | 返回字符串長度 | LEN("Matador") = 7 |
LOWER(string) UPPER(string) |
返回string,其所有字符爲小寫; 返回string,其所有字符爲大寫; |
LOWER("ProductVersion") = "productversion" |
LTRIM(string); RTRIM(string); TRIM(string)
|
返回移除了所有前導空格的字符串(只去前,不去後); 返回移除了所有尾隨空格的字符串; 返回移除了前導和尾隨空格的字符串。 |
LTRIM(" cij dcjd ") = “cij dcjd ” RTRIM(" cij dcjd ") = “ cij dcjd” len(TRIM(" Hello ")) = 5 |
MAX(a,b) (從左向右依次比較,先比較第一個,比不出依次往後) |
返回a和b(必須爲相同類型)中的較大值,此函數常用於比較數字,但也對字符串有效。對於字符串,MAX查找數據庫爲該列定義的排序序列中的最高值。如果任一參數爲Null,則返回Null | MAX("APPLE","banana")= "banana" |
MID(string,start,[length]) | 返回從索引位置start開始的字符串。字符串中第一個字符的位置爲1.如果添加了可選參數length,則返回的字符串僅包含該數量的字符。 |
MID("Calculation",2) = "alculation" MID("Calculation",2,5) = "alcul" |
MIN(a,b) | 返回a和b(必須爲相同類型)中的較小值,此函數常用於比較數字,但也對字符串有效。對於字符串,MIN查找排序序列中的最低值,如果任一參數爲Null,則返回Null | MIN("APPLE","banana")= "APPLE" |
REPLACE(string,substring, replacement) |
在string中搜索substring並將其替換爲replacement。如果未找到substring,則字符串保持不變 | REPLACE("V8.5","8.5","9.0") = "V9.0" |
RIGHT(string,number) | 返回string中最右側一定數量的字符 | RIGHT("Calculation",4) = "tion" |
SPACE(number) | 返回由指定number個重複空格組成的字符串 | SPACE("1") = " " |
SPLIT(string,delimiter,token number) |
返回字符串中的一個子字符串,並使用分隔符字符將字符串分爲一系列標記. 字符串將被解釋爲分隔符和標記的交替序列。因此,對於字符串abc-def-i-j,分隔符字符爲“-”,標記爲abc、def、i、j,將這些標記想像爲標記1至4.SPLIT將返回與標記編號對應的標記。如果標記編號爲正,則從字符串的左側開始計算標記,如果標記編號爲負,則從右側開始計算標記。 |
SPLIT("a-b-c-d","-",2) = "b" |
STARTSWITH(string,substring) | 如果string以substring開頭,則返回true,會忽略前導空格 | STARTSWITH("Joker","Jo") = true |
(3)日期函數
Tableau提供了多種日期函數。許多示例將#符號用於日期表達式。此外,許多日期函數還使用date_part,它是一個常量字符串參數,可以使用的有效date_part值爲:
有效date_part值 | |
date_part | 值 |
'year' | 四位數年份 |
'quarter' | 1-4 |
‘month’ | 1-12 或 ”January“、”February“等 |
”dayofyear“ | 一年中的第幾天:1月1日爲1、2月1日爲32,以此類推 |
”day“ | 1-31 |
”weekday“ | 1-7 或 ”Sunday“、”Monday“等 |
”week“ | 1-52 |
”hour“ | 0-23 |
”minute“ | 0-59 |
”second“ | 0-60 |
日期函數 | ||
DATEADD(date_part,interval,date) | 返回指定日期,該日期的指定date_part中添加了指定的數字interval |
DATEADD("month",3,#2004-04-15#) = 2004-07-15 12:00:00 AM 該表達式會向日期#2004-04-15#添加三個月 |
DATEDIFF(date_part,date1,date2,[start_of_week]) |
返回date1與date2之差(以date_part的單位表示); start_of_week參數(可用於指定哪一天是一週的第一天)是可選的。可能的值爲”monday“、”tuesday“等。如果省略,一週的開始由數據源確定。 |
DATEDIFF("week",#2013-09-22#,#2013-09-24#,"monday") = 1
DATEDIFF('week',#2013-09-22#,#2013-09-24#,'sunday') = 0 |
DATENAME(date_part,date,[start_of_week]) |
以字符串的形式返回date的date_part; start_of_week參數(可用於指定哪一天是一週的第一天)是可選的。可能的值爲”monday“、”tuesday“等。如果省略,一週的開始由數據源確定。
|
DATENAME('Year',#2004-04-15#) = "2004"
DATENAME('month',#2004-04-15#) = "April" |
DATEPART(date_part,date,[start_of_week]) |
以整數的形式返回date的date_part; start_of_week參數(可用於指定哪一天是一週的第一天)是可選的。可能的值爲”monday“、”tuesday“等。如果省略,一週的開始由數據源確定。
注:當date_part爲工作日時,會忽略start_of_week參數。這是因爲Tableau依賴固定工作日順序來應用偏移 |
DATEPART('year',#2004-04-15#) = 2004
DATEPART('month',#2004-04-15#) =4 |
DATETRUNC(date_part,date,[start_of_week]) |
按date_part指定的準確度截斷指定日期。此函數返回新日期。例如,以月份級別截斷處於月份中間的日期時,此函數返回當月的第一天。 start_of_week參數(可用於指定哪一天是一週的第一天)是可選的。可能的值爲”monday“、”tuesday“等。如果省略,一週的開始由數據源確定。 |
DATETRUNC('quarter',#2004-08-15#) = 2004-07-01 12:00:00 AM
DATETRUNC('month',#2004-04-15#) = 2004-04-01 12:00:00 AM |
DAY/MONTH/YEAR(date) | 以整數的形式返回給定日期的天/月/年 | DAY(#2004-04-12#) = 12 |
ISDATE(string) | 如果給定字符串爲有效日期,則返回true | ISDATE("2001-1-23") |
MAKEDATE(year,month,day) |
返回一個依據指定年份、月份和日期構造的日期值; 可用於Tableau數據提取,檢查在其他數據源中的可用性 |
MAKEDATE(2004,4,15) = #April 15,2004# |
MAKEDATETIME(date,time) | 返回合併了date和time的datetime。日期可以是date、datetime或string類型。時間必須是datetime。此功能僅適用於與MySQL兼容的連接(對於Tableau,除MySQL之外,還有Amazon Aurora 和 Amazon Aurora) |
MAKEDATETIME(#1890-12-30#,#07:59:00#) = #12/30/1899 7:59:00 AM#
yyyy/m/d hh:nn:ss |
NOW() |
返回當前日期和時間。 返回值因連接的特性而異: 對於實時、未發佈的連接,NOW返回數據服務器時間; 對於實時、已發佈的連接,NOW返回數據服務器時間; 對於未發佈的數據提取,NOW返回本地系統時間; 對於發佈的數據提取,NOW返回Tableau Server數據引擎的本地時間。如果在不同時區中有多臺工作計算機,這可能會產生不一致的結果。 |
NOW() = 2019/8/21 17:10:01 |
TODAY() | 返回當前日期 | TODAY() = 2019/8/21 |
(4)聚合函數
功能 | 描述 |
AVG(expression) | 返回表達式中所有值得平均值。AVG只能與數字字段一起使用,空值被忽略 |
COUNT(expression) | 返回組中的項目數,不計算空值 |
COUNTD(expression) | 返回組中不同項目的數量,不對Null值計數 |
MEDIAN(expression) | 返回所有記錄的表達式的中位數,中值只能與數字字段一起使用,空值被忽略 |
STDEV(expression) | 返回基於樣本總體的給定表達式中所有值的統一標準偏差 |
MIN,MAX,SUM |
(5)類型轉換函數
計算中任何表達式的結果都可以轉換爲特定數據類型。轉換函數爲 STR()、DATE()、DATETIME()、INT() 和 FLOAT()。例如,如果要將浮點數(如 3.14)轉換爲整數,則可以編寫 INT(3.14)。結果爲 3(這是整數)。下面介紹了轉換函數。
可以將布爾值轉換爲整數、浮點數或字符串,但不能將其轉換爲日期。True 爲 1、1.0 或“1”,而 False 爲 0、0.0 或“0”。Unknown 映射到 Null。
功能 | 描述 | 例子 |
DATE(expression) | 在給定數字、字符串或日期表達式的情況下返回日期。 |
DATE("4/15/2004")=
注:第二個和第三個,引號不可省 |
DATETIME(expression) | 在給定數字、字符串或日期表達式的情況下返回日期時間。 | DATETIME(“April 15, 2005 07:59:00”) = April 15, 2005 07:59:00 |
DATEPARSE(format, string) | 將字符串轉換爲指定格式的日期時間。是否支持某些區域設置特定的格式由計算機的系統設置確定。數據中出現的不需要解析的字母應該用單引號 (' ') 引起來。對於值之間沒有分隔符的格式(如 Mmddyy),請驗證它們是否按預期方式解析。該格式必須是常量字符串,而非字段值。如果數據與格式不匹配,此函數將返回 Null 。 |
|
FLOAT(expression) | 將其參數轉換爲浮點數。 |
|
INT(expression) | 將其參數轉換爲整數。對於表達式,此函數將結果截斷爲最接近於 0 的整數。 |
字符串轉換爲整數時會先轉換爲浮點數,然後舍入。 |
STR(expression) | 將其參數轉換爲字符串。 | STR([Age]) 會提取名爲 Age 的度量中的所有值,並將這些值轉換爲字符串。 |
(6)邏輯函數
①AND
定義:對兩個表達式執行邏輯合取計算
語法:IF <expr1> AND <expr2> THEN <then> END
例子:IF (ATTR([Market]) = "Africa" AND SUM([Sales]) > [Emerging Threshold] )THEN "Well Performing"
②CASE
定義:執行邏輯測試並返回相應的值。CASE函數可評估expression,並將其與一系列值(value1、value2等)比較,然後返回結果。遇到一個與expression匹配的值時,CASE返回相應的返回值。如果未找到匹配值,則使用默認返回表達式。如果不存在默認返回表達式並且沒有任何值匹配,則會返回Null
語法:CASE <expression> WHEN <value1> THEN <return1> WHEN <value2> THEN <return2> ... ELSE <default return> END
實例:CASE [Region] WHEN 'West' THEN 1 WHEN 'East' THEN 2 ELSE 3 END
③ELSE
定義:測試一系列表達式,同時爲第一個爲 true 的 <expr> 返回 <then> 值。
語法:IF <expr> THEN <then> ELSE <else> END
示例:If [Profit] > 0 THEN 'Profitable' ELSE 'Loss' END
④ELSEIF
定義:測試一系列表達式,同時爲第一個爲 true 的 <expr> 返回 <then> 值。
語法:IF <expr> THEN <then> [ELSEIF <expr2> THEN <then2>...] [ELSE <else>] END
示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Breakeven' ELSE 'Loss' END
⑤END
定義:測試一系列表達式,同時爲第一個爲 true 的 <expr> 返回 <then> 值。必須放在表達式的結尾。
語法:IF <expr> THEN <then> [ELSEIF <expr2> THEN <then2>...] [ELSE <else>] END
示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Breakeven' ELSE 'Loss' END
⑥IF
定義:測試一系列表達式,同時爲第一個爲 true 的 <expr> 返回 <then> 值。
語法:IF <expr> THEN <then> [ELSEIF <expr2> THEN <then2>...] [ELSE <else>] END
示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Breakeven' ELSE 'Loss' END
⑦IFNULL
定義:如果 <expr1> 不爲 null,則返回該表達式,否則返回 <expr2>。
語法:IFNULL(expr1, expr2)
示例:IFNULL([Profit], 0)
⑧IIF
定義:檢查某個條件是否得到滿足,如果爲 TRUE 則返回一個值,如果爲 FALSE 則返回另一個值,如果未知,則返回可選的第三個值或 NULL。
語法:IIF(test, then, else, [unknown])
示例:IIF([Profit] > 0, 'Profit', 'Loss')
⑨ISDATE
定義:如果給定字符串爲有效日期,則返回 true。
語法:ISDATE(string)
示例:ISDATE("2004-04-15") = True
⑩ISNULL
定義:如果表達式未包含有效數據 (Null),則返回 true。
語法:ISNULL(expression)
示例:ISNULL([Profit])
11 MAX
定義:返回單一表達式所有記錄中的最大值,或返回每條記錄兩個表達式中的最大值。
語法:MAX(expression)
或 Max(expr1, expr2)
示例:MAX([Sales])
12 MIN
定義:返回單一表達式所有記錄中的最小值,或返回每條記錄兩個表達式中的最小值。
語法:MIN(expression)
或 MIN(expr1, expr2)
示例:MIN([Profit])
13 NOT
定義:對兩個表達式執行邏輯非運算。
語法:IF NOT <expr> THEN <then> END
示例:IF NOT [Profit] > 0 THEN "Unprofitable" END
或者
定義:對兩個表達式執行邏輯析取操作。
語法:IF <expr1> OR <expr2> THEN <then> END
示例:IF [Profit] < 0 OR [Profit] = 0 THEN "Needs Improvement" END
14 THEN
定義:測試一系列表達式,同時爲第一個爲 true 的 <expr> 返回 <then> 值。
語法:IF <expre> THEN <then> [ELSEIF ,expr2> THEN <then2>...] [ELSE <else>] END
示例:IF [Profit] > 0 THEN 'Profitable' ELSEIF [Profit] = 0 THEN 'Break even' ELSE 'unprofitable' END
15 WHEN
定義:查找第一個與 <expr> 匹配的 <value>,並返回對應的 <return>。
語法:CASE <expr> WHEN <Value1> THEN <return1> ... [ELSE <else>] END
示例:CASE [RomanNumberal] WHEN 'I' THEN 1 WHEN 'II' THEN 2 ELSE 3 END
16 ZN
定義:如果 <expression> 不爲 null,則返回該表達式,否則返回零。
語法:ZN(expression)
示例:ZN([Profit])
3、在tableau中創建公式
4、Tableau數值計算
(1)計算字段
(2)聚合字段
5、Tableau字符串計算
6、Tableau日期計算
示例:瞭解每種商品的【訂單日期】與【發貨日期】的時間總間隔
7、表計算
(1)表計算01-差異計算
原始圖表:
①居中:
②設置貨幣格式
③差異計算
(2)百分比差異計算
(3)百分比計算
:”百分比“表計算會將值計算爲某個其他值的百分比 - 通常計算爲表中前一個值的百分比
(4)總額百分比計算
對於視圖中的每個標記,“總額百分比”表計算會將值計算爲當前分區中所有值的百分比。
(5)表計算05-排名計算
“排名”表計算將計算分區中每個值的排名
(6)表計算06-百分位計算
“百分位”表計算將在分區中計算每個值的百分位排名。
對於表計算,分配給最低排名值得百分位爲0,分配給最高排名值的百分位爲100(默認升序),系統會按排名爲所有值分配百分位,因此,對於1、3、22、67這一組的四個值,百分位將分別爲0%、33%、67%和100%。
(7)彙總計算
對於“彙總”和“移動計算”表計算,您可以選擇轉換兩次值,以獲得您想要的結果-即除了添加主要計算之外再添加從屬表計算。例如:可以添加一個初始表計算來計算每一年內每個月的銷售彙總,然後添加從屬計算一年與下一年同期相比每個月的年基差異百分比。
①彙總計算
②從屬計算
(8)表計算08-移動計算
“移動計算”表計算(有時稱爲 滾動計算)會對當前值之前和/或之後指定數目的值執行聚合(總計值、平均值、最小值或最大值)來確定視圖中的標記值。移動計算通常用於平滑短期數據波動,這樣可以查看長期趨勢。例如,對於證券數據,市場每天都在波動,很難通過每日的上升和下降把握全局,可以使用移動計算來定義一系列值通過所選聚合進行彙總。
(9)快速表計算
8、臨時計算
(1)臨時計算是在處理視圖中功能區上的字段時可創建和更新的計算;臨時計算也稱爲調用類型輸入計算或內聯計算
(2)多行臨時計算
鍵入臨時計算時,可以使用Shift+Enter另起一行。但是,臨時計算中只有當前行始終可見,因此對於正在查看或編輯計算並且無法得知計算中包含多行的任何人來說,這可能會造成混淆。
多行臨時計算的第一行可能是用作計算標題的備註。這是提交計算之後功能區唯一可見的行。
//City and State //代表註釋
[City] +' , ' + [State]