業務でTableauを利用した際にちょっとひねった技を使う必要があったのでその備忘録として
課題1 自部署内の人別の売り上げを比較するデータを見せたい
通常のTableauであればFilterをユーザーに設定してもらって見せるというのが一般的な流れになると思います。ただ、今回の場合はユーザーがログインした段階で見せたいというものになります。
前提条件 組織のマスタ情報がある
組織の階層を持ったマスター情報があるということが前提になります。
データイメージ
row, 部門, 部署, 人
1 Sales, 第一, 山田
2 Sales, 第一, 田中
3 Sales, 第一, 中田
4 Sales, 第二, 佐藤
5 Sales, 第二, 松井
それとTableauServerを利用した環境になります。
課題1の動き
山田さんでログインした際に山田、田中、中田のデータを取得したい
解決策
とりあえず誰でログインしたかは
USERNAME()
で取得できます。
次に新しいDimension [User_Flag]を作成します。
[User_Flag]
CASE [人] == USERNAME()
THEN 1
ELSE 0
END
[User_Flag]にはログインした人に1それ以外には0が入ります。なので山田さんでログインすれば
row, 部門, 部署, 人, [User_Flag]
1 Sales, 第一, 山田, 1
2 Sales, 第一, 田中, 0
3 Sales, 第一, 中田, 0
4 Sales, 第二, 佐藤, 0
5 Sales, 第二, 松井, 0
次に[Same_Org] という同じ部署なら1、それ以外なら0を返すDimenstionを作成します。
ここで利用するのがFIXED関数になります。
下記のリンクとかわかりやすいです。
https://ex-ture.com/blog/2017/12/04/%E5%88%86%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84lod-fixed%E7%B7%A8/
[Same_Org]
{FIXED [部門], [部署]: MAX([User_Flag])}
[部門], [部署]が同一のデータの中から[User_Flag]の最大値を取得します。
そのため、Sales 第一の人であれば1 それ以外の部署であれば0が値として入ります。
row, 部門, 部署, 人, [User_Flag], [Same_Org]
1 Sales, 第一, 山田, 1, 1
2 Sales, 第一, 田中, 0, 1
3 Sales, 第一, 中田, 0, 1
4 Sales, 第二, 佐藤, 0, 0
5 Sales, 第二, 松井, 0, 0
フィルター条件をSame_Org=1にすることでほしいデータが取得できます。
以上