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