Direct Query
DIRECT QUERY 陳述式允許您透過使用 Direct Discovery 功能的 ODBC 或 OLE DB 連線,來存取表格。
語法:
DIRECT QUERY DIMENSION fieldlist [MEASURE fieldlist] [DETAIL fieldlist] FROM tablelist
[WHERE where_clause]
DIMENSION、MEASURE 及 DETAIL 關鍵字可以按任何順序使用。
所有的 DIRECT QUERY 陳述式都需要有 DIMENSION 和 FROM 關鍵字子句。FROM 關鍵字必須出現在 DIMENSION 關鍵字之後。
緊接著 DIMENSION 關鍵字之後所指定的欄位會載入於記憶體內,並可用於在記憶體內資料和 Direct Discovery 資料之間建立關聯。
使用 MEASURE 關鍵字,您可以定義 Qlik Sense 在「中繼層級」才會識別的欄位。在資料載入處理程序期間,量值欄位的實際資料僅位於資料庫上,並且由視覺化中使用的圖表運算式以臨機操作為基礎進行擷取。
一般來說,含離散值、要作為維度的欄位應以 DIMENSION 關鍵字載入,而僅要用於彙總的數字應以 MEASURE 關鍵字選取。
DETAIL 欄位可提供資訊或詳細資料 (如 [註解] 欄位),使用者可顯示在向下探查詳細資料的表格方塊中。DETAIL 欄位無法用於圖表運算式。
設計上,DIRECT QUERY 陳述式對於支援 SQL 的資料來源採取資料來源中性的態度。因此,相同的 DIRECT QUERY 陳述式不須變更即可用於不同的 SQL 資料庫。Direct Discovery 會視需要產生適合資料庫的查詢。
當使用者知道要查詢的資料庫為何,並且想要在 SQL 中利用資料庫特定的延伸,就可使用原生資料來源語法。原生資料來源語法支援︰
- 在 DIMENSION 和 MEASURE 子句中作為欄位運算式
- 作為 WHERE 子句的內容
範例:
DIMENSION Dim1, Dim2MEASURENATIVE ('X % Y') AS X_MOD_Y
DIMENSION Dim1, Dim2MEASURE X, YFROM TableNameWHERE NATIVE ('EMAIL MATCHES "\*.EDU"')
引數:
引數 | 描述 |
---|---|
fieldlist |
欄位規格的逗號分隔清單, fieldname {, fieldname}. 欄位規格可以是欄位名稱,在此情況下,相同名稱會用於資料庫資料行名稱和 Qlik Sense 欄位名稱。欄位規格也可以是「欄位別名」,在此情況下,資料庫運算式或資料行名稱會使用 Qlik Sense 欄位名稱。 |
tablelist |
要從其中載入資料之資料庫中表格或檢視的名稱清單。這通常是其中包含在資料庫上執行 JOIN 的檢視。 |
where_clause |
資料庫 WHERE 子句的完整語法不限於此,但大部分的 SQL「關聯運算式」都可使用,包括使用函數呼叫、用於字串的 LIKE 運算子、IS NULL 和 IS NOT NULL,IN. BETWEEN 不包括在內。 NOT 是一元運算子,而不是在某些關鍵字上的修飾詞。 範例: WHERE x > 100 AND "Region Code" IN ('south', 'west')
WHERE Code IS NOT NULL and Code LIKE '%prospect'
WHERE NOT X in (1,2,3)
最後一個範例不可編寫為︰ WHERE X NOT in (1,2,3)
|
範例:
此範例會使用稱為 TableName 的資料庫表格,其中包含欄位 Dim1、Dim2、Num1、Num2 和 Num3。Dim1 和 Dim2 會載入 Qlik Sense 資料集中。
Dim1 和 Dim2 將可用作維度。Num1, Num2 和 Num3 將可用於彙總。Dim1 和 Dim2 也可用於彙總。Dim1 和 Dim2 可用於彙總的類型取決於其資料類型。例如,許多情況下,維度 欄位包含如名稱或帳戶號碼的字串資料。這些欄位無法加總,但可計數︰count(Dim1)。
例如,SELECT 陳述式:
SQL SELECT
SalesOrderID,
RevisionNumber,
OrderDate,
SubTotal,
TaxAmt
FROM MyDB.Sales.SalesOrderHeader;
可以變更為下列 DIRECT QUERY 陳述式:
DIRECT QUERY
DIMENSION
SalesOrderID,
RevisionNumber
MEASURE
SubTotal,
TaxAmt
DETAIL
OrderDate
FROM MyDB.Sales.SalesOrderHeader;