全部產品
Search
文件中心

Quick BI:自訂SQL

更新時間:Jun 21, 2025

在資料分析中,一些複雜的邏輯或模型可通過自訂SQL建立資料表。並且自訂SQL支援傳參,可滿足更複雜多變的分析情境。

前提條件

您已擷取資料,請參見串連資料來源

使用限制

API資料來源不支援自訂SQL。

輸入SQL代碼

您可以通過以下2種方式添加自訂SQL。

  1. 進入自訂SQL頁面。

    • 入口1:在資料來源頁面,單擊右上方的SQL建立資料集image

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

  2. 輸入SQL代碼後,單擊運行

    image

    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}

    運行成功後,您可以在運行結果頁簽,看到結果預覽。image

  3. 單擊確認編輯,儲存自訂SQL建立的資料集。

修改SQL代碼

您可以通過以下三種方式修改SQL代碼:

  • 單擊目標表右側的image表徵圖。image

  • 單擊畫布上的目標表,在下側的表詳情中,單擊編輯代碼image

  • 單擊目標表右側的image表徵圖,選擇編輯代碼

    image

SQL文法

  • 資料集自訂SQL主要支援的是查詢語句。自訂SQL語句中不支援INSERT、UPDATE、DELETE的文法,也不支援使用預存程序。

  • 查詢SQL的文法遵從使用的資料來源的資料庫文法,比如資料來源使用的MySQL,那麼自訂SQL需要按照MySQL查詢語句來寫,有些特殊的資料庫文法在Quick BI側不支援使用,比如MongoDB中find()和findone(),在自訂SQL中需要用SELECT語句來查詢資料。

  • 在自訂SQL中添加註釋時,可以使用“--”+空格+注釋的格式。

    image

    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支援值預留位置和運算式預留位置,您可以按照需求進行配置。

類型

描述

使用情境

格式

值預留位置

可通過儀表板上的查詢控制項傳入一個值、一組值。

說明

當預留位置是日期時,需要選擇具體的日期格式,來控制傳入值的格式。

適用於大部分需要傳參的情境。

'$val{預留位置名}'

運算式預留位置

可通過儀表板上的查詢控制項傳入一個條件。

當儀表板上的篩選條件中,使用者可以自由修改篩選方式,需要使用運算式預留位置,將整個篩選條件都傳入SQL。

例如下圖儀表板使用者可設定利潤>50或者利潤<50,需要連同操作符一起傳入SQL。參數傳參

$expr{物理欄位名:預留位置名}

配置方式

根據業務需要寫SQL,加入預留位置。

  1. 在SQL代碼編輯頁面,單擊預留位置管理

    image

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

    image

    配置項請參見建立資料集

    說明

    如果預留位置應用在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}

    此時如果不設定預設值,無法正常運行。

    image

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

    image

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

    image

  3. 單擊儲存,儲存資料集。image

  4. 在頂部功能表列選擇單擊image表徵圖或單擊image表徵圖選擇建立儀表板

    image

  5. 在儀表板編輯頁面添加查詢條件,綁定預留位置。

    例如,在設定查詢條件時,用一個下拉單選篩選area,綁定SQL預留位置,可傳入1個值。image.png

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

  6. 當儀表板查詢時,會按照查詢條件把對應內容傳入值預留位置和運算式預留位置中。

    例如,儀表板查詢條件如下圖所示。image.png

    則對應的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)}' -- 日期類型 擷取日期範圍控制項結束日期

預留位置的使用情境請參見預留位置

說明

相容歷史寫法:

值預留位置(原預留位置)的歷史寫法:${預留位置名}

運算式預留位置(原參數)的歷史寫法:${物理欄位名:參數名}