TableauのLOD FIXEDは、SQLのWindow関数と同じか

TableauのFIXEDで、初歩的なところでハマったので共有します。

  • FIXEDで集計したものをIIF文に入れて平均したものと、
  • FIXEDの中身の時点でIIF文で条件を入れて平均したもの

は結果が変わります、という話になります。ちなみに私が元々やりたかったのは、後者でした。例えば、SuperStoreのサンプルデータで、顧客ごとの売上の平均を出したい。ただし、ロサンゼルスの顧客だけで集計したいみたいなときです。

データはこんな感じで、簡単のため3ユーザだけだったとします。 f:id:gri-blog:20210225163027p:plain

ほしい結果を確認しておきます。{ FIXED [Customer ID]: SUM([Sales]) }を平均で集計すると、ロサンゼルスは1,104.5です。 f:id:gri-blog:20210225163123p:plain

以下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がシート上でディメンションとして使われているときは結果は同じです。 f:id:gri-blog:20210225163358p:plain

Customer IDを削除すると、右の計算フィールドだけが正しい結果になりました。同じじゃないのですね。 f:id:gri-blog:20210225163905p:plain

TableauのLOD FIXEDは、全行に集計結果をもっているSQLのWindow関数と同じようなものだが、メジャーで集計するときとかは内部的に(今回の場合はCustomer IDで)GROUP BYをしてくれているということですね。