Prise en charge de plusieurs tables dans Direct Discovery

Vous pouvez utiliser Direct Discovery pour charger plusieurs tables ou vues à l'aide de la fonctionnalité de jointure ANSI SQL. Avec un graphique unique, toutes les mesures doivent être dérivées de la même table logique dans Qlik Sense, mais il peut s'agir d'une combinaison de plusieurs tables issues d'une source liée via des instructions de jointure. Vous pouvez cependant utiliser des dimensions provenant d'autres tables figurant dans le même graphique.

Par exemple, vous pouvez lier les tables chargées au moyen de Direct Discovery en utilisant soit une clause Where, soit une clause Join.

  • Il est possible de déployer Direct Discovery dans le cadre d'un scénario de chargement en mémoire d'un seul fait et de plusieurs dimensions pour de grands ensembles de données.
  • Direct Discovery peut s'utiliser avec plus d'une table répondant à l'un des critères suivants :
    • La cardinalité du champ clé dans la jointure est faible.
    • La cardinalité du champ clé dans la jointure est élevée ; DirectEnableSubquery est définie sur true et toutes les tables ont été jointes à l'aide de Direct Discovery.

      Pour plus d'informations, voir Utilisation de sous-requêtes avec Direct Discovery.

  • Direct Discovery ne convient pas à un déploiement réalisé dans le cadre d'un scénario de troisième forme normale avec toutes les tables au format Direct Discovery.

Liaison de tables Direct Discovery à l'aide d'une clause Where

Dans cet exemple de script, nous chargeons des données issues de la base de données intitulée AW2012. Les tables Product et ProductSubcategory sont liées à l'aide d'une clause Where utilisant le champ ProductSubCategoryID commun.

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 ;

Liaison de tables Direct Discovery à l'aide de clauses Join On

Vous avez par ailleurs la possibilité d'utiliser des clauses Join On pour lier des tables Direct Discovery. Dans cet exemple d'instruction, nous joignons la table SalesOrderHeader à la table SalesOrderDetail via le champ SalesOrderID, puis la table Customer à la table SalesOrderHeader via le champ Customer ID.

Dans cet exemple, nous créons des mesures à partir de la même table logique, ce qui signifie qu'il est possible de les utiliser dans le même graphique. Par exemple, vous pouvez créer un graphique qui utilise SubTotal et OrderQty comme mesures.

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