Tableau Desktopで複数のデータソースをユニオンする #tableau
はじめに
こんにちは。大阪オフィス唯一のDI部メンバー、tamaです。
本エントリは、Tableau Desktop Qualified Associateの試験ガイド「評価するスキル」に関連する内容となります。
本エントリの概要
今回は「ユニオン」について見てきます。
ユニオンは聞いたことある方は多いんじゃないでしょうか。「併合」ともいいますが、同じ構造のデータを重ねて1つのデータにする処理のことです。特にエンジニアの方でしたら、言わずもがな、な処理だと思います。
普通にユニオンをする
Tableau Desktopでユニオンを行うには、いくつか方法があります。まずは、スタンダードなユニオンの方法を見ていきます。
サンプルデータの用意
以下のようなExcelファイルを用意しました。
現時点では、2つのシートに分かれています。でも、データの構造(列名とその数)は同じですよね。これ、1つにくっつけた方がやりやすいですよね。そういう時にユニオンをやります。
両方のデータに接続する
まず、ユニオンしたいデータを接続します。
そして、画面左部の「ユニオンの新規作成」という項目をダブルクリックします。すると、ユニオンの設定画面が表示されます。ここに、ユニオンしたいデータをドラッグしましょう。
Excelファイルでは2つのシートに分かれていたデータが、1つのデータとしてユニオンされました。ユニオン前は何のシートだったのかがわかるカラムが追加されています。不要であれば非表示にしておきましょう。
ワイルドカードユニオンをする
上記の方法は、1つのExcelファイルの中にある、2つのシートを対象にユニオンしました。実は上記の方法は、ファイル自体が分かれている場合はできません。では、ファイル自体が分かれている場合はどうすればいいのでしょうか。
ワイルドカードユニオンという方法で可能です。ファイルが分かれている場合だけでなく、そもそもユニオンしたいファイルが大量にある場合にも、この方法が有効です。
サンプルデータの用意
先程のデータに加えて、新たなExcelファイルを用意します。
Excelファイルとしては別ですが、やはり同じ構造なので、ユニオンしたいですよね。
ワイルドカードユニオンの設定
さっき作成したユニオンを「編集」します。
ユニオンの設定画面が表示されます。ここで「ワイルドカード(自動)」をタブを選択します。すると、「どういう名称のファイル名をユニオンしますか?」という感じの設定項目が現れます。要するに、指定したディレクトリ中にあるファイルを全部ガーッと読み込んで、一気にユニオンしてくれるという機能です。この編集画面で、読み込むファイル名を指定することで、一定の法則に従った名称のファイルだけを読み込んでくれます。
「*.xlsx」と指定しました。これはファイル名の拡張子が.xlsxのファイル名は全部読み込む設定になってます。名称が可変の部分をアスタリスクで指定してあげて、残りは文字列を固定で指定してあげると、うまくいくと思います。例えば、何らかのシステムで、自動的に増えていくExcelファイルがあったとして、一定の法則で日付が付与されているファイルを一気に読みこみたい時なんかは、この方法が有効だと思われます。
めでたくユニオンされました。
ワイルドカードで検索する範囲
これは、先程紹介したユニオンの設定画面ですが、「検索をサブフォルダーに展開」とか「親フォルダーに拡大」といったオプションがあります。これを指定しない場合は、そのファイルが置いてあるディレクトリしか検索しませんが、こういったオプションを利用することで、別のディレクトリに配置されているファイルまで取り込むこともできます。うまく活用しましょう。
微妙に列名が異なったりして、ズレた場合に修正する方法
サンプルデータの用意
とりあえず、また新しいサンプルデータを用意します。
ユニオンしてみる
先ほどユニオンしたデータに、上記のサンプルデータもあわせてユニオンしてみましょう。
上記がユニオンした結果です。ちょっとおかしい部分がありますね。…なんと、今までのデータは「デビュー」という名称の列だったので、問題なくユニオンされていましたが、今回新しくユニオンしたデータはデビューではなく「Debut」という列名のため、同じ列とは認識されず、ズレてしまいました。
こういう場合は、そのズレた列を選択して「一致していないフィールドをマージ」を選択します。
ズレた列がマージされます。後は名前をわかりやすいように変更しておきましょう。
おわりに
今回はユニオンについて見てきました。意外と奥が深い機能なので、下記リンクのヘルプを読んだりして、活用していきましょう。
あと、ユニオンプロレスは2015年をもって解散しています。