見出し画像

Tableau Prepで自動化する楽しさを伝えたい

どうも、分析屋の東雲(しののめ)です。
AIが爆発的に利用者数を増やしている昨今、相も変わらずExcelさんと仲良しこよしの方もまだまだ多いことと思います。
かく言う私も仕事の大半はExcelを触っていますし、ブラックボックスと言われるAIに業務データを突っ込んだり作業を任せるのもなぁと、AIに興味はあるものの業務への導入はまだ足踏み状態です。
とはいえ自動化はしたい!楽したい!ということで、今回は自動化についてのお話です。
以前、VBAによる大量コピペの自動化をご紹介しましたが、
今回はコードを書かずとも自動化ができる神ツール「Tableau Prep」をご紹介したいと思います。



Tableau Prepとは

BIツールでお馴染み「Tableau Desktop」に読み込ませる前の「データ加工」に特化したツールで、
データの結合、クリーニング、型変換等様々な加工が可能です。
「Tableau Prep」公式サイトはこちら

■Tableau Prepを使うメリット

Prepでできる加工の大半は、Tableau Desktopで実装することができます。
しかし、Tableau Desktopで大容量のデータに対して計算・変換処理を行ったうえでグラフを描画するとなると、表示までの処理時間が膨大になってしまい、BIを使う側としても作る側としてもストレスになることがあります。
そこで、全体的な加工処理は先にPrepで済ませておいて、Tableau Desktopには描画に集中してもらうことで、ダッシュボードをより快適に使うことができます。
リアルタイムなデータ更新を求められるダッシュボード等でない場合は、できるだけ加工処理後のデータをTableau Desktopに読み込ませることをおすすめします。


今回自動化する作業の内容

今回は「通販サイトの購入履歴データから四半期の商品別売り上げデータを作成」という想定で、以下のような流れで加工を行いたいと思います。

フィルタリング・合成データの作成・集計と、作業としては王道の類かと思います。
3か月に1回でこの程度の簡単な集計であれば自動化する必要性もあまりありませんが、
作業頻度・加工の複雑さが上がるにつれて自動化のメリットも増えます。
(私はというと、四半期に1回の作業は毎度やり方を忘れがちなので、自動化することで毎回思い出す工程を最小限にしております)


【前準備】データの用意

■インプットデータ

まずは手元にある加工前のデータにどんな項目があるかを確認します。
以下のようなデータを用意しました。(人物名・商品名含め記載のデータはすべて架空です)

■アウトプット(納品用)データ

次は納品時に、どのような形式でデータをまとめるかを確認します。
今回はありがちな売上報告データを作りたいので、Excelのビジネス用テンプレートからいい感じのこちらを使いたいと思います。

「四半期売上報告書」の下段にある表の数字を記入することで上段のグラフに自動反映されるようです。
なので、今回自動化する処理では、下段の表「第1四半期」の部分に数字を反映するところまでをゴールとしたいと思います。


Tableau Prepにてフローを作成

データもそろったことですし、いよいよ自動化処理を行っていきます。
ちなみにTableau Prepで作成する一連の加工処理の流れを「フロー」と呼ぶそうです。
※※※----------
本記事では、今回自動化する処理の中から主な部分を抜粋して実装方法をご紹介します。
Tableau Prepの基本的な使い方については、公式サイト含め検索ですぐ見つけられるため割愛しますが、参考リンクを以下に記載いたします。
Tableau Prep 公式チュートリアル

Tableau Prep 初心者向け解説!基本的な使い方まとめ

動画の方が良い場合はこちらがおすすめです!
Tableau Data Pointers | Tableau Prep

【Tableauの基本】これでわかるTableau Prepハンズオン

----------※※※

■データ取込

事前に用意していたインプットデータを取り込みます。
(左メニュー内「接続」横の「+」>テキストファイル>用意していたCSVファイルを選択)
無事接続が終わるとこんな画面になるので、右側の「データの表示とクリーニング」を選択します。

すると、こんな感じでデータの内容がグラフやテーブルで表示されます。

データが綺麗に整えられていない状態で読み込んだ際は、この機能を使ってNull値や表記揺れがないかをチェックするなどのデータクレンジングを行います。
今回は読み込みデータが綺麗なので、クレンジング作業は割愛します。

■加工処理①:指定の期間(四半期)で購入日をフィルター

「購入日」のカラムを見てみると、データには2023年2月〜8月の購入データがあるようです。
今回は四半期1Q(2023年4月1日~6月30日)が集計期間となりますので、この期間でフィルターをかけます。

これで、対象期間にデータを絞り込むことができました。
・・・・が、この処理は実は自動化としてはあまりよろしくないのです。
というのも、「四半期1Q(2023年4月1日~6月30日)で絞り込む」という処理は、今回の1回のみ使う条件で、次回以降はまた新しく日付を設定する必要があるからです。
せっかくなので、できる限り変数的に処理をしたいと思います。

上部メニューの赤枠部分をクリック>「パラメータの作成」を選択し、パラメータを作成します。

作成するパラメータの内容はこんな感じ。
パラメータ名は「集計開始日」として、現在の値の部分に今回指定する集計期間の開始日(2023/04/01)を入力します。
また、「実行時に入力する必要があります」にチェックを入れておきましょう。チェックすることで、Prepのフローを実行する際に都度パラメータの再入力を求められるようになります。

同じ要領で、今度は「集計終了日」のパラメータも作成します(今度は現在の値を「2023/06/30」に設定)

2つのパラメータを設定し終わったら、クリーニングのステップに戻り、「購入日」列に計算によるフィルターをかけていきます。

フィルターに設定する計算は以下の通り。
内容としては「購入日が集計開始日から集計終了日まで(をTrueとする)」という感じです。
で、今回の場合はパラメータである[集計開始日]に「2023/04/01」、[集計終了日]に「2023/06/30」が入っているため、先程手動で設定した内容と同じフィルターがかけられたことになります。

[購入日] >= DATE([Parameters.集計開始日])
AND [購入日] <= DATE([Parameters.集計終了日])

こうすることで、集計期間を変える必要がある際には毎回、
クリーニングステップをクリックして開く➡フィルターの日付を更新➡フローを実行 …という3ステップ手間が発生していたのが、
フローを実行➡パラメータを再入力 という2ステップで実行可能になりました。
本当に地味に思えるのですが、後者はマウスに持ち替えずに実行可能なので、より効率的に作業ができます。
こういったちょっとしたことでも自動化を積み上げていくのが楽しくて仕方がないのです。

■加工処理②:価格×個数で注文ごとの売り上げ計算

次は、各注文ごとの合計購入価格の列を作成していきます。
「計算フィールドの作成」から、計算式を利用したフィールド(列)を新たに作成することができます。

今回作成した計算フィールドはこんな感じです。
シンプルに価格(単価)と個数の積を出しているだけですので、特に難しいことはないと思います。
[価格]*[個数]

■加工処理③:商品ごとの売上合計を集計

次のステップ作成では「集計」を選びます。

集計では、任意のフィールドを軸に平均値や合計値、個数カウントなどが計算できます。(ExcelでいうとSUMIFやCOUNTIFと同じような機能)
今回は「商品ごとの売上」を出したいので、「商品名」を「グループ化したフィールド」、「合計購入価格」を「集計フィールド」にドラッグ&ドロップして設定します。

これで、商品ごとの売上価格を集計することができました。
このまま出力したいところですが、集計を行うと列の順番が「集計フィールド(合計購入価格)」➡「グループ化したフィールド(商品名)」の順になってしまうようです。
列順は「グループ化したフィールド(商品名)」➡「集計フィールド(合計購入価格)」の順にしたいため、この修正を行います。
集計ステップから新しくクリーニングステップを作成します。
そして、商品名のフィールドを選択した状態で赤線のあたりにドラッグすると、列順を入れ替えることができます。

無事列順が変えられました。
ついでに各列の行数を確認すると29となっており、元データの商品数と一致しているのでデータも足りていることを確認出来ました。これで出力していきます。

■出力

クリーニングステップから新しくステップを作成し「出力」を選択します。

出力ステップを開くと、右側に最終的なアウトプット内容がテーブル形式で表示されます。

Prepでは、「Excel」「csv」「hyper」の3種類から出力タイプを選ぶことができます。
とりあえず、csvを選んで出力してみましょう。
一番下の書き込みオプションという部分は今回の場合、「テーブルの作成」にします。
保存先や名前(ファイル名のこと)は任意のものを設定して、「フローの実行」を押します。
すると、先ほど設定したパラメータの再入力を求められます。
毎回入力するのも面倒ではありますが、間違ったパラメータのまま処理する方が怖いので毎回設定する様にしています。

パラメータを「yyyy/mm/dd」の形式で入力して【Run Flow】を押すと、、

無事に集計後のcsvファイルが出力できました。
この程度の処理内容とデータ量であれば処理時間1秒以内です。痺れますね。
あとはこれをコピーして先程のアウトプット用の表に貼り付ければ完成・・・・

ではありません。2点、問題があります。
一つ目は、出力データと納品データの、「商品名」のデータの並び順が揃っていないこと。

実は、Prepでは「データの並び替え」という機能が存在せず、出力時には意図しない並び順でデータが作成されることがままあります。
(明確にこの理由を述べているサイト等は見つけられなかった&個人的な見解ですが)
恐らく「Prepの利用目的があくまで加工(=可視化の前段階)のみで、並び替えという処理は可視化という最終段階で行うものであるため、必要ない機能とみなしている」のではないかと考えております。
そういう訳で、任意の順番に並び変えるということは、Prepでは通常の処理方法では実装できません。(一応方法がなくはないのですが、正規の方法ではないためまたいずれご紹介します)
なんにせよ、このまま納品データに貼り付けをしてしまっては、処理を行うたびに商品順が変わってデータに不備が出てしまいます。
都度XLOOKUP関数で紐づけるのも手段としてはありますが、ここでもう一つの問題点。
実は、Prepの出力方法とExcelでの処理をちょっと工夫するだけで、Prepを実行しただけでExcelでのコピペ作業を省略できるのです。
自動化できるのであれば是非しましょうということで、以下にて解説していきます。

■出力(納品データに直接書き出して表に反映する)

Prepの出力ステップを開き、出力タイプを「Excel」に変更します。
Excelで出力する場合はシート名を指定する必要がありますので、ワークシートにて任意のシート名を設定ください。(今回は「【自動】data_1Q」というシート名を指定しています)
そして出力は、納品データの「sample_納品データ」を指定します。
こうすることで、「sample_納品データ」ファイルの中に「【自動】data_1Q」という名前のシートとして集計データを出力することができます。

この状態でフローを実行させます。
先ほどと同様にパラメータに日付を入力してゴーすると、Excelファイル「sample_納品データ」に「【自動集計】data_1Q」というシートが追加されていることが確認できました。
先ほどCSVで出力したデータがそのままExcelシートとして出力された感じですね。

ここまででTableau prepでの処理は終わりです。
ここから先はExcelにて処理を行います。
「【自動集計】四半期売上報告書」の表第1四半期の欄に、集計したデータを入れていきます。
今回はXLOOKLUP関数を使って商品名をキーに数値を紐づけしています。
こうすることで、「【自動集計】data_1Q」にデータが入った瞬間にこちらの表にもデータが反映されますので、グッバイコピペすることができました。やったね。

ちなみに、XLOOKLUPを入力したい範囲がテーブル範囲になっていると、関数を適用することができません。
そういった場合はテーブルデザインタブから「範囲に変換」でテーブルを解除することでXLOOKLUP関数が使えるようになります。

これで!ようやく完成です!
今後2Q、3Qとデータを追加する場合は、先に「data_2Q」「data_3Q」などのシートを予め作っておいて(空のままでOKです)、先ほどのTableau Prepでインポートデータとパラメータの日付、アウトプット先のシート名だけ変更してあげてフローを実行するだけで、納品データの表にデータが更新されます。


自動化の効果検証

データはDL済みの状態で、集計開始~グラフへ反映させるまでの作業時間と作業数を比較してみます。
結果は以下となりました。

■手動更新

タイム:2分39秒
作業数:4(データの読み込み➡購入日を絞り込み➡商品ごとの合計購入価格を計算➡納品データにコピペ)

■自動更新

タイム:0分37秒
作業数:4(データの読み込み➡出力シートの名称変更➡ステップの起動➡パラメータ入力)

作業数は自動化前後ともに4と差は出ませんでした。
タイムに関しては手動でも2分半と大した手間ではなさそうな印象もありますが、自動化では37秒と25%まで削減することができました。
これが絞り込み条件が増えたり、他の値を計算して出したり等、複雑化した処理で行うとより効果を実感できるかと思います。
また、手動でやっていた時は絞り込みやコピペなど、毎回どこかしらにミスをするポイントがあり気が抜けなかったのが、
自動化するとDLデータを読み込んでボタンを押すだけなので、正しいフローが作れていて特に前回から何も仕様を変えてないのであれば、安心して作業を進められます。メンタルにも優しい。

■その他おすすめの使い方

今回は取り扱っていないのですが、
いわゆるデータの結合処理をしたいとき、ExcelでXLOOKUP等を使って行うこともできますが、一度に結合するデータが多いと処理が遅くなることがあります。
こんな時にもTableau Prepを使って結合をしてあげるとスムーズにいくことがあるので、ぜひ試してみてください。


まとめ

いかがでしたでしょうか。
Tableau Prepは、私が現職について以来最も出会えたことに感謝しているツールでもあります。
もうPrep無しでは仕事ができないかもしれない。そのくらい日々助けられています。
ようやくご紹介ができて感無量です。
今後はAIの力も借りる機会があるかもしれませんので、できるところから無理なくじりじりと習得していきたいと思います。
ではでは。



ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!

株式会社分析屋について

弊社が作成を行いました分析レポートを、鎌倉市観光協会様HPに掲載いただきました。

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!

【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。

【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。

【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。

【SES】
SESサービスも行っております。