左結合で残した行が、絞り込むと消えるのはなぜ?
元の一覧をすべて残し、条件に合う情報だけを付けるなら、参照する表を先に絞ります。結合後の絞り込みとの違いを3行の例で確認します。
左結合で残った行も、その後の結果フィルターで消えることがあります。基準行をすべて残し、特定の種類の値だけ付ける場合は、照合表を先に絞ります。
結合前と結合後の条件の違い
Optionsでは、AにCityとTypeの2種類の情報があり、BにはTypeしかありません。RequestsのR3はコードが空欄です。R1・R2・R3はすべて残したうえで、Cityの情報がある行だけにLabelを付けます。
表中の∅は空欄を示す説明用の記号で、入力する文字ではありません。
Requests
| Record | Code |
|---|---|
| R1 | A |
| R2 | B |
| R3 | ∅ |
Options
| OptionCode | Kind | Label |
|---|---|---|
| A | City | North |
| A | Type | Retail |
| B | Type | Wholesale |
参照元から先にCityだけを選ぶ
- RequestsとOptionsを読み込みます。OptionsのシートカードでKind列のフィルターアイコンを開き、「等しい」にCityを指定して「適用」を押します。
- Requestsを左、Optionsを右に置き、CodeとOptionCodeを結びます。接続線で「左のシートの全行を保持」を選びます。
- R2とR3が残り、照合側の列だけが空欄であることを確認します。
- 今回は「結果を整理」にKind = Cityを追加しません。空欄KindのR2とR3は、その後段の条件を満たさなくなります。
参照値がなくても残る基準行
期待結果は3行です。Northが付くのはR1だけで、対象外の種類しかないR2も残ります。結合後にCityだけへ絞ると1行になる点が違います。
| Record | Code | OptionCode | Kind | Label |
|---|---|---|---|---|
| R1 | A | A | City | North |
| R2 | B | ∅ | ∅ | ∅ |
| R3 | ∅ | ∅ | ∅ | ∅ |
結果の絞り込みでは対象が変わる
Cityの情報が見つかった行だけが必要なら、結合後に結果を絞り込むか、「一致する行のみ」で結合します。元の一覧をすべて残したいのかどうかで使い分けてください。ここまでの操作は画面上の条件設定で行い、SQLを入力する必要はありません。
自分のファイルで始めましょう
JOIN SHEETを使ってみる ↗Excel・CSVの作業はPCでご利用ください。
新しいタブで開くため、作業中のデータは置き換わりません。
サンプルの検証日:
出典
Left Join SQL Query in Power Query Editor (Reddit r/PowerBI)
元のPower BIの質問は、SQLの左結合でCity条件によりNULL行が消える問題です。 上の表と手順は、この質問を参考に別途作成した架空の例です。質問者の実データや製品の利用体験ではありません。