# 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 資料之間建立關聯。

資訊備註DIRECT QUERY 陳述式不能包含 DISTINCT 或 GROUP BY 子句。

使用 MEASURE 關鍵字，您可以定義 Qlik Sense 在「中繼層級」才會識別的欄位。在資料載入處理程序期間，量值欄位的實際資料僅位於資料庫上，並且由視覺化中使用的圖表運算式以臨機操作為基礎進行擷取。

一般來說，含離散值、要作為維度的欄位應以 DIMENSION 關鍵字載入，而僅要用於彙總的數字應以 MEASURE 關鍵字選取。

DETAIL 欄位可提供資訊或詳細資料 (如 [註解] 欄位)，使用者可顯示在向下探查詳細資料的表格方塊中。DETAIL 欄位無法用於圖表運算式。

設計上，DIRECT QUERY 陳述式對於支援 SQL 的資料來源採取資料來源中性的態度。因此，相同的 DIRECT QUERY 陳述式不須變更即可用於不同的 SQL 資料庫。Direct Discovery 會視需要產生適合資料庫的查詢。

當使用者知道要查詢的資料庫為何，並且想要在 SQL 中利用資料庫特定的延伸，就可使用原生資料來源語法。原生資料來源語法支援︰

* 在 DIMENSION 和 MEASURE 子句中作為欄位運算式
* 作為 WHERE 子句的內容

範例：

```
DIRECT QUERY 
                
```

> ```
> DIMENSION Dim1, Dim2 
>                     
> ```
>
> ```
> MEASURE 
>                     
> ```
>
> > ```
> > NATIVE ('X % Y') AS X_MOD_Y   
> >                         
> > ```

FROM TableName

DIRECT QUERY

> DIMENSION Dim1, Dim2
>
> MEASURE X, Y
>
> FROM TableName
>
> WHERE NATIVE ('EMAIL MATCHES "\\*.EDU"')

資訊備註下列詞彙作為關鍵字使用，因此無法用作資料行或欄位名稱，以引用的方式除外︰ and, as, detach, detail, dimension, distinct, from, in, is, like, measure, native, not, or, where

引數：

| 引數 | 描述 |
| --- | --- |
| fieldlist | 欄位規格的逗號分隔清單， fieldname {, fieldname}. 欄位規格可以是欄位名稱，在此情況下，相同名稱會用於資料庫資料行名稱和 Qlik Sense 欄位名稱。欄位規格也可以是「欄位別名」，在此情況下，資料庫運算式或資料行名稱會使用 Qlik Sense 欄位名稱。<br><br>[Direct Discovery 欄位清單](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/direct-discovery-field-lists.htm) |
| tablelist | 要從其中載入資料之資料庫中表格或檢視的名稱清單。這通常是其中包含在資料庫上執行 JOIN 的檢視。 |
| where\_clause | 資料庫 WHERE 子句的完整語法不限於此，但大部分的 SQL「關聯運算式」都可使用，包括使用函數呼叫、用於字串的 LIKE 運算子、IS NULL 和 IS NOT NULL，IN. BETWEEN 不包括在內。<br><br>NOT 是一元運算子，而不是在某些關鍵字上的修飾詞。<br><br>範例：<br><br>WHERE x &gt; 100 AND "Region Code" IN ('south', 'west')<br><br>WHERE Code IS NOT NULL and Code LIKE '%prospect'<br><br>WHERE NOT X in (1,2,3)<br><br>最後一個範例不可編寫為︰<br><br>WHERE X NOT in (1,2,3) |

範例：

此範例會使用稱為 TableName 的資料庫表格，其中包含欄位 Dim1、Dim2、Num1、Num2 和 Num3。Dim1 和 Dim2 會載入 Qlik Sense 資料集中。

DIRECT QUERY DIMENSTION Dim1, Dim2 MEASURE Num1, Num2, Num3 FROM TableName ;

Dim1 和 Dim2 將可用作維度。Num1, Num2 和 Num3 將可用於彙總。Dim1 和 Dim2 也可用於彙總。Dim1 和 Dim2 可用於彙總的類型取決於其資料類型。例如，許多情況下，維度 欄位包含如名稱或帳戶號碼的字串資料。這些欄位無法加總，但可計數︰count(Dim1)。

資訊備註DIRECT QUERY 陳述式直接在指令碼編輯器中進行編寫。為了簡化 DIRECT QUERY 陳述式的建構，您可以從資料連線中產生一個 SELECT 陳述式，然後編輯所產生的指令碼，將它變更為 DIRECT QUERY 陳述式。  
例如，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;

## 瞭解更多資訊

* [使用 Direct Discovery 存取大型資料集](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Sense_Hub/DirectDiscovery/access-large-data-sets-with-direct-discovery.htm)
* [Direct Discovery 變數](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Sense_Hub/DirectDiscovery/direct-discovery-variables.htm)