Si une requête inclut plusieurs sources, créez des relations dans Builder pour définir comment combiner leurs enregistrements sur la base d'une valeur partagée, telle qu'un identifiant d'entité, un numéro de compte ou un département.
Note : Dans SQL Editor, utilisez une clause JOIN pour définir les relations entre les sources d'une requête.
Vue d’ensemble
Par exemple, supposons que votre requête inclut une table de faits Orders et une table de dimensions Customers en tant que sources. Dans l'onglet Relationships, vous pouvez définir comment relier les commandes :
| OrderID | Identifiant du client | Date de la commande |
|---|---|---|
| 111222 | 001 | 01/02/2021 |
| 121212 | 010 | 02/01/2021 |
| 212121 | 100 | 01/12/2021 |
aux clients :
| Identifiant du client | Nom du client | Région |
|---|---|---|
| 001 | AAA Dry Cleaners | Nord |
| 010 | Technologie Wayne | Est |
| 011 | Señor Taqueria | Ouest |
Conseil : Pour identifier une colonne avec des valeurs uniques - comme CustomerID- dans une table de dimension, marquez-la comme une colonne Key .
Comme les deux tables contiennent des identifiants de clients, vous pouvez créer une relation basée sur leurs colonnes CustomerID respectives et choisir comment combiner - ou joindre- leurs enregistrements.
Une relation Left join renvoie tous les enregistrements de la première source - à gauche - et tous les enregistrements correspondant à dans l'autre source.
Conseil : Pour éviter les doublons dans une jointure gauche , assurez-vous que la deuxième colonne source ( à droite dans la relation) contient des valeurs uniques, telles que la colonne clé d'une table de dimension.
Par exemple, dans la relation entre nos tables Orders et Customers, Left join renvoie toutes les commandes, avec des détails supplémentaires sur celles dont l'ID client correspond à la table Customers. Les commandes dont l'ID client est et qui ne sont pas dans la table Clients comprennent des valeurs nulles pour les données client supplémentaires.
| OrderID | Identifiant du client | Nom du client | Date de la commande | Région |
|---|---|---|---|---|
| 111222 | 001 | AAA Dry Cleaners | 01/02/2021 | Nord |
| 121212 | 010 | Technologie Wayne | 02/01/2021 | Est |
| 212121 | 100 | -------------------- | 01/12/2021 | ------- |
Une relation Right join renvoie tous les enregistrements de la deuxième source (à droite) et tous les enregistrements correspondant à dans l'autre source.
Conseil : Pour éviter les doublons dans une jointure droite , assurez-vous que la première colonne source ( à gauche dans la relation) contient des valeurs uniques, telles que la colonne clé d'une table de dimension.
Dans le cas de nos tables Orders et Customers, Right join renvoie tous les clients, avec des détails supplémentaires pour ceux dont les identifiants correspondent à ceux de la table Orders. Les clients dont l'ID est et qui ne correspondent pas à dans la table Orders incluent des valeurs nulles pour les données de commande supplémentaires.
| OrderID | Identifiant du client | Nom du client | Date de la commande | Région |
|---|---|---|---|---|
| 111222 | 001 | AAA Dry Cleaners | 01/02/2021 | Nord |
| 121212 | 010 | Technologie Wayne | 02/01/2021 | Est |
| -------- | 011 | Señor Taqueria | ------------- | Ouest |
Une relation Inner join ne renvoie que les enregistrements qui apparaissent dans les deux sources.
Dans la relation entre nos tables Orders et Customers, Inner join ne renvoie que les commandes des clients dont les ID correspondent dans les deux sources.
| OrderID | Identifiant du client | Nom du client | Date de la commande | Région |
|---|---|---|---|---|
| 111222 | 001 | AAA Dry Cleaners | 01/02/2021 | Nord |
| 121212 | 010 | Technologie Wayne | 02/01/2021 | Est |
Une relation Full join renvoie tous les enregistrements des sources ou.
Dans l'exemple de nos tables Orders et Customers, Full join renvoie all orders and customers. Les enregistrements dont les identifiants clients ne correspondent qu'à une seule source comprennent des valeurs nulles pour les données manquantes.
| OrderID | Identifiant du client | Nom du client | Date de la commande | Région |
|---|---|---|---|---|
| 111222 | 001 | AAA Dry Cleaners | 01/02/2021 | Nord |
| 121212 | 010 | Technologie Wayne | 02/01/2021 | Est |
| -------- | 011 | Señor Taqueria | ------------- | Ouest |
| 212121 | 100 | -------------------- | 01/12/2021 | ------- |
Dans l'onglet Relationships, vous définissez la manière dont les sources multiples de la requête sont liées les unes aux autres. Pour définir cette relation, vous devez faire correspondre les données partagées entre les sources et sélectionner la manière de joindre leurs enregistrements dans les résultats de la requête.
Note : Les relations entre les requêtes sont cumulatives. Les sources d'une jointure déterminent les colonnes disponibles pour la jointure avec d'autres sources.
Étape 1. Spécifiez les sources à joindre
Pour définir la relation d'une source avec d'autres sources dans la requête, faites-la glisser de Sources vers l'onglet Relations.
- Pour définir la première relation entre les sources de la requête, faites glisser deux sources depuis Sources vers Join 1.
- Pour définir la relation d'une source avec les sources d'une jointure précédente, cliquez sur Ajouter une autre jointure, et faites glisser la source de Sources vers la nouvelle jointure.
Remarque : Si une requête comporte plusieurs jointures, il convient de les classer dans l'ordre dans lequel elles doivent se produire, car chaque jointure dépend des sources de la jointure précédente. Pour repositionner une jointure, sélectionnez Move up ou Move down dans son menu. Pour supprimer une jointure, par exemple si la requête ne comprend plus sa source, sélectionnez Supprimer dans son menu.
Étape 2. Préciser le lien entre les sources
Pour définir la relation entre les sources, vous pouvez cartographier les valeurs partagées sur la base des éléments suivants :
- Colonnes avec données correspondantes
- Un champ calculé, pour ajuster les valeurs d'une source si nécessaire afin qu'elles correspondent exactement à celles de l'autre source.
Conseil : Vous ne pouvez joindre que des colonnes du même type de données. Pour faire correspondre des données de types différents, par exemple si les identifiants de compte sont des entiers dans une source et des chaînes de texte dans l'autre, modifiez le type d'une colonne dans le panneau Field properties.
Dans la jointure, sélectionnez les colonnes correspondantes de chaque source et choisissez la manière de faire correspondre les enregistrements en fonction de leurs valeurs.
| Opérateur | Description |
|---|---|
| Egal à (=) | Correspond aux enregistrements dont les valeurs sont identiques dans les deux sources |
| Non égal à (!=) | Fait correspondre des enregistrements ayant des valeurs différentes dans les deux sources, par exemple pour faire correspondre des identifiants de compte à des noms de compte. |
| Plus grand que (>) | Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est supérieure ou postérieure à la valeur de la source droite. |
| Supérieur ou égal à (>=) | Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est identique, supérieure ou postérieure à la valeur de la source droite. |
| Moins que (<) | Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est inférieure ou antérieure à la valeur de la source droite. |
| Inférieur ou égal à (<=) | Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est identique, inférieure ou antérieure à la valeur de la source droite. |
Pour faire correspondre avec précision les valeurs entre les sources, vous pouvez appliquer un calcul aux colonnes sources. Par exemple, pour établir des correspondances avec des numéros de compte dans une table de dimensions "Account Map", vous devrez peut-être
- Ajustez les valeurs d'une colonne source unique, par exemple pour extraire les six premiers chiffres des numéros de compte d'une table de faits Balance de vérification -
SS_LEFT(tb.compte, 6) - Utilisez les valeurs des colonnes de plusieurs sources, par exemple en combinant ou concaténant-les numéros de compte et les identifiants de la table de faits Balance de vérification et de la table de dimensions Carte d'entité précédemment jointes, respectivement-
CONCAT(tb.account,entity.id) - Définir un modèle commun dans les valeurs d'une colonne, par exemple pour isoler le numéro de compte des préfixes ou des suffixes dans une table de faits Balance de vérification -
tb.account LIKE __1005%
Note : Pour définir un modèle, vous pouvez utiliser des caractères génériques pour représenter les caractères à ignorer - un trait de soulignement (
_) pour un seul caractère, ou un signe de pourcentage (%) pour aucun caractère ou pour plusieurs caractères.
Pour appliquer un calcul aux valeurs d'une source :
- Dans la jointure, sélectionnez Champ calculé sous la source contenant les valeurs à ajuster.
- Dans le panneau Field properties, faites glisser les colonnes à inclure dans le calcul de Sources à Colonnes incluses.
Note : Pour garantir un SQL correct, n'incluez que les colonnes de la source sélectionnée.
- Sous Calculation, composez l'opération SQL (Structured Query Language) à appliquer aux valeurs des colonnes.
- Pour faire référence à une colonne dans le calcul, cliquez dessus ou sélectionnez Inclure dans le calcul dans son menu sous Colonnes incluses, ou entrez son numéro entre parenthèses, par exemple
{1} {2}. - Pour ajouter rapidement un opérateur SQL ou une fonction au calcul, sélectionnez-le dans le menu Calculation .
- Pour faire référence à une colonne dans le calcul, cliquez dessus ou sélectionnez Inclure dans le calcul dans son menu sous Colonnes incluses, ou entrez son numéro entre parenthèses, par exemple
- Dans la jointure, sélectionnez le mode de correspondance des enregistrements en fonction des valeurs des colonnes jointes :
Opérateur Description Egal à (=) Correspond aux enregistrements dont les valeurs sont identiques dans les deux sources Non égal à (!=) Fait correspondre des enregistrements ayant des valeurs différentes dans les deux sources, par exemple pour faire correspondre des identifiants de compte à des noms de compte. Similaire à Si le champ calculé définit un modèle avec des caractères génériques, les enregistrements dont les valeurs correspondent à ce modèle sont pris en compte. Pas comme Si le champ calculé définit un motif avec des caractères génériques, les enregistrements dont les valeurs ne correspondent pas au motif sont pris en compte. Plus grand que (>) Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est supérieure ou postérieure à la valeur de la source droite. Supérieur ou égal à (>=) Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est identique, supérieure ou postérieure à la valeur de la source droite. Moins que (<) Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est inférieure ou antérieure à la valeur de la source droite. Inférieur ou égal à (<=) Correspond aux enregistrements lorsque la valeur numérique ou la date/heure de la source gauche est identique, inférieure ou antérieure à la valeur de la source droite.
Étape 3. Définir les jointures composées
Une seule jointure peut mettre en correspondance plusieurs valeurs entre ses sources. Pour mettre en correspondance des paires de valeurs supplémentaires au sein d'une jointure :
- Cliquez sur Ajouter un champ.
- Indiquez les colonnes supplémentaires ou les champs calculés à mettre en correspondance entre les sources.
- Choisissez de joindre plusieurs valeurs mappées de (et) ou seulement des valeurs spécifiques basées sur les données (ou).
Si plusieurs valeurs d'une source correspondent à des valeurs différentes dans l'autre source, sélectionnez et pour faire correspondre les enregistrements sur la base de plusieurs valeurs mappées.
Par exemple, si une table de faits Balance de vérification possède des colonnes qui correspondent à la combinaison des colonnes clés Numéro de compte et Entité dans une table de dimensions Mappage des comptes, cliquez sur et et joignez les colonnes correspondantes des tables.
Note : Dans SQL Editor, la relation apparaît comme JOIN ON (TB.entity = AccountMap.entity) AND (TB.account = AccountMap.account)
Si les valeurs d'une source peuvent correspondre à plusieurs valeurs dans l'autre source en fonction des données, sélectionnez ou pour faire correspondre les enregistrements en fonction des valeurs spécifiques mises en correspondance.
Par exemple, si la colonne clé Account d'une table dimensionnelle Account Mapping correspond à la colonne Account ou Sub-account de la table de fait Trial Balance, cliquez sur ou et joignez la colonne clé aux deux colonnes de la table de fait.
Note : Dans SQL Editor, la relation apparaît comme JOIN ON (AccountMap.account = TB.account) OR (AccountMap.account = TB.subaccount)
Remarque : Si votre jointure composée comprend à la fois les opérateurs et et ou, elle correspond aux enregistrements qui répondent à tous les critères séparés par et, ainsi qu'à tous ceux qui répondent aux critères séparés par ou.
Étape 4. Sélectionner la manière de joindre les enregistrements des sources
Dans la jointure, sélectionnez la manière de combiner les enregistrements des sources dans les résultats de la requête :
Après avoir défini la relation entre toutes les sources de la requête, cliquez sur Save .
Note : Lors de l'enregistrement, la requête supprime automatiquement toutes les sources pour lesquelles aucune relation n'a été définie.
<!--Performing a UNION
When you add a relationship between two sources, you create a
JOIN clause in the query's SQL, which combines the data
into new columns. To instead combine your data into new rows,
you can use a UNION operator in the SQL Editor.
However, a union may create more records or rows
than Spreadsheets or another consumer of the results can support.
As an alternative,
create a table
and append the sources' data as datasets, which you can then slice-and-dice
and analyze in a query.