中的多表格支持Direct Discovery
您可以使用 Direct Discovery 通过 ANSI SQL 联接功能加载多个表格或视图。在单个图表中,所有度量必须派生自 QlikView 中的同一逻辑表,但此表可以是通过 join 语句联接的来自数据源的多个表格组合。但可以在同一图表中使用源自其他表格的维度。
例如,可以使用 Where 子句或 Join 子句联接使用 Direct Discovery 加载的表格。
- 在拥有大数据集的内存情形中,可以在单个事实/多个维度中部署 Direct Discovery。
- 可以将 Direct Discovery 与符合下列任何条件的多个表格结合使用:
- 联接中关键字段的基数为低。
联接中关键字段的基数为高,将 DirectEnableSubquery 设置为 True 并将所有表格与 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);
信息注释在 FROM 子句中不能通过别名引用表格,您需要使用完整的表格名称。