使用 ShopifyQL 查詢編輯器
您可以使用 ShopifyQL 搭配新版 Shopify 分析來探索自己商家的資料庫並擷取資料,從而更深入瞭解自家業務。
ShopifyQL (或稱 Shopify 查詢語言) 是 Shopify 專為商務功能打造的查詢語言。查詢語言是用於要求和擷取資料庫中的資料。您商店的資料會儲存在資料庫表格中,並以定義的欄和列進行結構化。欄會定義所包含的資訊類型 (如銷售額),而列則指定資料類型的實際值,例如 $2,450 美元的銷售額。
若要以有意義的格式擷取資料,您必須將查詢提交到資料庫。「查詢」是一種要求特定資料作為答案的提問,由關鍵字和相對應的參數所組成。建立查詢的方式是將多個關鍵字與特定參數互相組合。建立查詢後,即可執行查詢並收到一份報告。
術語表
術語 | 定義 |
---|---|
尺寸 | 一種屬性,可將資料區隔以便更清楚排序和顯示。維度的常見範例包括時間、商品和地點。維度會在 ShopifyQL 中的作為參數使用。 |
關鍵字 | ShopifyQL 語法,可做為指令來引導查詢。 |
指標 | 對資料的量性衡量。常見的指標範例包括總銷售額、訂單數量和總利潤。 |
參數 | ShopifyQL 語法,可識別要包含在查詢中的資料庫元素或詳細資訊。 |
運算子 | 用作部分查詢的保留字詞或字元。例如 STARTS WITH 、>= 或 last_week 。 |
ShopifyQL 語法
使用 ShopifyQL 製作有效的報告查詢時,必須符合下列要求:
- 您可以將整段查詢放在同一行,或放在不同的行上。
- 必須至少包含
FROM
和SHOW
關鍵字以及相應的參數。所有其他關鍵字和參數皆為選用內容。 - 查詢中的所有關鍵字必須依以下順序加入:
-
FROM
-
SHOW
-
WHERE
-
GROUP BY
-
WITH
TOTALS
、GROUP_TOTALS
、PERCENT_CHANGE
-
TIMESERIES
-
HAVING
-
SINCE
&UNTIL
,或DURING
-
COMPARE TO
和 (選用)UNTIL
-
ORDER BY
-
LIMIT
-
VISUALIZE
&TYPE
-
以下是使用正確語法撰寫查詢的 ShopifyQL 範例。關鍵字以粗體顯示,對應的參數以一般佔位符表示,選用的參數則位於括號中:
FROM table_name1, table_name2, ...
SHOW column1 { AS alias }, column2 { AS alias }, ...
WHERE condition
GROUP BY dimension
TIMESERIES time_dimension
WITH TOTALS, GROUP_TOTALS, PERCENT_CHANGE
HAVING condition
SINCE date_offset
UNTIL date_offset
DURING named_date_range
COMPARE TO [date_offset, ...]
ORDER BY column { ASC | DESC }
LIMIT number { OFFSET number }
VISUALIZE [alias1, alias2, ...]
TYPE { visualization_type }
LIMIT number
ShopifyQL 關鍵字
ShopifyQL 查詢範圍從基本查詢、高層級資料深入分析、全面查詢到詳細分析,應有盡有。每個關鍵字都有一個特定的函數來建立查詢。
關鍵字 | 說明 |
---|---|
FROM | 指定要選取資料的資料集表格。 |
SHOW | 選擇要從資料集表格擷取的欄位。 |
WHERE | 定義選取資料列必須滿足的一或數個條件。 |
GROUP BY | 按維度或時間維度將已擷取的資料分組。 |
WITH | 修改特定 ShopifyQL 關鍵字的行為。 |
TIMESERIES | 用於區分依時間維度分組,並在查詢中回填日期。 |
HAVING | 篩選分組後的查詢結果。 |
SINCE | 顯示過去特定時間之後的資料。通常與 UNTIL 搭配使用。 |
UNTIL | 顯示過去指定時間之前的資料。通常與 SINCE 或 COMPARE TO 搭配使用。 |
DURING | 顯示過去指定時間範圍內的資料。 |
COMPARE TO | 顯示與過去指定時間比較的資料。 |
ORDER BY | 指定排序資料所按照的欄位。 |
LIMIT | 限制所顯示的資料列數。 |
VISUALIZE | 以折線圖或長條圖的視覺化方式顯示資料。您可以使用 TYPE 來指定想呈現的視覺化類型。 |
AS | 用於將欄重新命名為自選名稱的選用關鍵字。 |
FROM 和 SHOW
建立最簡單的 ShopifyQL 查詢只需要兩個關鍵字:FROM
和 SHOW
(依序撰寫)。FROM
後面接著一或多個表格名稱參數,以指定要查詢的表格;SHOW
後面則接著數量不限的欄名稱參數,以指定要選取的欄位。
SHOW
可用於指定報告中指標和維度的回傳順序。
例如,您可以撰寫如下查詢以回傳總銷售額的總和:
FROM sales
SHOW total_sales
WHERE
您可以使用 WHERE
關鍵字,將維度篩選條件套用至整段 ShopifyQL 查詢。篩選條件可以使用比較運算子 (例如大於 >
)、邏輯運算子 (例如 AND
或 NOT
),以及符合的部分字串和陣列 (例如 STARTS WITH
和 CONTAINS
) 來修改。
WHERE
條件必須符合下列要求:
- 值必須以單引號 (') 而非雙引號 (") 括住。
- 條件不得包含任何算式。
- 條件只能參考維度,而不能參考指標。
舉例來說,如果您想回傳總銷售額並依帳單開具國家/地區篩選,則查詢內容如下:
FROM sales
SHOW total_sales, product_title, product_type, product_vendor
WHERE billing_country='Canada'
如上方範例所示,即使 SHOW
關鍵字中沒有包含 WHERE
參數,您還是可以使用該參數篩選結果集。在這種情況下,即使結果集中未包含 billing_country
,也只會篩選出加拿大訂單的總銷售額。
比較運算子
WHERE
關鍵字使用比較運算子來篩選資料。在上面的範例中,「=
」用於指定該查詢使用特定值來篩選結果,但您還有其他可運用的運算子:
選取比較運算子 | 說明 |
---|---|
= | 等於 |
!= | 不等於 |
< | 小於 |
> | 大於 |
<= | 小於或等於 |
>= | 大於或等於 |
邏輯運算子
若要進一步篩選資 料,您可以在查詢中新增邏輯運算子。ShopifyQL 邏輯運算子為:
邏輯運算子 | 說明 |
---|---|
AND | 篩選以納入所有符合此條件的列:以 AND 分隔的條件。 |
OR | 篩選以納入所有符合此條件的列:以 OR 分隔的任一條件。 |
NOT | 篩選僅包含不符合條件的列,例如不包含指定值的列。 |
您可以新增邏輯運算子,將多個篩選條件與 WHERE
關鍵字搭配使用。
以範例資料集查詢為例,若要針對包含水蜜桃乾、帳單地址位於加拿大,且套用折扣的所有訂單取得按月分組的銷貨淨額,則查詢如下:
FROM sales
SHOW total_sales, product_title, product_type, product_vendor
WHERE billing_country='Canada' AND product_title='Dried Peaches' AND discounts > 0
GROUP BY
若要依維度為指標分群 (例如依地區將銷售業績分組),請使用 GROUP BY
關鍵字。GROUP BY
關鍵字可以與任何維度參數搭配使用。
例如,按帳單開具國家/地區將總銷售額分組的查詢會寫成:
FROM sales
SHOW total_sales
GROUP BY billing_country, billing_region
以下是另一個使用時間維度來按月顯示總銷售額的查詢範例:
FROM sales
SHOW total_sales
GROUP BY month
上述查詢不會回傳任何沒有銷售業績的月份。如果您希望查詢能回傳完整不中斷的時間範圍,請使用 TIMESERIES
關鍵字。
FROM sales
SHOW total_sales
TIMESERIES month
SINCE last_year
UNTIL today
時間維度
這些是您可以用來將資料分組的時間維度:
運算子 | 說明 |
---|---|
second | 依小時的秒數分組。 |
minute | 依小時的分鐘數分組。 |
hour | 依日曆日小時分組。 |
day | 依日曆日分組。 |
week | 依日曆週分組。 |
month | 按日曆月分組。 |
quarter | 按日曆季分組。 |
year | 按日曆年度分組。 |
hour_of_day | 按 24 小時分組 (1、2、...、24)。 |
day_of_week | 依週間日分組 (週一、週二、週三、...、週日)。 |
week_of_year | 按年間週別分組 (1、2、...、52)。 |
month_of_year | 依年間月份分組 (1、2、...、12)。 |
TIMESERIES
若您想區分時間維度分組、查看一段時間內的指標,並在查詢中回填資料不存在的日期以轉換為時間序列圖,可以使用 TIMESERIES
關鍵字。
在此範例中,您將回填過去 15 天缺少的總銷售額資料:
FROM sales
SHOW total_sales
GROUP BY product_title, billing_country
TIMESERIES day
SINCE -15d
TIMESERIES 和欄順序
根據 GROUP BY
或 SHOW
值中是否指定和具有 TIMESERIES
,欄的順序可能有所變動。
TIMESERIES | SHOW | GROUP BY | 結果 |
---|---|---|---|
指定 | 不存在 | 不存在 |
TIMESERIES 是第一個維度。 |
指定 | 不存在 | 存在 | 時間維度的位置是由它在 GROUP BY 中的位置所定義。 |
指定 | 存在 | 存在 | 時間維度的位置是由它在 SHOW 中的位置所定義。 |
未指定 | 不存在 | 存在 | 時間維度的位置是由它在 GROUP BY 中的位置所定義。資料未回填。 |
未指定 | 存在 | 存在 | 時間維度的位置是由它在 SHOW 中的位置所定義。資料未回填。 |
未指定 | 存在 | 不存在 | 觸發語法錯誤,因為 SHOW 只能參考存在於 GROUP BY 的維度。 |
HAVING
與 WHERE
相似,您可以使用 HAVING
關鍵字來篩選分組後的查詢結果。篩選條件可以只有一個條件,而該條件可藉由比較運算子 (例如大於 >
) 和邏輯運算子 (例如 AND
或 NOT
) 來修改。與 WHERE
關鍵字不同,HAVING
可參考別名、彙總函數和分組的欄。
HAVING
要求您的查詢必須包含 GROUP BY
或 TIMESERIES
子句,因為 HAVING
會篩選使用 GROUP BY
或 TIMESERIES
分組後的查詢結果。
在此範例中,您將篩選總銷售額大於 1000 且小於 5000 元的商品總銷售額:
FROM sales
SHOW total_sales
GROUP BY product_title
HAVING total_sales > 1000 AND total_sales < 5000
WITH
WITH
關鍵字會修改其他特定 ShopifyQL 關鍵字的行為。三種可行修改方式如下:
-
TOTALS
:提供指標在依任何維度細分之前的最上層摘要。 -
GROUP_TOTALS
:在有分組彙總資料時,提供所有子群組的總計。 -
PERCENT_CHANGE
:為COMPARE TO
中的每個比較欄新增百分比變化指標。存在此修飾詞時,會為每個比較指標欄新增包含百分比變化的欄。
TOTALS
TOTALS
修飾詞提供指標在依其他維度細分之前的最上層摘要。使用 WITH TOTALS
時,查詢會在結果集中以額外欄的形式回傳總計,而欄名稱會包含指標名稱和「totals」(總計)。每列包含所有適用的總計值。
舉例來說,下方的查詢會顯示總銷售額的總計:
FROM sales
SHOW gross_sales, net_sales, total_sales
TIMESERIES day
WITH TOTALS
此查詢可能會回傳與下方類似的報告:
天 | 銷售總額 | 淨銷售 | 總銷售 | 銷售總額-總計 | 銷貨淨額-總計 | 總銷售額-總計 |
---|---|---|---|---|---|---|
2024-01-01 | 1 | 4 | 7 | 6 | 15 | 24 |
2024-01-02 | 2 | 5 | 8 | 6 | 15 | 24 |
2024-01-03 | 3 | 6 | 9 | 6 | 15 | 24 |
GROUP_TOTALS
GROUP_TOTALS
修飾詞會在有分組彙總資料時,提供所有子群組的總計。使用 WITH GROUP_TOTALS
時,查詢會在結果集中以額外欄的形式回傳總計,而欄名稱會包含指標名稱、加總計算的維度及「totals」(總計)。每列包含所有適用的總計值。
舉例來說,下方的查詢會顯示各帳單開具國家/地區總銷售額的總計:
FROM sales
SHOW customer_id, total_sales
GROUP BY customer_id, billing_country
WITH TOTALS, GROUP_TOTALS
此查詢可能會回傳與下方類似的報告:
國家/地區 | 顧客 ID | 總銷售 | 總銷售額國家/地區總計 | 總銷售額-總計 |
---|---|---|---|---|
美國 | 1 | 1 | 0 | 1 |
美國 | null | -1 | 1 | 1 |
加拿大 | 1 | 1 | 1 | 1 |
PERCENT_CHANGE
PERCENT_CHANGE
修飾詞會在使用 COMPARE TO
時,為每個比較欄新增百分比變化指標。使用 WITH PERCENT_CHANGE
時,查詢會在結果集中會以額外欄的形式回傳每個比較指標的百分比變化,而欄名稱包含指標名稱和「percent change」(百分比變化)。
計算百分比變化的公式: (base_column - comparison_column) * 100 / abs(comparison_column)
例如,此查詢使用 SINCE
和 COMPARE TO
,將前一個月的單日銷貨淨額與前一年同月的單日銷貨淨額進行比較,並新增一欄顯示百分比變化:
FROM sales
SHOW net_sales
TIMESERIES day
WITH PERCENT_CHANGE
SINCE -1m
UNTIL -0m
COMPARE TO previous_year
結果報告中的欄包含日、銷貨淨額、比較日、比較銷貨淨額,以及銷貨淨額百分比變化。
SINCE 和 UNTIL
如果要根據日期或某個期間篩選查詢,可以使用 SINCE
和 UNTIL
關鍵字以及相關聯的參數。這些關鍵字是僅用於篩選時間範圍的專屬關鍵字。如果 您使用 SINCE
且未定義 UNTIL
值,則時間範圍的結束會預設為 today
。
舉例來說,這是查詢過去 12 個月在加拿大截至昨日的銷貨淨額:
FROM orders
SHOW net_sales
WHERE billing_country = 'Canada'
GROUP BY month ALL
SINCE -12m
UNTIL yesterday
位移運算子
您可以依特定日期篩選,或依日期和時間偏移篩選。ShopifyQL 位移運算子如下:
位移運算子 | 說明 |
---|---|
-{#}s | 從執行查詢的日期和時間起算的秒數。 |
-{#}min | 從執行查詢的日期和時間起算的分鐘數。 |
-{#}h | 從執行查詢的日期和時間起算的小時數。 |
-{#}d | 從執行查詢的日期和時間起算的天數。 |
-{#}w | 從執行查詢的日期和時間起算的週數。 |
-{#}m | 從執行查詢的日期和時間起算的月數。 |
-{#}q | 從執行查詢的日期和時間起算的季數。 |
-{#}y | 從執行查詢的日期和時間起算的年數。 |
yyyy-MM-dd | 特定日期。 |
yyyy-MM-ddThh:mm:ss | 特定日期和時間。 |
日期函數
您可以在 SINCE
和 UNTIL
陳述式中,將任何日期範圍運算子 (特定日期除外) 與下列函數合併使用。與 SINCE
一起使用時,startOf...
函數會將時間截斷至相關時間單位 (分、小時、日、週、月、季、年) 的開頭;而與 UNTIL
一起使用時,endOf...
函數會將時間截斷至相關時間單位的結束。
日期函數單位必須與運算子的單位相符,才能回傳有效結果。舉例來說,startOfMonth(-1m)
正確,但 startOfMonth(-1d)
不正確。
日期函數 | 說明 |
---|---|
now | 執行查詢的日期和時間。 |
startOfMinute(-{#}min) | 將日期範圍運算子截斷至目標分鐘的開頭。 |
endOfMinute(-{#}min) | 將日期範圍運算子截斷至目標分鐘的結尾。 |
startOfHour(-{#}h) | 將日期範圍運算子截斷至目標小時的開頭。 |
endOfHour(-{#}h) | 將日期範圍運算子截斷至目標小時的結尾。 |
startOfDay(-{#}d) | 將日期範圍運算子截斷至目標日的開頭。 |
endOfDay(-{#}d) | 將日期範圍運算子截斷至目標日的結尾。 | startOfWeek(-{#}w) | 將日期範圍運算子截斷至目標週的開頭。 |
endOfWeek(-{#}w) | 將日期範圍運算子截斷至目標週的結尾。 |
startOfMonth(-{#}m) | 將日期範圍運算子截斷至目標月的開頭。 |
endOfMonth(-{#}m) | 將日期範圍運算子截斷至目標月的結尾。 |
startOfQuarter(-{#}q) | 將日期範圍運算子截斷至目標季的開頭。 |
endOfQuarter(-{#}q) | 將日期範圍運算子截斷至目標季的結尾。 |
startOfYear(-{#}y) | 將日期範圍運算子截斷至目標年份的開頭。 |
endOfYear(-{#}y) | 將日期範圍運算子截斷至目標年份的結尾。 |
例如,如果今天為 2022 年 11 月 8 日,則您可以使用下列查詢回傳 2020 年 1 月 1 日至 2022 年 10 月 31 日的銷售總額:
FROM sales
SHOW gross_sales
SINCE startOfYear(-2y)
UNTIL endOfMonth(-1m)
DURING
DURING
關鍵字可簡化日期範圍的日期篩選,並取代 SINCE
和 UNTIL
。您可以使用 DURING
關鍵字來篩選已知期間的查詢結果 (例如日曆年或特定月份),或篩選每年日期有所變動的日期範圍 (例如黑色星期五和網購星期一)。例如:
FROM sales
SHOW total_sales
GROUP BY day
DURING bfcm2021
指定日期範圍運算子
DURING
接受下列所有已命名的日期範圍運算子:
已命名的日期範圍運算子 | 說明 |
---|---|
today | 查詢執行日期。 |
yesterday | 自執行查詢起,上一個 24 小時週期。 |
this_week | 本週 (日曆週)。 |
this_month | 本月 (日曆月)。 |
this_quarter | 本季 (日曆季)。 |
this_year | 今年 (日曆年)。 |
last_week | 上一週 (日曆週)。 |
last_month | 上個月 (日曆月)。 |
last_quarter | 上一季 (日曆季)。 |
last_year | 去年 (日曆年)。 |
bfcmYYYY | 指定年份的黑色星期五和網購星期一範圍。例如,bfcm2022 會回傳 2022 年 11 月 25 日至 28 日的結果。 |
COMPARE TO
您可以使用 COMPARE TO
關鍵字,根據 SINCE
和 UNTIL
或 DURING
的日期範圍與 COMPARE TO
中的日期範圍比較資料。
您可以將 COMPARE TO
關鍵字與下列類型的參數搭配使用:
- 絕對日期 (如
2023-01-01
):包含指定期間的指標,以及與絕對日期相同期間的比較指標。 -
指定日期 (如
last_week
):包含指定期間的指標,以及與指定日期相同期間的比較指標。-
COMPARE TO
使用的運算子不一定要與DURING
所使用的時間長度相同。如果未提供UNTIL
值,則計算的時 間範圍會等於DURING
中指定的值。舉例來說,DURING this_week COMPARE TO last_month
會將本週的資料與上個月初開始的一週期間比較。
-
位移日期 (如
-3q
):包含指定期間的指標,以及與相對日期相同期間的比較指標。多個日期比較 (如
-1y, -2y
):比較特定日期範圍與其他多個日期範圍的資料。這在追蹤多個期間的變化時非常實用。如果您在查詢中將日期維度與
COMPARE TO
搭配使用,則必須使用TIMESERIES
,而不是GROUP BY
。
以下範例是用於比較前一個月與去年同月份的銷貨淨額:
FROM sales
SHOW net_sales, product_title
GROUP BY product_title
TIMESERIES day
SINCE -1m
UNTIL -0m
COMPARE TO previous_year
相對日期範圍運算子
相對運算子回傳與基準日期範圍相同的時間長度,但會移回至指定期間。除了指定日期範圍運算子外,COMPARE TO
還接受以下相對運算子:
相對日期範圍運算子 | 說明 |
---|---|
previous_period | 基準日期範圍前的一個期間。 |
previous_year | 基準日期範圍的前一年。 |
previous_quarter | 基準日期範圍的前一季。 |
previous_month | 基準日期範圍的前一個月。 |
previous_week | 基準日期範圍的前一週。 |
previous_day | 基準日期範圍的前一天。 |
previous_hour | 基準日期範圍的前一個小時。 |
previous_minute | 基準日期範圍的前一分鐘。 |
previous_second | 基準日期範圍的前一秒。 |
ORDER BY
您可以使用 ORDER BY
關鍵字及參數,指定要如何排序查詢回傳的資料:ASC
為遞增順序,而 DESC
為遞減順序。
您可以在 ORDER BY
關鍵字中指定查詢中包含的任何指標或維度,包含多個欄位。
例如,此查詢會回傳過去一年所有商品和子類商品的銷貨淨額;結果會先依產品名稱的字母順序排序,然後再依產品類型的字母反向排序:
FROM sales
SHOW net_sales
GROUP BY product_title, product_type
SINCE -1y
UNTIL today
ORDER BY product_title, product_type DESC
您撰寫指標或維度的順序將有所影響。如果您為 ORDER BY
指定多個值,系統會根據提供的順序來排序每個指標或維度。
TIMESERIES 和欄順序
根據查詢是否包含 TIMESERIES
和 ORDER BY
,欄的順序可能會有所變動。
TIMESERIES | ORDER BY | 結果 |
---|---|---|
存在 | 不存在 | 結果依 TIMESERIES 維度排序。 |
存在 | 存在 | 結果先後依時間維度 TIMESERIES 和 ORDER BY 維度排序。 |
不存在 | 存在 | 結果依 ORDER BY 維度排序。 |
不存在 | 不存在 | 結果依第一個 SHOW 欄排序。 |
LIMIT
您可以使用 LIMIT
關鍵字來指定查詢回傳的列數上限。若只想瞭解每欄資料的顯示方式,或查詢可能需較長時間才能回傳值的大型報告時,這非常有用。您可以將 LIMIT
與 ORDER BY
合併使用來建立頂端和底部清單。
如果未指定 LIMIT
值,則查詢會預設為 1000 列。
您還可以選擇使用 { OFFSET # }
參數來略過特定數量的列,然後再開始回傳列資料。產生的字詞格式類似:LIMIT 15 { OFFSET 5 }
。
此範例使用 LIMIT
和 ORDER BY
建立過去 3 個月銷售前 10 名的商品清單:
FROM sales
SHOW gross_sales as total_gross_sales
GROUP BY product_title
SINCE -3m
UNTIL today
ORDER BY total_gross_sales DESC
LIMIT 10
VISUALIZE 和 TYPE
您可以使用 VISUALIZE
關鍵字撰寫 ShopifyQL 查詢,並以圖像視覺化的方式呈現資料。支援的視覺效果包含下列值:
-
bar
-
stacked_bar
-
stacked_horizontal_bar
-
line
-
simple_bar
-
stacked_area
-
single_metric
-
donut
-
list
-
list_with_dimension_values
-
horizontal_bar
-
cohort
-
single_stacked_bar
-
funnel
-
grouped_bar
-
horizontal_grouped_bar
-
table
-
grid
TYPE
為選用關鍵字,且必須搭配單一視覺化類型。如果 TYPE
未包含在查詢中,ShopifyQL 會自動決定最適合查詢的視覺化效果;如果您的查詢無法以視覺化方式呈現,則 ShopifyQL 會回傳表格資料。
VISUALIZE
還接受選用的 LIMIT
關鍵字,其中的參數為要顯示的數據點數量上限。
例如,您可以使用趨勢線,視覺化呈現過去一年各月的銷售趨勢資料。此查詢會回傳時間序列圖表,顯示去年各月的銷售總額。銷售總額會以單行表示,x 軸標示為月,y 軸標示為銷售總額:
FROM sales
SHOW gross_sales
TIMESERIES month
SINCE -1y
UNTIL today
VISUALIZE gross_sales TYPE line
AS
關鍵字 AS
是一個選用的關鍵字,可用於為欄或彙總函數的回傳值重新命名 (或提供別名)。
AS
僅接受單一參數。如果別名名稱中有空格,則必須用雙引號 (") 將別名括住。
FROM sales
SHOW total_sales AS "My Total Sales"
其他 ShopifyQL 函數和運算子
ShopifyQL 包含下列其他運算子和函數:
-
數學運算子,例如
+
或/
-
函數,例如
round()
和trim()
- 隱含連接
-
部分符合的字串和陣列,例如
STARTS WITH
和CONTAINS
- 註解
數學運算子
ShopifyQL 可以對資料中的指標進行數學運算。下列的數學運算子可供使用:
數學運算子 | 說明 |
---|---|
+ | 將兩組數字相加。 |
- | 將兩組數字相減。 |
* | 將兩組數字相乘。 |
/ | 將兩組數字相除。 |
舉例來說,此查詢會計算去年每個地區的訂單價值。將數學運算子搭配指標使用時,您可以採用 AS
關鍵字為新指標指定新名稱。
FROM sales
SHOW (net_sales + returns) AS order_value, orders, (net_sales + returns)/orders AS sales_per_order
GROUP BY billing_region
SINCE -1y
UNTIL today
函數
ShopifyQL 函數可讓您彙總欄資料或合併欄以建立新值,類似 Microsoft Excel 中的樞紐分析表。目前版本的 ShopifyQL 支援下列函數運算子:
函數運算子 | 說明 |
---|---|
TRIM(column_name) | 移除字串的前後空白。 |
ROUND(column_name, decimal_places) | Rounds a numerical value to the nearest integer or specified decimal places. In this function, decimal_places is an integer value:
|
For example, this query uses the rounding function on the gross_sales
column, but omits the decimal_places
argument to round the value to the integer:
FROM sales
SHOW average_order_value, round(gross_sales)
GROUP BY billing_region
SINCE 2021-01-01
UNTIL 2021-12-31
Implicit joins
A join allows you to view metrics from different domains together, side by side. Joins are done implicitly and intelligently in ShopifyQL.
ShopifyQL has the following join capabilities:
- ShopifyQL allows dimension field joins when there is a single
FROM
table in the query. - Automatic left join on dimension fields.
- ShopifyQL allows multi-fact joins (when there are multiple
FROM
tables in the queries). - Automatic full join on multi-fact joins, which support any number of tables or schemas and grouped by dimensions.
- Metrics in multi-fact joins can use functions and math.
Shopify QL has the following join restrictions:
- Join field must have the same name in all joined schemas.
- Join field must be in
GROUP BY
. - Join field can't use functions or math.
-
FROM
is necessary for multi-fact joins to work. - In a multi-fact join, every
GROUP BY
must be in all schemas and is considered a field on which to be joined.
For example, this query uses a multi-fact join:
FROM sales, sessions
SHOW day, total_sales, sessions
GROUP BY day
SINCE 2023-10-03
ORDER BY day
Partial string and array matching
You can use the following operators for partial string and array matching:
Operator | Description |
---|---|
STARTS WITH | Return all rows where a column starts with a prefix. |
ENDS WITH | Return all rows where a column ends with a suffix. |
CONTAINS | Return all rows where a column contains a part of a string, or an element in an array. |
Some examples of partial string matching using operators include the following queries:
FROM sales
SHOW product_title
WHERE product_title STARTS WITH 'Summer'
GROUP BY product_title
FROM sales
SHOW product_title
WHERE product_title ENDS WITH 'kit'
GROUP BY product_title
FROM sales
SHOW product_title
WHERE product_title CONTAINS 'Beef'
GROUP BY product_title
The CONTAINS
operator can be used to match elements within arrays, including integers, strings, and decimals. This matching isn't case-sensitive. Some examples of array matching using CONTAINS
include the following queries:
FROM sales
SHOW orders
WHERE products_bought_together_ids CONTAINS 101
FROM customers
SHOW total_number_of_orders
WHERE customer_cities CONTAINS 'seattle'
FROM sales
SHOW orders
WHERE variants_bought_together_variant_prices CONTAINS 10.2
Comments
You can use comments to explain sections of ShopifyQL statements, or to prevent the execution of a ShopifyQL statement. Any text within a comment will be ignored during execution time.
Single line comments start with --
and end at the end of the line.
Multi-line comments start with /*
and end with */
.
FROM sales
SHOW average_order_value, gross_sales
-- the line below has been commented out and won't run
-- GROUP BY billing_region
WHERE billing_country = 'United States'
/*
this line and the two lines below it have been commented out and won't run
SINCE 2021-01-01
UNTIL 2021-12-31
*/