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 加载数据。表格 ProductProductSubcategory 通过 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 表格。

在此示例中,我们通过同一逻辑表创建度量,这意味着我们可以在同一图表中使用这些度量。例如,可以创建一个以 SubTotalOrderQty 为度量的图表。

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);