運算式列表
如需運算式簡介,請查看自訂運算式總覽。
-
函數
彙總
彙總運算式會將欄位中的所有值納入考量。它們只能在查詢產生器的摘要區段中使用。
平均值
傳回欄位中值的平均值。
語法:Average(欄位)
範例:Average([數量])
會傳回「數量
」欄位的平均值。
計數
傳回選取資料中的列數(也稱為記錄)。
語法:Count
範例:Count
如果表格或結果傳回 10 列,Count
將傳回 10
。
條件計數
僅計算條件為 true 的列。
語法:CountIf(條件)
。
範例:CountIf([小計] > 100)
會傳回小計大於 100 的列數。
相異值
此欄位相異值的數量。
語法:Distinct(欄位)
。
Distinct([姓氏])
。傳回欄位中不重複姓氏的計數。重複項(例如姓氏「Smith」)不計入。
最大值
傳回欄位中找到的最大值。
語法:Max(欄位)
。
範例:Max([年齡])
會傳回「年齡
」欄位中所有值中最大的年齡。
中位數
傳回指定欄位的中位數。
語法:Median(欄位)
。
範例:Median([年齡])
會找出年齡中點,其中一半年齡較大,一半年齡較小。
不支援 median
的資料庫:Druid、MariaDB、MongoDB、MySQL、SQLite、Vertica 和 SQL Server。Presto 僅提供近似結果。
最小值
傳回欄位中找到的最小值。
語法:Min(欄位)
。
範例:Min([薪資])
會找出「薪資
」欄位中所有薪資中最低的薪資。
百分位數
傳回欄位在百分位數的值。
語法:Percentile(欄位, 百分位數值)
範例:Percentile([分數], 0.9)
會傳回該欄位中所有值第 90 個百分位數的值。
不支援 percentile
的資料庫:Druid、H2、MariaDB、MySQL、MongoDB、SQL Server、SQLite、Vertica。Presto 僅提供近似結果。
比例
以小數形式傳回資料中符合條件的列百分比。
語法:Share(條件)
範例:Share([顏色] = "藍色")
會傳回「顏色
」欄位設定為 藍色
的列數,除以總列數。
標準差
計算欄位的標準差,這是衡量一組值變異的指標。標準差低表示值群集在平均值附近,而標準差高表示值分佈在很廣的範圍內。
語法:StandardDeviation(欄位)
範例:StandardDeviation([人口])
會傳回「人口
」欄位中值的標準差。
不支援 StandardDeviation
的資料庫:Druid、SQLite。
總和
加總欄位的所有值。
語法:Sum(欄位)
範例:Sum([小計])
會加總「小計
」欄位中的所有值。
條件總和
僅針對條件為 true 的列加總指定的欄位。
語法:SumIf(欄位, 條件)
。
範例:SumIf([小計], [訂單狀態] = "有效")
會加總狀態為「有效」的訂單的所有小計。
變異數
傳回指定欄位的數值變異數。
語法:Variance(欄位)
範例:Variance([溫度])
將傳回該欄位中所有溫度的平均溫度的離散程度量測值。
不支援 Variance
的資料庫:Druid、SQLite。
函數
函數運算式適用於每個個別值。它們可用於變更或篩選欄位中的值,或建立新的自訂欄位。
邏輯函數
邏輯函數會判斷條件是否滿足,或判斷要根據條件傳回哪個值。
介於
如果日期或數字欄位的值落在指定範圍內,則傳回 true。否則傳回 false。
語法:between(欄位, 開始, 結束)
範例:如果您使用運算式 between([建立於], "2019-01-01", "2020-12-31")
進行篩選,Metabase 會傳回針對該運算式傳回 true 的列,在本例中,「建立於
」日期落在 2019 年 1 月 1 日到 2020 年 12 月 31 日的範圍內,包括開始日期 (2019-01-01
) 和結束日期 (2020-12-31
)。
相關項目:間隔。
case
case
(別名 if
)會針對案例列表測試運算式,並傳回第一個相符案例的對應值,如果沒有符合的案例,則傳回選用的預設值。
語法:case(條件, 輸出, …)
範例:case([重量] > 200, "大型", [重量] > 150, "中型", "小型")
如果「重量
」為 250,則運算式會傳回「大型」。在本例中,預設值為「小型」,因此任何 重量
150 或更小的值都會傳回「小型」。
coalesce
依序查看每個引數中的值,並傳回每列的第一個非 Null 值。
語法:coalesce(值 1, 值 2, …)
範例:coalesce([評論], [筆記], "無評論")
。如果該列的「評論
」和「筆記
」欄位都為 Null,則運算式會傳回字串「無評論」。
if
if
是 case 的別名。針對條件列表測試運算式,並傳回第一個相符案例的對應值,如果沒有符合的案例,則傳回選用的預設值。
語法:if(條件, 輸出, ...)
範例: if([Weight] > 200, "Large", [Weight] > 150, "Medium", "Small")
如果「Weight
」為 250,則此運算式會傳回 “Large”。在此情況下,預設值為 “Small”,因此任何「Weight
」150 或更小的值都會傳回 “Small”。
isnull
如果欄位為空值 (null),則傳回 true。
語法: isnull(column)
範例: isnull([Tax])
如果該列的欄位中沒有值,則會傳回 true。
notnull
如果欄位包含值,則傳回 true。
語法: notnull(column)
範例: notnull([Tax])
如果該列的欄位中有值,則會傳回 true。
數學函數
數學函數實作常見的數學運算。
abs
傳回指定欄位的絕對值(正值)。
語法: abs(column)
範例: abs([Debt])
。如果「Debt
」為 -100,abs(-100)
會傳回 100
。
ceil
將小數點向上捨入(ceil,意指天花板)。
語法: ceil(column)
。
範例: ceil([Price])
。 ceil(2.99)
會傳回 3。
exp
傳回 歐拉數 e,其次方為提供的數字。(Euler 的發音類似 “Oy-ler”)。
語法: exp(column)
。
範例: exp([Interest Months])
相關: power。
floor
將小數點向下捨去。
語法: floor(column)
範例: floor([Price])
。如果「Price
」為 1.99,此運算式會傳回 1。
log
傳回數字的以 10 為底的對數。
語法: log(column)
。
範例: log([Value])
。
power
將數字提高到指數值的次方。
語法: power(column, exponent)
。
範例: power([Length], 2)
。如果長度為「3
」,此運算式會傳回「9
」(3 的二次方為 3*3)。
不支援 power
的資料庫:SQLite。
相關: exp。
round
將小數點數字四捨五入到最接近的整數值。
語法: round(column)
。
範例: round([Temperature])
。如果溫度為攝氏「13.5
」度,此運算式會傳回「14
」。
範例: round([Temperature] * 10) / 10
。如果溫度為「100.75
」,此運算式會傳回「100.8
」。
sqrt
傳回值的平方根。
語法: sqrt(column)
。
範例: sqrt([Hypotenuse])
。
不支援 sqrt
的資料庫:SQLite。
相關: Power。
字串函數
字串函數可操作或驗證字串資料。
concat
將兩個或多個字串組合在一起。
語法: concat(value1, value2, …)
範例: concat([Last Name], ", ", [First Name])
會產生格式為「Last Name, First Name」的字串,例如「Palazzo, Enrico」。
contains
檢查 string1
是否包含 string2
。
預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive"
來執行不區分大小寫的比對。
語法: contains(string1, string2)
用於區分大小寫的比對。
contains(string1, string2, "case-insensitive")
用於不區分大小寫的比對。
範例: contains([Status], "Class")
。
如果「Status
」為 “Classified”,此運算式會傳回 true
。如果「Status
」為 “classified”,此運算式會傳回 false
,因為大小寫不符。
相關: doesNotContain、 regexextract。
doesNotContain
檢查 string1
是否包含 string2
。
預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive"
來執行不區分大小寫的比對。
語法: doesNotContain(string1, string2)
用於區分大小寫的比對。
doesNotContain(string1, string2, "case-insensitive")
用於不區分大小寫的比對。
範例: doesNotContain([Status], "Class")
。如果「Status
」為 “Classified”,此運算式會傳回 false
。
相關: contains、 regexextract。
domain
從 URL 或電子郵件中擷取網域名稱。
語法: domain(urlOrEmail)
。
範例: domain([Page URL])
。如果「[Page URL]
」欄位的值為 https://metabase.dev.org.tw
,domain([Page URL])
會傳回 metabase
。domain([Email])
會從 hello@metabase.com
擷取 metabase
。
endsWith
如果文字的結尾與比較文字相符,則傳回 true。
預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive"
來執行不區分大小寫的比對。
語法: endsWith(text, comparison)
用於區分大小寫的比對。
endsWith(text, comparison, "case-insensitive")
用於不區分大小寫的比對。
範例: endsWith([Appetite], "hungry")
相關: startsWith、 contains、 doesNotContain。
host
從 URL 或電子郵件中擷取主機,即網域和 TLD。
語法: host(urlOrEmail)
。
範例: host([Page URL])
。如果「[Page URL]
」欄位的值為 https://metabase.dev.org.tw
,host([Page URL])
會傳回 metabase.com
。host([Email])
會從 hello@metabase.com
擷取 metabase.com
。
in
如果 value1
等於 value2
(或 value3
等,如果已指定),則傳回 true。
in(value1, value2, ...)
value1
是要檢查的欄位或值。
value2, ...
是要檢查的欄位或值清單。
相關: contains、 startsWith、 endsWith。
isempty
如果字串欄位包含空字串或為空值,則傳回 true。在非字串欄位上呼叫此函數會導致錯誤。您可以針對非字串欄位使用 isnull。
語法: isempty(column)
範例: isempty([Feedback])
如果「Feedback
」是空字串(''
)或不包含值,則會傳回 true。
ltrim
從文字字串中移除開頭的空格。
語法: ltrim(text)
範例: ltrim([Comment])
。如果註解為「 I'd prefer not to
」,ltrim
會傳回「I'd prefer not to
」。
length
傳回文字中的字元數。
語法: length(text)
範例: length([Comment])
。如果「comment
」為 “wizard”,length
會傳回 6(“wizard” 有六個字元)。
lower
傳回全部小寫的文字字串。
語法: lower(text)
。
範例: lower([Status])
。如果「Status
」為 “QUIET”,此運算式會傳回 “quiet”。
相關: upper。
notempty
如果字串欄位包含的值不是空字串,則傳回 true。在非字串欄位上呼叫此函數會導致錯誤。您可以針對非字串欄位使用 notnull。
語法: notempty(column)
範例: notempty([Feedback])
如果「Feedback
」包含的值不是空字串(''
),則會傳回 true。
regexextract
⚠️
regexextract
不適用於 MongoDB、SQLite 和 SQL Server。對於 Druid,regexextract
僅適用於 Druid-JDBC 驅動程式。
根據正規表示式擷取相符的子字串。
語法: regexextract(text, regular_expression)
。
範例: regexextract([Address], "[0-9]+")
。
不支援 regexextract
的資料庫:H2、SQL Server、SQLite。
相關: contains、 doesNotContain、 substring。
replace
將輸入文字中所有出現的搜尋文字取代為取代文字。
語法: replace(text, find, replace)
。
範例: replace([Title], "Enormous", "Gigantic")
。
rtrim
從文字字串中移除結尾的空格。
語法: rtrim(text)
範例: rtrim([Comment])
。如果註解為 “Fear is the mindkiller. “,則此運算式會傳回 “Fear is the mindkiller.”
startsWith
如果文字的開頭與比較文字相符,則傳回 true。預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive"
來執行不區分大小寫的比對。
語法: startsWith(text, comparison)
用於區分大小寫的比對。
startsWith(text, comparison, "case-insensitive")
用於不區分大小寫的比對。
範例: startsWith([Course Name], "Computer Science")
對於開頭為 “Computer Science” 的課程名稱(例如 “Computer Science 101: An introduction”)會傳回 true。
對於 “Computer science 201: Data structures” 會傳回 false,因為 “science” 的大小寫與比較文字中的大小寫不符。
startsWith([Course Name], "Computer Science", "case-insensitive")
對於 “Computer Science 101: An introduction” 和 “Computer science 201: Data structures” 都會傳回 true。
相關: endsWith、 contains、 doesNotContain。
subdomain
從 URL 擷取子網域。忽略 www
(傳回空白字串)。
語法: subdomain(url)
。
範例: subdomain([Page URL])
。如果「[Page URL]
」欄位的值為 https://status.metabase.com
,subdomain([Page URL])
會傳回 status
。
substring
傳回提供的文字的一部分,由起始位置和長度指定。
語法: substring(text, position, length)
範例: substring([Title], 1, 10)
傳回字串的前 10 個字母(字串索引從位置 1 開始)。
相關: regexextract、 replace。
trim
從文字字串中移除開頭和結尾的空格。
語法: trim(text)
範例: trim([Comment])
將移除註解兩側的任何空格字元。
upper
傳回全部大寫的文字。
語法: upper(text)
。
範例: upper([Status])
。如果 status 為 “hyper”,upper("hyper")
會傳回 “HYPER”。
日期函數
日期函數可操作、擷取或建立日期和時間值。
convertTimezone
將日期或時間戳記值移至指定的時區。
語法: convertTimezone(column, target, source)
。
範例: convertTimezone("2022-12-28T12:00:00", "Canada/Pacific", "Canada/Eastern")
會傳回值 2022-12-28T09:00:00
,顯示為 2022 年 12 月 28 日,上午 9:00
。
datetimeAdd
將一些時間單位新增至日期或時間戳記值。
語法: datetimeAdd(column, amount, unit)
。
範例: datetimeAdd("2021-03-25", 1, "month")
會傳回值 2021-04-25
,顯示為 2021 年 4 月 25 日
。
amount
必須是整數,而不是小數。例如,您無法新增「半年」(0.5)。
相關: between、 datetimeSubtract。
datetimeDiff
傳回兩個日期時間之間以某個時間單位表示的差異。例如,datetimeDiff(d1, d2, "day")
會傳回 d1
和 d2
之間的天數。
語法: datetimeDiff(datetime1, datetime2, unit)
。
範例: datetimeDiff("2022-02-01", "2022-03-01", "month")
會傳回 1
。
請參閱 datetimediff 的資料庫限制。
datetimeSubtract
從日期或時間戳記值中減去一些時間單位。
語法: datetimeSubtract(column, amount, unit)
。
範例: datetimeSubtract("2021-03-25", 1, "month")
會傳回值 2021-02-25
,顯示為 2021 年 2 月 25 日
。
amount
必須是整數,而不是小數。例如,您無法減去「半年」(0.5)。
相關: between、 datetimeAdd。
day
取得日期時間並傳回月份中的日,以整數表示。
語法: day([datetime column])
。
範例: day("2021-03-25T12:52:37")
會以整數形式傳回日,25
。
dayName
根據星期幾的數字 (1-7) 傳回星期幾的當地語言名稱。遵循每週的第一天設定。
語法: dayName(dayNumber)
。
範例: dayName(1)
會傳回 星期日
,除非您變更每週的第一天設定。
相關: quarterName、 monthName。
hour
取得日期時間並傳回小時,以整數表示 (0-23)。
語法: hour([datetime column])
。
範例: hour("2021-03-25T12:52:37")
會傳回 12
。
interval
檢查日期欄位的值,以查看是否在相對範圍內。
語法: interval(column, number, text)
。
範例: interval([Created At], -1, "month")
。
number
必須是整數。您不能使用小數值。
相關: between。
minute
取得日期時間並傳回分鐘,以整數表示 (0-59)。
語法: minute([datetime column])
。
範例: minute("2021-03-25T12:52:37")
會傳回 52
。
month
取得日期時間並傳回月份數字 (1-12),以整數表示。
語法: month([datetime column])
。
範例: month("2021-03-25T12:52:37")
會以整數形式傳回月份,3
。
monthName
傳回指定月份的當地語言簡稱。
語法: monthName([Birthday Month])
範例: monthName(10)
會傳回 Oct
代表十月。
相關: dayName、 quarterName。
now
使用您的 Metabase 報告時區傳回目前的日期和時間。
語法: now
。
quarter
取得日期時間並傳回一年中的季度編號 (1-4),以整數表示。
語法: quarter([datetime column])
。
範例: quarter("2021-03-25T12:52:37")
會針對第一季傳回 1
。
quarterName
給定季度編號 (1-4),傳回類似 Q1
的字串。
語法: quarterName([Fiscal Quarter])
。
範例: quarterName(3)
會傳回 Q3
。
relativeDateTime
取得相對於目前時間的時間戳記。
語法: relativeDateTime(number, text)
number
:間隔期間,負值表示過去的時間。「number
」必須是整數。您不能使用小數值。
text
:間隔類型,例如「"day"
」、「"month"
」、「"year"
」
relativeDateTime
只能在條件運算式中使用。
範例: [Orders → Created At] < relativeDateTime(-30, "day")
將篩選出在目前日期 30 天前建立的訂單。
相關: datetimeAdd、 datetimeSubtract。
second
取得日期時間並傳回分鐘中的秒數 (0-59),以整數表示。
語法: second([datetime column])
。
範例: second("2021-03-25T12:52:37")
會傳回整數 37
。
timeSpan
取得指定長度的時間間隔。
語法: timeSpan(number, text)
。
number
:間隔期間,負值表示過去的時間。「number
」必須是整數。您不能使用小數值。
text
:間隔類型,例如「"day"
」、「"month"
」、「"year"
」
範例: [Orders → Created At] + timeSpan(7, "day")
會傳回「Created At
」日期後 7 天的日期。
week
取得日期時間並傳回週數,以整數表示。
語法: week(column, mode)
。
範例: week("2021-03-25T12:52:37")
會以整數形式傳回週數,12
。
- 欄位:日期或日期時間值的欄位名稱。
- 模式:選用。
- ISO:(預設)第 1 週從一月份第一個星期四之前的星期一開始。
- 美國:第 1 週從 1 月 1 日開始。所有其他週從星期日開始。
- 執行個體:第 1 週從 1 月 1 日開始。所有其他週從 Metabase 當地語系化設定中定義的日期開始。
請注意,在查詢產生器中依年份的週進行摘要時,會使用不同的模式來判斷第一週,請參閱年份的週以取得更多資訊。
weekday
取得日期時間並傳回整數 (1-7),表示星期幾的數字。
語法: weekday(column)
- 欄位:日期時間欄位。
範例
case(
weekday([Created At]) = 1, "Sunday",
weekday([Created At]) = 2, "Monday",
weekday([Created At]) = 3, "Tuesday",
weekday([Created At]) = 4, "Wednesday",
weekday([Created At]) = 5, "Thursday",
weekday([Created At]) = 6, "Friday",
weekday([Created At]) = 7, "Saturday")
year
取得日期時間並傳回年份,以整數表示。
語法: year([datetime column])
。
範例: year("2021-03-25T12:52:37")
會以整數形式傳回年份 2021,2021
。
視窗函數
視窗函數只能在「摘要」區段中使用。它們不能用於建立自訂欄位或自訂篩選條件。
累加計數
如需更多資訊,請查看我們的累積函數頁面。
跨越分類的列的累加總計。
語法: CumulativeCount
。
範例: CumulativeCount
。
累加總和
如需更多資訊,請查看我們的累積函數頁面。
跨越分類的欄位的滾動總和。
語法: CumulativeSum(column)
。
範例: CumulativeSum([Subtotal])
。
位移
⚠️
Offset
函數目前不適用於 MySQL/MariaDB、MongoDB 和 Druid。
如需更多資訊,請查看我們的 Offset 頁面。
傳回不同列中運算式的值。Offset
只能在查詢產生器的「摘要」步驟中使用(您不能使用 Offset
來建立自訂欄位)。
語法: Offset(expression, rowOffset)
expression
是要從不同列取得的值。
rowOffset
是相對於目前列的數字。例如,-1
代表前一列,或 1
代表下一列。
範例: Offset(Sum([Total]), -1)
會從前一列取得 Sum([Total])
值。
限制
- 彙總運算式只能在查詢產生器的「摘要」區段中使用。
資料庫限制
上方和此處已摘要說明每個彙總和函數的限制
H2(包括 Metabase 範例資料庫):Median
、Percentile
、convertTimezone
和 regexextract
。
Athena:convertTimezone
。
Databricks:convertTimezone
。
Druid:Median
、Percentile
、StandardDeviation
、power
、log
、exp
、sqrt
、Offset
。函數 regexextract
僅適用於 Druid-JDBC 驅動程式。
MongoDB:Median
、Percentile
、power
、log
、exp
、sqrt
、Offset
、regexextract
MariaDB:Median
、Percentile
、Offset
。
MySQL:Median
、Percentile
、Offset
。
Presto:convertTimezone
。僅針對 Median
和 Percentile
提供近似結果。
Redshift:Average
將針對整數欄位傳回 整數結果。
SparkSQL:convertTimezone
。
SQL Server:Median
、Percentile
和 regexextract
。
SQLite:exp
、log
、Median
、Percentile
、power
、regexextract
、StandardDeviation
、sqrt
和 Variance
。
Vertica:Median
和 Percentile
。
如果您正在使用或維護協力廠商資料庫驅動程式,請參閱 wiki,以瞭解您的驅動程式可能會受到什麼影響。
請查看我們關於查詢產生器中的自訂運算式教學課程,以瞭解更多資訊。
閱讀其他Metabase 版本的文件。