Power Queryでテーブルをマージする際、想定した行数よりも結果が多くなり、困惑した経験はありませんか。多くの場合、その原因はマージに使用したキー列に重複が存在することにあります。キーが一意でないと、片方のテーブルで複数の行が一致し、行数が増加します。本記事では、マージ後に行数が増える原因を特定し、キー重複を確認する具体的な手順を解説します。
【要点】この記事で確認すること
- 最初に見る場所: マージに使用したキー列(単一または複合キー)に重複がないか、各テーブルで個別に確認します。
- 切り分けの軸: 行数が増える原因が左テーブルのキー重複か、右テーブルのキー重複かを見極めます。両方に重複があると更に増加します。
- 注意点: マージの結合の種類(左外部、内部など)によって結果の行数が変わります。また、会社PCでテーブル構造を変更する場合は、元データのバックアップを取ってから作業してください。
ADVERTISEMENT
目次
マージ後に予想より行数が増える原因
Power Queryのマージ操作は、リレーショナルデータベースの結合(JOIN)と同様の動作をします。マージキーとして指定した列の値が両テーブルで一致する行を結合します。ここで、キーに重複があると、一方のテーブルの1行に対して他方のテーブルの複数行がマッチし、結果として行数が増えます。具体的には以下のパターンがあります。
- 左テーブルに重複キーが存在する場合: 左の1行が右の複数行と結合され、左の行が複製されます。結果の行数は左の重複数×右のマッチ数に影響されます。
- 右テーブルに重複キーが存在する場合: 右の複数行が左の1行に結合され、やはり行数が増えます。実務ではこのケースがよく起こります。
- 両方に重複がある場合: デカルト積に近い形で行数が爆発的に増加します。
また、マージの結合の種類も行数に影響を与えます。左外部結合では左テーブルの行数が維持される(右にマッチがない場合はnullが入る)と思われがちですが、左テーブルに重複があると左の行が複製されるため、結果の行数は左テーブルの元の行数より増えます。内部結合では両方のテーブルにキーが存在する行のみ残るため、どちらかに重複があれば行数が増加します。
キー重複の確認手順(具体例)
ここでは、サンプルデータを使ってキー重複を確認する手順を説明します。左テーブル(売上データ)と右テーブル(顧客マスタ)を「顧客ID」でマージしたところ、売上データの行数(100行)から120行に増えたとします。この原因を特定するには、以下の手順を実行します。
- Power Queryエディターを開き、左テーブル(売上データ)を選択します。
- 「ホーム」タブの「列の統計」グループにある「列の分布」を有効にします。これで各列の値の一意性が表示されます。
- マージキーに使用した「顧客ID」列の上にマウスを置き、「個別」のカウントと「有効」のカウントを確認します。もし「個別」が「有効」より小さい場合、その列に重複が存在します。
- 重複をより詳細に確認するには、キー列を右クリックし「グループ化」を選択します。新しいウィンドウで、キー列でグループ化し、行数のカウントを集計します。これにより、どのキーが何回出現するかが分かります。
- 同様の手順を右テーブル(顧客マスタ)でも行います。右テーブルに重複があれば、1人の顧客が複数登録されているなどの問題が考えられます。
- 重複が見つかったら、元のデータソースを確認し、必要に応じて重複を削除するか、マージキーを再検討します。Power Query上で重複を削除するには、「ホーム」タブの「行の削除」→「重複の削除」を使用しますが、元データに影響を与えないように注意してください。
この手順により、どのテーブルのどのキーに重複があるかを特定できます。例えば、左テーブルの「顧客ID」に重複がないのに右テーブルに重複がある場合、右の顧客マスタに同じIDを持つ異なるレコードが存在することが原因です。
左外部結合と内部結合の違いと行数への影響
Power Queryのマージでは、結合の種類を6種類から選択できます。よく使われる「左外部」と「内部」の違いを理解しておくと、行数増加の原因を切り分けやすくなります。以下の表にまとめました。
| 結合の種類 | 行数の変化 | 主な使用場面 |
|---|---|---|
| 左外部 | 左テーブルの行数以上になる(左に重複があれば増加)。右にマッチしない行も含まれる。 | 左テーブルをベースに右の情報を補足するが、マッチしない左行も保持したい場合。 |
| 内部 | 両テーブルにキーが存在する行のみ。左または右に重複があれば行数が増える。 | 両方に存在するデータだけを結合したい場合。顧客IDが両方にあるトランザクションのみ抽出など。 |
| 右外部 | 右テーブルの行数以上になる。 | 右テーブルをベースにしたい場合。 |
左外部結合を選んだのに左テーブルより行数が増える場合、左テーブル自体にキーの重複があることが確定します。一方、内部結合で行数が増える場合は、左右どちらか(または両方)に重複があります。結合の種類を切り替えてテストすることで、重複の所在を絞り込めます。
重複がある場合の対処方針
重複が確認されたら、以下のいずれかの対処を検討します。
- 事前に重複を削除する: マージ前に、どちらかのテーブルで重複を削除します。例えば、右テーブルがマスタデータであれば、重複を統合するか、最初の1行だけ残すなどします。ただし、データの正確性が損なわれないように注意が必要です。
- 集計してからマージする: 重複があるテーブルを事前にグループ化し、キーごとに集計(合計やカウント)したテーブルに変換してからマージします。これでキーを一意にできます。
- マージキーを再考する: 単一キーではなく、複数の列を組み合わせた複合キーを使用することで、重複を回避できる場合があります。例えば、顧客IDだけでなく日付もキーに含めると一意になることがあります。
ADVERTISEMENT
失敗パターンと対処法
実際の業務でよくある失敗例をいくつか紹介します。これらのパターンを事前に知っておくことで、同様のトラブルを回避できます。
失敗パターン1: マスタデータに重複があるのに気づかない
販売管理システムからエクスポートした顧客マスタに、同一顧客IDで複数の住所が登録されているケース。マージ後に売上データの行数が増えた際、当初は売上データ側の問題と思い込んでしまい、原因特定に時間がかかりました。この場合、右テーブルのキー重複を見つけるために、上記のグループ化手順を実行するとすぐに判明します。
失敗パターン2: 左外部結合なら行数が変わらないという誤解
「左外部結合は左テーブルの行数が維持される」と理解していると、左テーブルに重複がある場合に混乱します。実際には左外部結合でも左に重複があると行数が増えます。この誤解を避けるには、マージ前にキー列の重複を確認するクセをつけることが重要です。
失敗パターン3: 複合キーの一部が重複している
複数の列をキーにした場合、各列単体では重複がなくても、キーの組み合わせで重複が発生することがあります。例えば、「注文日」と「商品コード」の組み合わせでマージするとき、同日に同じ商品を複数注文する顧客がいると重複します。この場合は、さらに別の列(注文IDなど)をキーに加える必要があります。
これらの失敗を防ぐには、マージ前に必ずキー列の一意性を確認し、必要ならばデータクレンジングを行う習慣を身につけましょう。
管理者に確認すべき設定
会社のPCでPower Queryを使用する場合、管理者によってはいくつかの設定が制限されていることがあります。特に以下の点を確認しておくと、トラブルシューティングがスムーズになります。
- プライバシーレベルの設定: 異なるデータソース(例えばSQL ServerとExcelファイル)をマージする場合、プライバシーレベルが「プライベート」に設定されていると、データが結合されずエラーになるか、予期せぬ結果になることがあります。管理者に問い合わせて、必要に応じてレベルを変更してもらってください。
- 外部データ接続の許可: 会社のセキュリティポリシーによっては、Power Queryが外部データソースにアクセスできない場合があります。その場合、マージ自体が実行できないため、まず管理者に確認します。
- Power Queryのアドインが有効か: ExcelのバージョンによってはPower Queryが標準で無効になっていることがあります。管理者に依頼して有効化してもらう必要があります。
これらの設定は、ユーザー側で簡単に変更できないことが多いため、問題が解決しない場合は早めに管理者へ相談しましょう。
よくある質問(FAQ)
マージ後の行数増加に関して、読者から寄せられそうな質問とその回答をまとめました。
Q1. マージ後に元の行数より少なくなるのはなぜですか?
内部結合を使用した場合、両テーブルにキーが存在しない行は削除されるため、行数が減ることがあります。また、左外部結合でも、右テーブルにマッチしない行がnullになるだけで行数は減りませんが、左テーブル自体の行数が減ることはありません。もし行数が減ったなら、結合の種類を確認してください。
Q2. 重複を削除せずにマージする方法はありますか?
重複を削除せずにマージすると、必ず行数が増えます。どうしても元データを保持したい場合は、マージ後に「行のグループ化」で集計するか、Power Queryの「Table.ExpandTableColumn」のカスタム処理で、重複行を配列として保持する方法もあります。ただし、複雑になるため、通常は重複を事前に解消することをおすすめします。
Q3. 膨大な行数になってExcelがフリーズしました。どうすればいいですか?
マージによってデカルト積が発生し、数十万行になるとExcelの動作が重くなります。まずはマージの取り消し(元に戻す)を行ってください。その後、キー重複を徹底的に確認し、適切な前処理を行ってから再度マージを実行します。また、Power Queryの「プロパティ」で「データの読み込みを無効にする」を選択し、読み込み前にクエリを編集する方法も有効です。
まとめ
Power Queryでマージ後に行数が増える主要な原因は、キー列の重複です。重複の有無は、列の分布やグループ化機能で簡単に確認できます。原因を切り分けるには、左右どちらのテーブルに重複があるかを調べ、結合の種類(左外部、内部など)を考慮することが重要です。重複が見つかったら、データの性質に応じて重複削除、集計、キーの再設計などの対処を行います。この記事の手順を参考に、トラブルを迅速に解決し、正確なデータ結合を実現してください。
ADVERTISEMENT
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
