こんにちは、みずたにです
シリーズ20日目の当エントリは、データを扱っているときによく使うツールのご紹介です。
特にエクセルデータの加工や出力、Tableau用のデータ加工で使うツールの中で2018年によく聞かれた・使ったツールを紹介します。
また最後にバッチマクロを簡単に紹介します。
#目次
1. 行がセル結合されたエクセルをどうにかする。
2. 月別・日付別のデータをもれなく作成する。
3. データを複数のエクセルに分割して作成する。
4. マクロを使ってファイルをフォルダに配置する
1.行がセル結合されたエクセルをどうにかする
例えばですが、Tableauユーザの方ならおなじみの下記のような集計表を作って
こうエクセルに出力すると階層構造になっているところ(ここではCategory, Sub-Category)がセルセル結合されて出力されてしまいます。
こういう行単位でセル結合されたエクセル表をデータとして使う場合、エクセルでセル結合を解除してセルをコピーして・・・という面倒な作業が発生します。
ここでAlteryxの複数行フォーミュラを使うと簡単に処理できます。
フローとしてはこんな感じです。
複数行フォーミュラの設定は以下のとおり、**式:**にアクティブ行が空白(null)ならば、
一行前の値をセット、そうでない場合は、アクティブ行の値をセットというように記述します。
結果はこのように、空白だった行にデータがセットされています。(ここではSub-Category列も同様の処理を実施しています)
複数行フォーミュラはこういったケースで活躍します、
なお、複数行フォーミュラツールの例を開くで、類似のフローを確認できます。
#2.月別・日付別のデータをもれなく作成する
Tableauに読み込ませるデータを作る際によくやってしまいがちなのですが、Tableauは時系列のデータにおいて、特定の月のデータがない場合でも構わず線を繋いでしまいます。
例えば下記の折れ線グラフでは3月のデータがありません。
こういう場合、ちゃんと月別のデータを用意したうえで実績データを結合するなどが必要です。
ここで行生成のツールを活用します。
例えば、下記のように顧客別のデータに対して、行生成のツールを使い月別のデータに展開します。サンプルとして使っているデータはAlteryxのサンプルデータのCustomer.yxdbになります。
(通常C:\Program Files\Alteryx\Samples\ja\SampleData\
にあります)
行生成のデータは下記のとおり設定します。今回は2018年1月から12月まで月別に展開しています。
ループ式としてDateTimeAdd([YearMonth],1,"month")
を記述します。
結果としては、下記のように月別に展開されます。例えば顧客別月別購買データを作成する場合は、このように行生成を活用してデータを作成すると抜けがないデータが作成できます。
これも行生成の例を開くで、類似のフローが確認できます。
#3.データを複数のエクセルに分割して出力する
1つのエクセルに複数のシートに分けてデータを書き込むことや複数のcsvファイルを一度に出力することはデータ出力で実現できますが、あるグループに基づいて複数のエクセルを出力することもテーブルおよびレンダリングを使えば簡単にできます。
さきほど使った、Sample - Superstoreのデータを使い、Categoryごとにファイルを出し分けてみます。
フローは下記になります。
まず、テーブルツールで、ファイルを分けたデータの列項目をグループとして指定します。ここではCategoryを指定します。
そして、レンダリングでは、下記のように設定します。
データを別々のレポートにグループ化するのチェックボックスをチェック
グループ化するフィールドに先ほどのテーブルツールで指定した列項目を指定
以下によりファイル名を変更するでReplace Filename With Groupを指定
そうすると、下記のようにCategoryごとにエクセルファイルが出力されます。
#4.マクロを使ってファイルをフォルダに配置する
今回紹介する使い方はあくまで1例なのですが、簡単なのでご紹介します。
(マクロって何?というところは別エントリに詳しく紹介されているので割愛します。)
例として、作成した月別のデータを月別のフォルダにエクセルで出力したいケースがあるとします。
その場合、通常だとデータ出力ツールを月別に作りそれぞれのフォルダに出力することになりますが、月が増えたときや年が変わった際にフローの修正が必要になります。
こういう場合、マクロを使えば、少し効率化できます。
(フォルダは事前に作っておく必要があります)
具体的な手順を見ていきます、まず3.のフローに少し手を加えて特定の年月(下では201801)のデータを年月別のフォルダに出力するフローを作ります。
上記のフローは201801という2018年1月のデータをフィルタツールで抜き出して、データ出力ツールで201801というフォルダに格納するフローです。
ここのフィルタツールとデータ出力ツールの日付部分の値をアクションツールで更新し、動的に抽出するデータを出力先を切り替えるようなマクロを作ります。
フィルタツールでの設定内容は以下になりますOperand - value='201801'
をハイライトし、**特定の文字列を置き換えます。**のチェックボックスをチェックしてください。
データ出力ツールの場合は、File -value='フォルダパス'
をハイライトし、**特定の文字列を置き換えます。**のチェックボックスをチェックしたうえで、置き換えたい文字列、ここでは201801という年月別のフォルダ名を記述します。
今回このyyyyMMの年月を外部からパラメータとして与えて繰り返し処理します。この場合、コントロールパラメータというツールを使います。
こんな感じで設定します。コントロールパラメータのラベルを入力には適当なラベルを設定しておきます。
最後にマクロ化しておきたいところだけ切り出し、入力としてマクロ入力を設定します。
この際マクロ入力の設定で、追加の入力接続のチェックボックスをチェックしてください。
ここまで設定したらマクロを保存してください。デフォルトでマクロ(.yxmcファイル)として保存されます。
なお、オプション->ユーザー設定からマクロを保存するフォルダを指定しておく必要があります。
そうすると、ツールパレットに先ほど保存したマクロがアイコンとして表示されます。(ツール名は保存したときのマクロの名前になります、ここでは"マクロ"としています)
それでは作ったマクロを使っていきます。
作ったマクロツールにはInputとなる接続が2つあります。上の"?"が逆を向いているのが、パラメータの入力で、下のグレーの入力がデータ接続の入力です。
先ほど作成したフローにおいて、フィルタツール、データ出力ツール部分をマクロに置き換えます。
ここで、データ接続の入力に対してはそのままマクロと接続しています。
一方、パラメータに対しては、データが持っている年月項目(このフローでは"yyyyMM"という列名)をサマライズツールでGroup by しパラメータとしてマクロに渡しています。
マクロの設定としては、下記のとおり"Questions"タブのフィールドを選択において、パラメータとして渡すフィールド名を指定します。(ここでは"yyyyMM")
試しに、特定のフォルダを見てみると下記の通り、ファイルが出力されています。
こんな感じです。最初はとっつきにくい印象がありますが、慣れてしまうと簡単に使うことができます。
#まとめ
ということで、『Alteryx User Group in 東京 Advent Calendar 2018』 20本目のエントリ「データ準備でよく使うツールと簡単なマクロのつくり方」のご紹介でした。
明日21日目は、Rushさんの「RESAS API を使って 宿泊動向を さくっとビジュアライズしてみました」になります!