中的多表格支持Direct Discovery
您可以使用 Direct Discovery 通过 ANSI SQL 联接功能加载多个表格或视图。
在单个图表中,所有度量必须派生自 Qlik Sense 中的同一逻辑表,但此表可以是通过 join 语句联接的来自数据源的多个表格组合。但可以在同一图表中使用源自其他表格的维度。
例如,可以使用 Where 子句或 Join 子句联接使用 Direct Discovery 加载的表格。
- 在拥有大数据集的内存情形中,可以在单个事实/多个维度中部署 Direct Discovery。
- 可以将 Direct Discovery 与符合下列任何条件的多个表格结合使用:
- 联接中关键字段的基数为低。
联接中关键字段的基数为高,将 DirectEnableSubquery 设置为 True 并将所有表格与 Direct Discovery 进行联接。
有关更多信息,请参阅通过 Direct Discovery 使用子查询。
- Direct Discovery 不适用于在第三范式情形和 Direct Discovery 格式的所有表格中进行部署。
使用 Where 子句联接 Direct Discovery 表格
在此脚本示例中,我们从数据库 AW2012 加载数据。表格 Product 和 ProductSubcategory 通过 Where 子句使用共同的 ProductSubCategoryID 字段联接。
Product_Join:
DIRECT QUERY
DIMENSION
[ProductID],
[AW2012].[Production].[Product].[Name] as [Product Name],
[AW2012].[Production].[ProductSubcategory].[Name] as [Sub Category Name],
Color,
[AW2012].[Production].[Product].ProductSubcategoryID as [SubcategoryID]
MEASURE
[ListPrice]
FROM [AW2012].[Production].[Product],
[AW2012].[Production].[ProductSubcategory]
WHERE [AW2012].[Production].[Product].ProductSubcategoryID =
[AW2012].[Production].[ProductSubcategory].ProductSubcategoryID ;
使用 Join On 子句联接 Direct Discovery 表格
还可以使用 Join On 子句联接 Direct Discovery 表格。在此语句示例中,我们通过 SalesOrderID 字段将 SalesOrderHeader 表格联接到 SalesOrderDetail 表格,同时还通过 Customer ID 字段将 Customer 表格联接到 SalesOrderHeader 表格。
在此示例中,我们通过同一逻辑表创建度量,这意味着我们可以在同一图表中使用这些度量。例如,可以创建一个以 SubTotal 和 OrderQty 为度量的图表。
Sales_Order_Header_Join:
DIRECT QUERY
DIMENSION
AW2012.Sales.Customer.CustomerID as CustomerID,
AW2012.Sales.SalesOrderHeader.SalesPersonID as SalesPersonID,
AW2012.Sales.SalesOrderHeader.SalesOrderID as SalesOrderID,
ProductID,
AW2012.Sales.Customer.TerritoryID as TerritoryID,
OrderDate,
NATIVE('month([OrderDate])') as OrderMonth,
NATIVE('year([OrderDate])') as OrderYear
MEASURE
SubTotal,
TaxAmt,
TotalDue,
OrderQty
DETAIL
DueDate,
ShipDate,
CreditCardApprovalCode,
PersonID,
StoreID,
AccountNumber,
rowguid,
ModifiedDate
FROM AW2012.Sales.SalesOrderDetail
JOIN AW2012.Sales.SalesOrderHeader
ON (AW2012.Sales.SalesOrderDetail.SalesOrderID =
AW2012.Sales.SalesOrderHeader.SalesOrderID)
JOIN AW2012.Sales.Customer
ON(AW2012.Sales.Customer.CustomerID =
AW2012.Sales.SalesOrderHeader.CustomerID);