# 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 关键字可以按任何顺序使用。

DIMENSION 和 FROM 关键字子句在所有 DIRECT QUERY 语句中都是必需的。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-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/direct-discovery-field-lists.htm) |
| tablelist | 数据库中将从其中加载数据的表格或视图的名称列表。通常是包含在数据库中执行的联接的视图。 |
| 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 的聚合类型取决于其数据类型。例如，在很多情况下，DIMENSION 字段包含字符串数据，如名称或帐号。这些字段无法求和，但是可以对其进行计数：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-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/DirectDiscovery/access-large-data-sets-with-direct-discovery.htm)
* [Direct Discovery 变量](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/DirectDiscovery/direct-discovery-variables.htm)