「クエリの追加」(前回参照)を使ってデータ表を連結した結果、重複データが発生してしまうケースもある。そこで今回は、重複データを解消する一つの手法として「重複の削除」の使い方を紹介していこう。あわせて「重複の保持」についても説明する。どちらの処理も、あらかじめ選択しておく列に注意する必要がある。
データ表を連結と重複データの確認
本連載の前回では、「クエリの追加」を使ってデータ表を連結する方法を紹介した。このとき、連結前のデータ表に存在していたデータが重複して記録されてしまうケースもある。
そこで今回は、重複データの解消に役立つ「重複の削除」の使い方を紹介していこう。あわせて「重複の保持」の使い方も紹介する。いずれも「選択していた列」に応じて動作が変化するので、その仕組みをよく学んでおく必要がある。
まずは、前回の内容をおさらいしておこう。以下の図は、あるイベント運営会社の「営業1課」が管理しているイベントホールの一覧だ。
似たような一覧は、同社の「営業2課」でも個別に管理されている。
前回は、これらのデータ表を「クエリの追加」で連結する方法を紹介した。その結果は以下の図に示したとおり。各課で管理されていた10件ずつのデータが連結され、計20件のデータ表になっている。
連結後の状況を分かりやすくするために、「名称」の昇順にデータを並べ替えた様子を紹介しておこう。
この図を見ると、一部のデータが重複して記録されていることを確認できる。具体的には、「エテルナ シティホール」、「セレスティス南青山」、「フレアライト会館」の3つのデータが重複して記録されている。
これらは「営業1課」と「営業2課」の両方で管理されていたデータとなる。単純にデータ表を連結すると、このように重複データが発生してしまう可能性がある。このまま放置しておくとトラブルの原因になりかねないので、「なるべく重複を解消しておこう」というのが今回の趣旨だ。
なお、上図をよく見ると分かるように、単に「重複データ」といっても、その状況はデータごとに異なる。「セレスティス南青山」と「フレアライト会館」は各列のデータがすべて一致しているので、“完全な重複データ”といえる。一方、「エテルナ シティホール」は名称/電話番号/住所が同じで、担当者/メールが異なる“部分的な重複データ”といえる。
こういった点に注意しながら、重複データを解消する方法を探っていこう。
「重複の削除」を使った重複データの解消
「Power Query エディター」には、重複データを手軽に削除できる「重複の削除」というコマンドが用意されている。この機能を使用するときは、「ホーム」タブにある「行の削除」をクリックし、「重複の削除」を選択すればよい。
すると、データが重複している行が自動的に削除され、以下の図のような結果を得ることができる。3件あった重複が解消され、それぞれ1行のデータになっていることを確認できるだろう。
「これで重複データを解消できた」と思うかもしれないが、実はそれほど単純ではない。というのも、担当者/メールのデータが異なっていた「エテルナ シティホール」の検証が済んでいないからだ。
「セレスティス南青山」と「フレアライト会館」は、すべてのデータが重複していたため、片方のデータを削除しても特に問題は生じない。一方、「エテルナ シティホール」は担当者/メールのデータが異なるため、「どちらを残すか?」を検証してからデータを削除しなければならない。
よって、片方のデータを自動的に削除してしまうのは少し危険な手法と考えられる。「重複の削除」を取り消して、元の状態に戻しておこう。「重複の削除」の処理を取り消すときは、「削除された重複」のステップを削除すればよい。
これで重複データを削除する前の状態に戻った。今度は、すべての列を削除した状態で「重複の削除」を実行してみよう。「名称」の列を選択し、「Shift」キーを押しながら「住所」の列名をクリックする(もしくは「Ctrl」+「A」キーを押す)。これで、すべての列を同時に選択できる。
この状態で「行の削除」→「重複の削除」を実行すると、すべての列でデータが重複している行だけを削除できる。
つまり、“完全な重複データ”だけを削除し、“部分的な重複データ”はそのまま残す、という処理を実現できる訳だ。
以降の作業は人の目で確認しながら進めていく必要があるため、通常のExcelのほうが効率よく作業できる。データ表をExcelに出力した状態で解説を進めていこう。
現時点では「エテルナ シティホール」のデータが重複している状態になっている。このうち、担当者が「中原 恒樹」さんのデータを削除すべきか、それとも「藪田 詩子」さんのデータを削除すべきかは、人間が判断しなければならない。
ちなみに、「中原 恒樹」さんのデータはもともと「営業2課」が管理していたデータ、「藪田 詩子」さんのデータはもともと「営業1課」が管理していたデータとなる。これらを連結した結果、「同じ取引先なのに担当者が違う」という混乱が生じてしまっている。
もしかすると、取引先に人事異動があり、どちらか一方のデータが古い状態のまま残っていたのかもしれない。しかし、このデータ表だけでは、それを判断することはできない。事情に詳しい人に尋ねてみるか、もしくは「誰が担当者になるのか?」を先方に直接問い合わせてみるしか解決方法は見当たらないだろう。
パワークエリに用意されている「重複の削除」を利用するときは、こういった点にも配慮しながら作業を進めていく必要がある。何も考えずに重複データを削除してしまうと、古いデータが残ってしまい、新しいデータが削除されてしまう恐れがある。さらに、そのこと(ミス)に気付かないまま作業を進めてしまう可能性もある。
こういった状況を回避するには、“完全な重複データ”だけを削除して、“部分的な重複データ”はそのまま残す、という方法で作業を進めていく必要がある。
「重複の削除」の動作の仕組み
念のため、「重複の削除」の動作の仕組みについて補足しておこう。「重複の削除」は、あらかじめ選択していた列を基準に「重複のチェック」が行われるようになっている。
最初に示した例のように「名称」の列だけを選択した場合は、「名称」が重複しているデータが削除の対象になる。他の列は重複チェックの対象にならない。そして、重複していると判断されたデータのうち、「下にある行」のデータが削除される仕組みになっている。
複数の列を選択していた場合は、それらの列を基準に重複チェックが行われる。以下の図は、「名称」と「メール」の列を同時に選択した例だ。離れた列を同時に選択するときは、「Ctrl」キーを押しながら列名をクリックしていけばよい。
この状態で「行の削除」→「重複の削除」を実行すると、以下の図のような結果になる。「名称」と「メール」が両方とも重複していた「セレスティス南青山」と「フレアライト会館」は、下の行のデータが削除される。一方、「エテルナ シティホール」は「名称」だけが重複しており、「メール」のデータは異なる値になっている。このため、そのままデータが残ることになる。
今回の例の場合、すべての列を選択して「重複の削除」を実行したときと同じ結果になる。このように「重複の削除」を使用するときは「あらかじめ選択しておく列」が非常に重要なポイントになる。正しく処理を進めていくためにも、この機会に必ず覚えておくとよいだろう。
なお、「重複の削除」コマンドは、列名の右クリックメニューにも用意されている。こちらを利用するときも、あらかじめ選択しておく列が重要なポイントになることに変わりはない。
「重複の保持」について
参考までに、「重複の保持」というコマンドの使い方も紹介しておこう。こちらは「重複の削除」の逆で、重複しているデータだけを抽出してくれる機能となる。
具体的な例で示していこう。以下の図は「名称」の列を選択した状態で「行の保持」→「重複の保持」を実行した例だ。
この場合、「名称」のデータが重複している行だけが抽出される。結果として、以下の図に示した6行のデータが抽出されることになる。
今度は、「名称」と「担当者」の列を選択した状態で「行の保持」→「重複の保持」を実行した例だ。
この場合は「名称」と「担当者」が両方とも重複している行だけが抽出される。「担当者」が異なる「エテルナ シティホール」は、抽出の対象にならない。よって、以下の図に示した4行のデータが抽出されることになる。
このように「重複の保持」も「選択していた列」に応じて動作が変化する仕組みになっている。「重複の削除」とあわせて覚えておくと、その仕組みを理解しやすいだろう。いずれの場合も「選択していた列」を基準に重複チェックが行われる、と理解しておけば重大なミスを回避できる。時間に余裕がある方は、実際に試しながら動作を確認してみるとよいだろう。より理解が深まるはずだ。