Tableauの集計・非集計の概念
[この関数の集計および非集計の引数を混在させることはできません]
[集計および非集計の比較、または’IF’式の結果を混在させることはできません]
このようなエラー文と出会ったことはありませんか?
これはTableauで集計・非集計を1つのIF文で処理しようとしたときに出るエラー文です。
一般的に「集計・非集計を混在させることはできない」と言われていますが、これは計算上の仕組みが異なることが原因です。
計算上の仕組み
- 集計:全ての列が対象 (例:sum, avg, max..)
- 非集計:特定の引数を含む列のみが対象 (例:year, zn, round..)
つまり、計算方法が異なります。
ここら辺の概念は、渡部さんが書いた記事を参考にしてください。
※渡部さんは、私にTableauを教えてくれたイケメン秀才の元上司のことです。
Tableauで集計・非集計を1つのIF文に入れる方法
先ほどの説明で「集計・非集計は計算の仕組みが異なるので混在させることはできない」ということを説明しましたが、実はその制約を突破する方法があります。
それは「集計をLOD関数で非集計として扱う」という方法です。
具体的に例を見てきましょう。
例:一部のカテゴリのみを集計してクラスタ作成
今、特定カテゴリを対象に平均割引率を算出し、その値に応じたクラスタを作成したいとします。
※ちょっと状況が複雑ですが、要は「特別なディメンションと個別の集計結果に応じてグループを作りたい」というわけです。
ただ、この状況では「非集計(特定カテゴリ)」「集計(平均割引率)」が混在しており、IF文を作成したときにエラーが出てしまいます。
そこで強引に「集計 (平均割引率) → 非集計 (LOD関数を用いた平均割引率)」の変換を行います。
LOD関数では、全行を対象にクエリを発行してくれるので結果的に「非集計」として扱うことができるのです。
具体的には「AVG(割引率) → {INCLUDE :AVG(割引率)}」と書き換えます。
ここでLOD関数として、FIXEDではなくINCLUDEを使った理由はフィルターされた値を扱うためです(参考)
※LOD関数の「中カッコ{}」に関するマニアックな記事はこちら。
成功です。INCLUDE関数を使うことで、集計関数を非集計と見なすことができました。
注意点:プロパティの変更
先ほどは求める計算式を作成できたのですが、実はもう1ステップ作業が必要となります。
それは、プロパティの変更です。
手順としては「今回作成したディメンションを右クリック>デフォルトのプロパティ>集計>最小値」とします。
※デフォルトではこれが最小値ではなく、カウントになっているはずです。
これを実際のビューに当てはめてみると、以下のようになります。