クエリに複数のソースが含まれている場合は、[ビルダー]で関係を作成し、エンティティID、アカウント番号、部門などの共有値に基づいてレコードを組み合わせる方法を定義します。
注: SQLエディターで、JOIN
句を使用して、単一のクエリに対する複数のソース間の関係を定義します。
概要
例えば、クエリにソースとして[注文]というファクトテーブルと[顧客]というディメンションテーブルが含まれていると仮定します。関係 タブでは、オーダーの関連付けを定義することができます:
受注ID | 顧客ID | 受注日 |
---|---|---|
111222 | 001 | 01/02/2021 |
121212 | 010 | 02/01/2021 |
212121 | 100 | 01/12/2021 |
顧客へ:
顧客ID | 顧客名 | 地域 |
---|---|---|
001 | AAAドライクリーナー | 北 |
010 | ウェイン・テクノロジー | 東 |
011 | セニョール・タケリア | 西 |
ヒント: ディメンションテーブルで、一意の値を持つ列 (CustomerIDなど) を識別するには、その列をキー列としてマークします。
両方のテーブルに顧客IDが含まれるため、それぞれの[顧客ID]列に基づいて関係を作成した上で、それらのレコードを組み合わせる、または結合する方法を選択することができます。
左結合の関係は、最初のソース(左側)から すべてのレコードを返し、もう一方のソースにも一致するレコードを同様に返します。
ヒント: 左結合で重複を避けるには、関係の右 にある 2 番目のソース列に、ディメンションテーブルのキー列などの一意の値が含まれるようにします。
例えば、注文テーブルと顧客テーブルの関係では、左結合はすべての注文を返し、顧客テーブルでマッチした顧客IDを持つ注文の詳細も返します。「顧客」テーブル内で一致しない顧客IDを持つ注文には、追加の顧客データとしてNULL値が含まれます。
受注ID | 顧客ID | 顧客名 | 受注日 | 地域 |
---|---|---|---|---|
111222 | 001 | AAAドライクリーナー | 01/02/2021 | 北 |
121212 | 010 | ウェイン・テクノロジー | 02/01/2021 | 東 |
212121 | 100 | -------------------- | 01/12/2021 | ------- |
右結合関係は、2番目のソース(右側)から すべての レコードを返し、もう一方のソースにも一致するレコードを同様に返します。
ヒント: 右結合で重複を避けるには、関係の左にある最初のソース列に、ディメンションテーブルのキー列などの一意の値が含まれるようにします。
注文テーブルと顧客テーブルの場合、右結合は注文テーブル内でIDが一致する顧客の詳細とともにすべての顧客を返します。IDが注文テーブルで一致しない顧客には、追加注文データにNULL値が含まれます。
受注ID | 顧客ID | 顧客名 | 受注日 | 地域 |
---|---|---|---|---|
111222 | 001 | AAAドライクリーナー | 01/02/2021 | 北 |
121212 | 010 | ウェイン・テクノロジー | 02/01/2021 | 東 |
-------- | 011 | セニョール・タケリア | ------------- | 西 |
内部結合関係は、両方のソースに表示されるレコードのみを返します。
受注テーブルと顧客テーブルの関係では、内部結合は、両方のソースでIDが一致する顧客からの注文のみを返します。
受注ID | 顧客ID | 顧客名 | 受注日 | 地域 |
---|---|---|---|---|
111222 | 001 | AAAドライクリーナー | 01/02/2021 | 北 |
121212 | 010 | ウェイン・テクノロジー | 02/01/2021 | 東 |
完全結合関係は、いずれかのソースからすべてのレコードを返します。
注文テーブルと顧客テーブルの例では、完全結合 は、すべての注文と顧客を返します。顧客IDが1つのソースでのみ一致したレコードには、欠損データとしてNull値が含まれます。
受注ID | 顧客ID | 顧客名 | 受注日 | 地域 |
---|---|---|---|---|
111222 | 001 | AAAドライクリーナー | 01/02/2021 | 北 |
121212 | 010 | ウェイン・テクノロジー | 02/01/2021 | 東 |
-------- | 011 | セニョール・タケリア | ------------- | 西 |
212121 | 100 | -------------------- | 01/12/2021 | ------- |
関係 タブで、クエリの複数のソースの相互関係を定義します。この関係を定義するには、ソース間で共有されるデータをマッチングさせ、クエリ結果でそれらのレコードを結合する方法を選択します。
注: クエリの関係は累積的です。お互いの上に構築されます。ある結合のソースによって、他のソースに結合できる列が決まります。
ステップ1:結合するソースを指定します
クエリ内の他のソースとの間でソースの関係を定義するには、ソースを[ソース]から[関係]タブへドラッグします。
- クエリのソース間の最初の関係を定義するには、2つのソースを[ソース]から[結合1]へドラッグします。
- 前の結合のソースとのソースの関係を定義するには、[別の結合の追加] をクリックし、ソース から新しい結合にソースをドラッグします。
注: クエリに複数の結合がある場合は、各結合が前の結合のソースに依存するため、結合を実行する順番に並べ ます。結合の位置を変更するには、メニューから上に移動 または下に移動 を選択します。クエリにソースが含まれなくなった場合など、結合を削除するには、メニューから削除 を選択します。
ステップ2:ソースの関係を指定します
ソース間の関係を定義する際には、以下に基づいて共有値をマップすることができます。
- 対応するデータが含まれる列
- 他のソースと正確に一致するよう必要に応じてソースの値を調整するための計算フィールド
ヒント: 結合できるのは、同じデータタイプの列だけです。アカウント ID が一方のソースでは整数で、もう一方のソースではテキスト文字列である場合など、データタイプが異なるデータを一致させるには、フィールドプロパティパネルから列のタイプ を編集します。
結合では、各ソースから対応する列を選択し、それらの値に基づいてレコードを照合する方法を選択します。
演算子 | 説明 |
---|---|
に等しい(=)。 | 両方のソースで同じ値を持つレコードをマッチングします |
と等しくない(!=) | アカウントIDをアカウント名にマップするなど、両方のソースで異なる値を持つレコードをマッチングします |
より大きい (>) | 左側のソースの数値または日付/時刻の値が右側のソースの値よりも大きいか遅い場合にレコードをマッチングします |
以上 (>=) | 左側のソースの数値または日付/時刻の値が右側のソースの値と等しいか、より大きいか、または遅い場合にレコードをマッチングします |
未満 (<) | 左側のソースの数値または日付/時刻の値が右側のソースの値よりも小さいか早い場合にレコードをマッチングします |
以下 (<=) | 左側のソースの数値または日付/時刻の値が右側のソースの値と同じか、小さいか、または早い場合にレコードとマッチングします |
ソース間の値を正確にマップするには、ソース列に計算を適用します。例えば、アカウントマップディメンションテーブルのアカウント番号にマップするには、以下が必要です:
- [試算表]のファクトテーブルに含まれるアカウント番号から最初の6桁を抽出するなど、単一のソース列内の値を調整します— SS_LEFT(tb.account, 6)
- 以前に結合された[試算表]のファクトテーブルと[エンティティマップ]のディメンションテーブルのアカウント番号とIDをそれぞれ組み合わせる、または連結するなど、複数のソースの列の値を使用します— CONCAT(tb.account,entity.id)
- 試算表ファクトテーブルの接頭辞や接尾辞からアカウント番号を分離するなど、列の値内の共通パターンを定義します。
tb.account LIKE __1005%
注: パターンを定義するには、ワイルドカードを使用して無視する文字を表すことができます。1 文字の場合はアンダースコア (
_
)、文字なしまたは複数文字の場合はパーセント記号 (%
)を使用します。
ソースの値に計算を適用するには、以下の手順に従って下さい。
- 結合では、調整する値を含むソースの下に表示される[計算済み]フィールドを選択します。
-
フィールドプロパティパネルで、計算に含める列をソース から含める列 までドラッグします。
注: 適切な SQL を確保するため、選択したソースからの列のみを含めます。
- [計算]で、列の値に適用する構造化クエリ言語(SQL)の操作を作成します。
- 計算で列を参照するには、列をクリックするか、列のメニューの[含まれる列]から[計算に含める]を選択するか、または
{1}+{2}
のように括弧で囲んだ数値を入力します。 - SQL演算子または関数の構文を計算に素早く追加するには、[計算] メニューから目的の構文を選択します。
- 計算で列を参照するには、列をクリックするか、列のメニューの[含まれる列]から[計算に含める]を選択するか、または
- 結合では、結合された列の値に基づいてレコードを照合する方法を選択します。
演算子 説明 に等しい(=)。 両方のソースで同じ値を持つレコードをマッチングします と等しくない(!=) アカウントIDをアカウント名にマップするなど、両方のソースで異なる値を持つレコードをマッチングします いいね! 計算フィールドで、ワイルドカードを用いてパターンが定義されている場合は、そのパターンに一致する値を持つレコードをマッチングします 気に入らない 計算フィールドで、ワイルドカードを用いてパターンが定義されている場合は、そのパターンに一致しない値を持つレコードをマッチングします より大きい (>) 左側のソースの数値または日付/時刻の値が右側のソースの値よりも大きいか遅い場合にレコードをマッチングします 以上 (>=) 左側のソースの数値または日付/時刻の値が右側のソースの値と等しいか、より大きいか、または遅い場合にレコードをマッチングします 未満 (<) 左側のソースの数値または日付/時刻の値が右側のソースの値よりも小さいか早い場合にレコードをマッチングします 以下 (<=) 左側のソースの数値または日付/時刻の値が右側のソースの値と同じか、小さいか、または早い場合にレコードとマッチングします
ステップ3:複合結合を定義します
1つの結合で、ソース間に複数の値をマッピングすることができます。結合内の値のペアをさらにマッピングするには:
- [フィールドの追加]をクリックします。
- ソース間でマッピングする追加の列または計算フィールドを指定します。
- 複数のマッピングされた値を結合(And)するか、データに基づいて特定の値のみを結合(Or)するかを選択します。
ソースに含まれる複数の値がそれぞれに他のソース内の異なる値に対応している場合は[And]を選択し、マッピングされた複数の値に基づいてレコードを照合します。
例えば、[アカウントマッピング]のディメンションテーブルに含まれる[アカウント番号]と[エンティティ]のキー列の組み合わせにマッピングする列が[試算表]ファクトテーブルに含まれる場合は、[And]をクリックして各テーブル内の対応する列同士を結合します。
注: SQLエディター では、この関係はJOIN ON (TB.entity = AccountMap.entity) AND (TB.account = AccountMap.account) のように表示されます。
ソースの値が、データに応じて別のソースの複数の値に対応する可能性がある場合は、[Or]を選択し、特定のマッピングされた値に基づいてレコードを照合します。
例えば、[アカウントマッピング]のディメンションテーブルに含まれる[アカウント]キー列が、[試算表]ファクトテーブルに含まれる[アカウント]と[サブアカウント]列のいずれかにマッピングする場合は、[Or]をクリックしてキー列をファクトテーブルの両方の列に結合します。
注: SQLエディター では、この関係はJOIN ON (AccountMap.account = TB.account) OR (AccountMap.account = TB.subaccount) のように表示されます。
注:複合結合にAnd演算子とOr演算子の両方が含まれている場合は、Andで区切られたすべての条件を満たすレコードに加え、Orで区切られた条件を満たすすべてのレコードとマッチングします。
ステップ4:ソースのレコードを結合する方法を選択します
結合で、ソースのレコードをクエリ結果で組み合わせる方法を選択します。
結合 | 戻り値 |
---|---|
左結合 | 結合に含まれる左側のソースからのすべてのレコードと、右側のソースでマッチしたすべてのレコード |
右側結合 | 結合に含まれる右側のソースからのすべてのレコードと、左側のソースでマッチしたすべてのレコード |
内部結合 | 両方のソースでマッチしたレコードのみ |
完全結合 | 両方のソースに含まれるすべてのレコード |
すべてのクエリのソース間の関係を定義したら、[保存] をクリックします。