IT consultant's struggling day in studying SAP, programming, consulting methodologies, and some industry specific topics

Soloblog - Tech Consulting

SAP/IT

【Tableau初心者向け】データ結合による数値重複・集計ミス【解消法】

投稿日:2019-10-14 更新日:

皆さん、Tableau、いじってますか?私の勤めている会社では、売上やコストの予実差異分析、セールス活動の支援を目的としてTableauを導入しました。

導入するのは私なのですが、TableauどころかBIツールに初めて触った私はまともに数値の集計、複数のデータソースの結合もまともに出来ませんでした。

今回は、一番最初に私がぶち当たったデータ結合による数値の重複集計のミスの内容と、その解消法をご紹介しようと思います。

データ結合で数値が重複して集計されてしまう

事象概要

はじめにどういった事象が起きていたか、ご説明します。以下を見て頂くとわかりますが、データ結合をすることで特定の項目を含んだ行が分裂し、数値が重複して集計されてしましました。

この例では、人件費とその金額のデータと、人件費とその内訳(役員報酬、給与手当、法定福利費、福利厚生費の4つ)のデータを結合した結果、人件費の金額が4つに分裂し、集計結果が4倍になってしまっています。

データ結合の前と後で、人件費が4倍に重複して集計されてしまっています。

項目 - 項目グループの結合で行が分裂する

データソースのほうを見て頂きましょう。私がやろうとしていたのは、会社のコストに関する予算をまとめたExcelファイルと、コストの実績データをまとめたものである総勘定元帳のデータ(会計システムから出力)を突き合わせて予実比較する、というものでした。

途中で気づいたのが、予算データと実績データでは、実績のほうが粒度が細かかったということです。予算策定の時には、会計データに入力するようなレベルではなく、もう少し粗い粒度で予算を組んでいた、というわけです。

こちらがコストの実績データである、総勘定元帳のデータ
こちらが予算のデータ

このままですと粒度が異なるので比較できない!と思った私は以下のように実績データ(総勘定元帳)の勘定科目と、予算データの勘定科目をマッピングするための中間テーブルをExcelで作成しました。

実績データと予算データの勘定科目を結び付ける中間テーブル

そして、予算データ、中間テーブル、実績データという流れで結合すれば予実比較できるでしょ!と思ったら、確かに予算データと実績データで比較はできるようになったのですが、予算データの人件費が4倍に重複してしまったのです・・・

理由は単純に、もともと1行だった人件費:¥10Mというデータが、人件費の内訳である役員報酬、給与手当、法定福利費、福利厚生費の4つに分裂してしまったためです。

データ結合しても数値を重複させずに集計する方法

この事象を解消するための方法のひとつがFixed関数です。

Fixed関数で集計する単位を固定する

こちらの事象を解消するには、集計する際のディメンションを固定するFixed関数を使うのが有効であるとわかりました。Fixed関数を使用して、もともと予算データに存在していた勘定科目(粗い粒度のレベル)で集計を行うと、人件費は分裂しなくなりました。

Fixed - コスト予算金額というのが、Fixed関数で集計しているものになります。

やり方は簡単です。重複させたくない集計対象と、重複させないために固定するディメンションを特定し、Fixed関数にそれぞれ入力します。

{fixed [固定するディメンション] : min([固定するディメンション固有の値])}

今回の例では、もともと予算データ側に持っていた勘定科目の粒度で、コスト予算金額を集計しておきたいので、固定するディメンションは[勘定科目]、集計の対象は[コスト予算金額]です。

計算フィールドを作成するので、右クリック⇒作成⇒計算フィールドを選択します。

後は適当に名前を付けて、数式を記載します。

こうすることで、予算データが、実績データとの関連を持ったうえで数値のほうは重複させずに集計できるようになりました。

以上、超初心者による超初心者向けの投稿でした。ご参考になれば幸いです。

まだまだ勉強することが多いですが、Tableau面白いので、楽しみながら習熟していけそうです。また学んだことがあれば投稿します!

-SAP/IT

Copyright© Soloblog - Tech Consulting , 2021 All Rights Reserved Powered by AFFINGER5.