TableauのLOD FIXEDは、SQLのWindow関数と同じか
TableauのFIXEDで、初歩的なところでハマったので共有します。
- FIXEDで集計したものをIIF文に入れて平均したものと、
- FIXEDの中身の時点でIIF文で条件を入れて平均したもの
は結果が変わります、という話になります。ちなみに私が元々やりたかったのは、後者でした。例えば、SuperStoreのサンプルデータで、顧客ごとの売上の平均を出したい。ただし、ロサンゼルスの顧客だけで集計したいみたいなときです。
データはこんな感じで、簡単のため3ユーザだけだったとします。
ほしい結果を確認しておきます。{ FIXED [Customer ID]: SUM([Sales]) }
を平均で集計すると、ロサンゼルスは1,104.5です。
以下2種類の計算フィールドを作成します。それぞれ中身はこうなっています。
IIF({ FIXED })
IIF([City] == 'Los Angeles' ,{ FIXED [Customer ID]: SUM([Sales]) } ,NULL )
{ FIXED IIF() }
{ FIXED [Customer ID]: SUM(IIF([City] == 'Los Angeles', [Sales], NULL)) }
Customer IDがシート上でディメンションとして使われているときは結果は同じです。
Customer IDを削除すると、右の計算フィールドだけが正しい結果になりました。同じじゃないのですね。
TableauのLOD FIXEDは、全行に集計結果をもっているSQLのWindow関数と同じようなものだが、メジャーで集計するときとかは内部的に(今回の場合はCustomer IDで)GROUP BYをしてくれているということですね。