左結合で残した行が、絞り込むと消えるのはなぜ?

元の一覧をすべて残し、条件に合う情報だけを付けるなら、参照する表を先に絞ります。結合後の絞り込みとの違いを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だけを選ぶ

  1. RequestsとOptionsを読み込みます。OptionsのシートカードでKind列のフィルターアイコンを開き、「等しい」にCityを指定して「適用」を押します。
  2. Requestsを左、Optionsを右に置き、CodeとOptionCodeを結びます。接続線で「左のシートの全行を保持」を選びます。
  3. R2とR3が残り、照合側の列だけが空欄であることを確認します。
  4. 今回は「結果を整理」に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行が消える問題です。 上の表と手順は、この質問を参考に別途作成した架空の例です。質問者の実データや製品の利用体験ではありません。