はじめに
はじめまして。
レバレジーズ データ戦略室、データアーキテクトグループの浅見です。
IT人材領域の法人企業開拓を約4年経験した後、2024年8月にデータ戦略室に異動しました。
レバレジーズのデータアーキテクトグループでは、データ利用者がスムーズに分析を行えるようなデータアーキテクチャの設計に加えて、実際の意思決定で使用されるモニタリングの作成を行っています。
私がデータ戦略室に異動して最初に行った業務は、Tableauを用いたモニタリング作成でした。
これまでTableauを触ったことはありませんでしたが、Web上で公開されているスーパーストアクイズや、社内で共有されている演習問題などを解き、データソースを繋いだ後の操作に関してはある程度理解することができました。
しかし初めて自分でデータソースの設計から行ってみたところ、自分が設計したデータでは、Tableau上でうまく集計できないという事態が発生したのです。
一体何が駄目だったのか…?
今回は、Tableauでのモニタリング作成を行った中で、データの設計をどうするべきかについて発見した学びを共有します。
当初のデータ設計における問題と要因
モニタリングの内容としては、営業組織における進捗状況を可視化するものだったため 以下2つのデータソースを用意しました。
- 予算のデータソース
- 実績のデータソース
Tableauにデータソースを連携する際に、予算をプライマリデータソース、実績をセカンダリデータソースとしてデータブレンドしました。
しかし予算と実績のデータソースの各カラムにおけるデータの項目/粒度が異なることが問題で適切に紐づかず、正確な集計ができていない状態でした。
この問題について言及する上でデータブレンドという機能を使用したため、先にデータブレンドについて説明します。
データブレンドとは?
データブレンドはTableauに備わっているデータソースの結合機能です。
異なるデータソース上に存在するカラム同士をキーとして左外部結合します。
この機能により、複数データソースを統合して分析することができます。
ただし、結合キーの一致が必要なため、設計次第でnull値が発生するリスクがあります。
以下、データブレンドのイメージ図です。
※赤枠の出荷年月とカテゴリをキーとして結合した場合
※数量はイメージしやすいように仮の数値を記載
今回データブレンドで躓いたポイント
今回は、予算と実績のデータソースの各カラムにおけるデータの項目/粒度が異なっていたため、データソース間の結合がうまくいかず、正確な集計ができなくなるという問題に直面しました。
上記のデータブレンドの説明を踏まえて、今回発生していた問題の詳細を、サンプルスーパーストアのデータを加工して再現します。
当初、予算と実績のデータをそれぞれ以下の形式で用意していました。
※数量はイメージしやすいように仮の数値を記載
予算のデータ
予算のデータに関しては、赤枠で囲っている箇所のように、地域ごとに紐づくカテゴリが異なっており、カテゴリの階層構造が統一されていないことが分かります。
例えば、北海道では「テクノロジー」や「家具」といったカテゴリが明示されていますが、東北地方ではカテゴリがnullとなっています。
※補足:カテゴリにnullが発生する理由
「細かく予算を設定する必要がない」と判断されたセグメントについては、セグメントごとの予算がないため自動的にセグメントがnullになっていました。
上記の具体例を用いて説明すると、北海道ではカテゴリごとの予算管理が必要と判断されたため、数量(予算)カラムには各カテゴリごとの予算が表示されています。
一方で、東北地方ではカテゴリごとの予算管理が不要と判断されたため、カテゴリカラムはnullとなり、数量(予算)カラムには全カテゴリの合計予算が表示されています。
実績のデータ
実績のデータに関しては、予算のデータだと「テクノロジー」に該当するカテゴリが、「コピー機」「事務機器」「電話機」といった粒度で表現されており、カテゴリの細かさが異なっていることが確認できます。
また、予算のデータには存在しない「事務用品」というカテゴリが存在することがわかります。
尚、予算のデータで発生していたような、地域ごとに紐づくカテゴリが異なるような不統一な状態は実績のデータには見られず、北海道と東北地方で同様のカテゴリ構造が保たれています。
予算データと実績データのカテゴリ構造に違いが生じた要因は、以下2つのニーズを同時に満たそうとしたためです。
- 目標設定が不要な項目/粒度については、数量(予算)を置く必要はない
- 一方で、目標設定が不要な項目/粒度についても、実績のデータ自体は可視化しておきたい
予算と実績を結合したデータ
上記の予算と実績のデータをシンプルに結合してみると上記キャプチャの形式となります。
※結合キーは出荷年月とカテゴリです。
結合時に発生した問題は以下2点です。
- 「カテゴリ」にnullが含まれる行では、当然「数量(実績)」もnullになる
- 実績のデータに「null」のカテゴリが存在しないため、予算のデータで「null」のカテゴリの行(東北地方、数量(予算)=300)は結合されません。
- 「カテゴリ」列が各データで粒度が異なる場合、「数量(実績)」がnullになる
課題
上記を踏まえて、「予算のデータと実績のデータで各カラムにおけるデータの項目/粒度を統一すること」が課題となりました。
解決策
今回は以下のように課題を解決しました。
①予算のテーブルに「予算のデータにないが実績のデータにはある項目」を追加
(東北地方にカテゴリを追加+北海道のカテゴリに「事務用品」を追加)
実績と同じ粒度で予算が存在しない箇所には予算を新設しました。 もしどうしても必要な粒度でデータを補完できない場合は、Tableauでそのセグメントをそもそも可視化しないなどの工夫が必要となります。
②実績のテーブルにおけるデータの粒度を、予算のテーブルと統一
(「コピー機」「事務機器」「電話機」のカテゴリの粒度から、「テクノロジー」の粒度に変更)
予算とは逆で、必要以上に細かく実績が可視化されていたため、予算と同じ粒度になるようデータを丸めました。 下記クエリのように、if文やcase文を用いて処理しました。
-- カテゴリカラムの項目が「コピー機」「事務機器」「電話機」の場合は、「テクノロジー」と表示
if(category_name in('コピー機','事務機器','電話機'), 'テクノロジー', category_name) as category_name
番外編:データブレンドを使わずに実現する方法
今回はやりませんでしたが、データブレンドを使わずに結合を実現する方法もあります。
データブレンドを使わない=データソースを1つしか使わないということなので、使用する1つのデータソース内でデータ同士の結合処理をしておく必要があります。
以下のような予算と実績どちらも含んだデータを用意しておくイメージです。
事前に結合処理を行っておくことで、データブレンドで苦戦することがないため、スムーズにTableauでモニタリング作成ができます。
また、Tableau内での結合処理を行わなくて済むため、データ量が多い場合などはパフォーマンスも上がる可能性があります。
おわりに
この記事では、過去の失敗からの学びについて記載しました。
データブレンドの機能を有効活用するためにも、事前のデータ設計で結合条件を念入りに確認する必要があることを学びました。
一方で、データブレンドを使わずに実現する方法もあるので、状況に応じて、どの手法が最も適切かを考えることが大事だと考えています。
データブレンドはTableau初心者がぶつかる壁だと思うので、この機会に自分なりに整理してみることができてよかったです。
この記事が、Tableauでのデータ設計やモニタリング構築に取り組む際のヒントとなれば嬉しいです。
ぜひ参考にしてみてください。