重複するデータを削除して一意にする

重複するデータを削除して一意にする

Pocket

以前、年や月ごとに分かれたExcelファイルをまとめて取り込む方法をご紹介しましたが、このような場合にデータをそのまま取り込むと、重複するデータが取り込まれてしまう場合があります。
QlikViewではLOAD文に「Distinct」というキーワードをつけるだけで、重複データを削除して一意のデータを取り込むことができます。
基本的な機能なのですが、いままできちんと取り上げる機会がなかったので、あらためてここで紹介いたします。

QlikViewを使わずに、Excelで重複データを削除する手順も掲載しました。もし単純にExcelでの手順を知りたい方はこちらをご覧ください。Excelで重複データを削除する方法

ただしExcelでできるのはあくまで一シート内での重複の削除です。QlikViewでは複数のファイルやシートをまとめた上で、重複を削除できます。
たとえば、2012年の顧客リストと2013年の顧客リストがあったときに、これらをまとめた上で重複を省いた綺麗な顧客一覧を作成できます。




ファイルのダウンロード

ここでは以下のファイルを使用しますので、ダウンロードしてください。
distinct-load.zip
Zip形式ですので、ダウンロード後解凍してください。
以下ファイルが含まれています。
distinct-load-101今回は重複データの削除を試すだけですので、テキストファイルを使用します。

各ファイルの内容は以下のとおりです。
distinct-load-102それぞれ、2012年の顧客リストと2013年の顧客リストですので、当然のことながらどちらかにしか無いデータがあります。
また各ファイル内に重複したデータがあり、さらに二つのファイル間で重複したデータもあります。
データの件数は「2012年顧客リスト.txt」が30件、「2013年顧客リスト.txt」が35件です。合計65件のデータですが、重複を省くとちょうど50件(50社)のデータです。

このバラバラの顧客リストを一つにまとめ、さらに重複を省いた綺麗な顧客一覧を作成してみましょう。


データの取り込み

それではデータを取り込んでみましょう。
まずはファイルを新規に作成し、[ロードスクリプトの編集]画面を起動します。
distinct-load-119
ロードスクリプトの最下行にカーソルをあわせて、[テーブルファイル]ボタンをクリックします。
distinct-load-103
「2012年顧客リスト.txt」と「2013年顧客リスト.txt」を両方選択します。
キーボードのShiftキーや、Ctrlキーを押しながら二つのファイルを選択して[開く]ボタンをクリックしてください。
distinct-load-104
ファイルウィザードが起動します。
[列見出し]を[先頭行]に変更し、[終了]ボタンをクリックします。
distinct-load-105
今回はファイルを二つ選択しているため、つづけてファイルウィザードが起動します。
さきほどとおなじように[列見出し]を[先頭行]に変更し、[終了]ボタンをクリックします。
distinct-load-106
ロードスクリプトが作成されました。
ひとまずここまででデータを取り込んでみましょう。
[OK]ボタンをクリックします。
distinct-load-107
データを取り込んでみましょう。
[リロード]ボタンをクリックします。
distinct-load-108
ファイルを保存してください。
distinct-load-109distinct-load-110
データが取り込まれました。
[閉じる]ボタンをクリックしてください。
distinct-load-111
テーブルビューアーで、取り込まれたデータの件数を確認してみましょう。
[テーブルビューアー]ボタンをクリックします。
distinct-load-112
テーブル名の部分にマウスカーソルをあわせると、データの件数を確認できます。
65件のデータが取り込まれています。
distinct-load-113
なお、リストボックスやテーブルボックスは重複するデータを省いて表示するため、このままでも(データが重複したままでも)利用する上で不便を感じないこともあります。
distinct-load-114しかし、統計ボックスでレコード数を見ると65件と表示されており、このままでは顧客が65社あるように感じてしまいます。(実際は50社)
さらに、余分なデータがあるとその分ファイルサイズも大きくなり、メモリも多く消費しますので、重複データは削除しておいた方がよいでしょう。


重複データの削除(Distinct)

それでは重複データを削除してみましょう。
[ロードスクリプトの編集]画面を起動します。
LOAD文に「Distinct」の指定を追加します。
変更前
LOAD 得意先名
FROM
:
LOAD 得意先名
FROM
:
変更後
LOAD Distinct 得意先名
FROM
:
LOAD Distinct 得意先名
FROM
:
distinct-load-115
再度リロードを実行してください。
distinct-load-116
テーブルビューアーを確認すると、データの件数が50件になっていることが確認できます。
distinct-load-117
リストボックスやテーブルボックスの表示は、データが重複していても、していなくても変わりませんが、内部的には重複データが削除され綺麗な状態になっています。
また、統計ボックスでレコード数を見ると50件となっており、顧客が50社あることも分かります。
distinct-load-118

以上で今回のチュートリアルは終了です。


補足説明


項目が二つ以上ある場合

前述のサンプルデータは項目が一つだけでしたが、項目が二つ以上あるときは、全項目の値が一致しているものが重複データとみなされます。
たとえば、姓と名の項目があったとき、以下の三件のデータはすべて異なるデータ(重複していないデータ)とみなされます。
姓    名
田中  一郎
山田  一郎
田中  二郎


一意の件数を数える方法

重複データの話とはまた別の話になりますが、値を集計するとき一意の件数を数えたい場合があります。
たとえば、おなじ商品名は一件とみなして商品が何種類あるのか数えたり、おなじ会社名は一件とみなして顧客が何社あるのか数えたりです。
一意の件数を数えるするには、数式に以下の指定をしてください。
Count(DISTINCT 項目名)
この「DISTINCT」はCount関数などの集計関数の中で指定するものですので、「LOAD Distinct」とはまた別の機能です。
ただ、おなじ「DISTINCT」という指定ですので、あわせて覚えておくといいでしょう。


Excelで重複データを削除する方法

QlikViewを使わずに、Excelで重複データを削除する手順は以下のとおりです。
ただしExcelでできるのは、あくまで一シート内での重複の削除であるという点に注意してください。複数のファイルやシートをまとめた上で、重複を削除する場合はQlikViewを使用した方が簡単です。

Excel 2003以前
[データ] メニュー→[フィルタ]→[フィルタオプションの設定]を選択します。
[フィルタオプションの設定]画面で画面下部の[重複するレコードは無視する]にチェックを入れます。
詳細はMicrosoft Office.comの以下のページをご覧ください。
Excel のリストから重複する行を削除する – Excel – Office.com
http://office.microsoft.com/ja-jp/excel-help/HA001034626.aspx
Microsoft Office 2003のサポート終了にともない、ページが削除されたようです。(2014年12月15日追記)

Excel 2007以降
[データ]タブの[データツール]にある[重複の削除]ボタンをクリックします。
詳細はMicrosoft Office.comの以下のページをご覧ください。
重複しない値を抽出する、または重複する値を削除する – Excel – Office.com
http://office.microsoft.com/ja-jp/excel-help/HP010073943.aspx#BMremove_duplicate_values
ページが削除されているようなので、別の参照先を掲載しておきます。(2015年1月29日追記)
表の重複している項目を削除する|Excel (エクセル)|Microsoft atLife TIPS アーカイブ
http://www.microsoft.com/ja-jp/atlife/tips/archive/office/tips/002.aspx


振り返り

重複するデータを削除して一意のデータを取り込むには、LOAD文のうしろに「Distinct」と追加します。
LOAD Distinct ...


最後に…

今回は重複するデータを削除する方法をご紹介しました。
これは、とくに商品や顧客などのマスターデータを整備するときに便利な機能です。
非常に簡単な機能ですが、よく使用しますのでぜひ覚えておいてください。

実はもともと「ANDモード」という機能に関する記事を書こうと思っていたのですが、「ANDモード」を使うには「Distinct」の理解が必須だったため、先に「Distinct」の方を紹介いたしました。
「ANDモード」についても、近いうちにこのブログで紹介いたしますのでご期待ください。

お疲れ様でした。