在資料分析中,一些複雜的邏輯或模型可通過自訂SQL建立資料表。並且自訂SQL支援傳參,可滿足更複雜多變的分析情境。
前提條件
您已擷取資料,請參見串連資料來源。
使用限制
API資料來源不支援自訂SQL。
輸入SQL代碼
您可以通過以下2種方式添加自訂SQL。
進入自訂SQL頁面。
入口1:在資料來源頁面,單擊右上方的SQL建立資料集。

入口2:資料集編輯頁面,在左側面板選擇資料來源,畫布中沒有任何資料表時,單擊畫布中的點擊使用SQL代碼建立資料集或左側面板中的SQL代碼建立表。

輸入SQL代碼後,單擊運行。

SQL樣本如下:
SELECT report_date, order_level, shipping_type, area, price, order_number from company_sales_record where $expr{report_date :report_date} and $expr{order_level :order_level} and $expr{order_number :order_number}運行成功後,您可以在運行結果頁簽,看到結果預覽。

單擊確認編輯,儲存自訂SQL建立的資料集。
修改SQL代碼
您可以通過以下三種方式修改SQL代碼:
單擊目標表右側的
表徵圖。
單擊畫布上的目標表,在下側的表詳情中,單擊編輯代碼。

單擊目標表右側的
表徵圖,選擇編輯代碼。
SQL文法
資料集自訂SQL主要支援的是查詢語句。自訂SQL語句中不支援INSERT、UPDATE、DELETE的文法,也不支援使用預存程序。
查詢SQL的文法遵從使用的資料來源的資料庫文法,比如資料來源使用的MySQL,那麼自訂SQL需要按照MySQL查詢語句來寫,有些特殊的資料庫文法在Quick BI側不支援使用,比如MongoDB中find()和findone(),在自訂SQL中需要用SELECT語句來查詢資料。
在自訂SQL中添加註釋時,可以使用“--”+空格+注釋的格式。

SQL樣本如下:
SELECT area, -- 地區 price -- 價格 from company_sales_record自訂SQL中多表關聯時,需要注意表別名和欄位別名的使用,以及不同資料庫文法對別名的寫法可能不同。
資料集自訂SQL的行數沒有限制,但是自訂SQL字元長度不能超過65536個字元。必要時可以對自訂SQL做拆分和邏輯最佳化,或者分開建多個資料集,然後再進行關聯查詢使用。
資料集SQL將下發到資料庫執行,並將結果資料返回到Quick BI,查詢等待時間是5分鐘,超過5分鐘後未返回資料會逾時報錯。
如果查詢未超過5分鐘但是報了查詢逾時錯誤,常見原因是使用者側的SLB等網路裝置設定了逾時時間,或者防火牆做了網路攔截策略,導致查詢介面請求被攔截。
預留位置
Quick BI提供預留位置的方式進行傳參,在查看報表並進行資料分析的過程中,您可以通過查詢控制項把預留位置的值傳到SQL中,從而實現資料的靈活分析。Quick BI支援值預留位置和運算式預留位置,您可以按照需求進行配置。
類型 | 描述 | 使用情境 | 格式 |
值預留位置 | 可通過儀表板上的查詢控制項傳入一個值、一組值。 說明 當預留位置是日期時,需要選擇具體的日期格式,來控制傳入值的格式。 | 適用於大部分需要傳參的情境。 |
|
運算式預留位置 | 可通過儀表板上的查詢控制項傳入一個條件。 | 當儀表板上的篩選條件中,使用者可以自由修改篩選方式,需要使用運算式預留位置,將整個篩選條件都傳入SQL。 例如下圖儀表板使用者可設定 |
|
配置方式
根據業務需要寫SQL,加入預留位置。
在SQL代碼編輯頁面,單擊預留位置管理。

在預留位置管理面板,配置以下預留位置並單擊確定。

配置項請參見建立資料集。
說明如果預留位置應用在select語句後面,必須設定全域生效的預設值。
例如,在建立資料集時在select語句後面加了預留位置“profit_range”,代碼如下:
SELECT report_date, order_level, shipping_type,price,order_number,area, case when profit_amt< ${profit_range} then'虧損' when profit_amt> ${profit_range} then'盈利' else '持平' end '訂單等級' from company_sales_record where $expr{report_date :report_date} and $expr{order_level :order_level} and $expr{order_number :order_number}此時如果不設定預設值,無法正常運行。

需在預留位置管理裡設定“profit_range”的查詢預設值。

預設值設定後可以正常運行,運行結果如下:

單擊儲存,儲存資料集。

在頂部功能表列選擇單擊
表徵圖或單擊
表徵圖選擇建立儀表板。
在儀表板編輯頁面添加查詢條件,綁定預留位置。
例如,在設定查詢條件時,用一個下拉單選篩選area,綁定SQL預留位置,可傳入1個值。

用文本篩選過濾order_number,綁定SQL參數,傳入一個條件。

當儀表板查詢時,會按照查詢條件把對應內容傳入值預留位置和運算式預留位置中。
例如,儀表板查詢條件如下圖所示。

則對應的SQL為如下:
SELECT * FROM company_sales_record WHERE area = '華北' AND order_number > 100預留位置用法樣本:
SELECT * FROM tablename WHERE area in ('$val{area_ph}') -- 文本類型 多選 AND name = '$val{name_ph}' -- 文本類型 單選 AND number = $val{number_ph} -- 數實值型別 AND report_date > '$val{report_date_ph.get(0)}' -- 日期類型 擷取日期範圍控制項起始日期 AND report_date < '$val{report_date_ph.get(1)}' -- 日期類型 擷取日期範圍控制項結束日期
預留位置的使用情境請參見預留位置。
相容歷史寫法:
值預留位置(原預留位置)的歷史寫法:${預留位置名}
運算式預留位置(原參數)的歷史寫法:${物理欄位名:參數名}
