見出し画像

Tableau Prep分析関数Partitionを試したお話(SQLにあるが、Desktopにない)

Tableau Prep は3-4週間に一度、機能開発が進みます。
そのうち、昨年バージョンアップにて次の関数が導入されました。
・Fixed(Tableau同じみのLOD関数ですね)
・Partition(・・・あれSQLにある、、、あいつ?)

先日、「SQLの肝はPartitionだよね!」というツイッターで会話を聞き、せっかくなのでまとめてみようかしら。と考え、まとめてます。

1.詳細レベルとランク計算の作成について

Tableau のヘルプページでガッツリ解説されてます…!
だけでは本noteは成り立たないので、せっかくなのでその機能を確認していきたいと思います。

①PartitionとGroupbyって何が違うの?

画像1

SQL PARTITION BYのサンプル(group byとの違い)より抜粋
この画像すごく分かりやすいですね…!

Patitionは行内で既にグループの役割を与えるのに対して、Groupbyではグループ単位で集計する役割を担うことが多いと思います。

つまり既に縦の状態でグループを作ってくれるよ!ということがポイントです。

②残念ながらPartitionを用いた集計はできない…

従来のSQLはPartition内の計算式で、グループ別の集計等ができると思いますが、Prepでは集計ができません。公式内容を抜粋します。

RANK () 関数内でネストの式はサポートされません。たとえば、[Sales]/{PARTITION [Country]: {ORDERBY [Sales]: RANK() }} / SUM( [Profit] )} はサポートされません。
RANK () 関数と別の式の組み合わせはサポートされません。たとえば、[Sales]/{PARTITION [Country]: {ORDERBY [Sales]: RANK() }} はサポートされません。

このような計算式は、Fixedや別の形式と組み合わせ利用できます。
またグループ累計の場合は、TableauのFixedで解決できます。

③PartitionとOrderbyとナンバリングはセット

標準SQLでは、Orderbyを省略できると思いますが、Prepの場合は、Orderbyが必須です。PartitionがWindow関数として、ランクやナンバリングに使う前提だからだと思われます。

ちなみに逆にPartition無しでOrderbyする挙動は大丈夫です。(SQLから入る人からすると当然じゃんってなりそうな会話ですね…!)

{ORDERBY [Order Priority]: ROW_NUMBER()} # OK 

{ PARTITION [Customer Segment]:{ORDERBY [Order Priority]: ROW_NUMBER()}} # OK

ちなみにAscなどの追加位置は…

{ PARTITION [Customer Segment]:
{ORDERBY [Ship Date] asc : ROW_NUMBER()}
}

ここです。(独特…!!!!Descは省略可能)

④利用用途は?

・重複除外
重複情報を削除等、patititonでユニークにしたい列名をPatitionしてナンバリング、1のみkeepするとユニークな情報になります。
・購入回数の計算
例えばpatitionで顧客情報を取り、その後購買日をASC設定すると、何回目の購入であるかを計算できます。
購入回数別の計算をしたい場合等おすすめです。

他にもこれがあるといいな等あれば、解説したいと思いますっ!

Fixedもあわせて使うと、前準備は更に楽になります…。

以上です、コメント欄でこれも検証してほしい!等あればご教示ください!

拡散宣伝

Tableau PrepのBigQuery書き出し…アイデアです…投票何卒…っ 

https://community.tableau.com/s/idea/0874T000000HDmNQAW/detail


この記事が気に入ったらサポートをしてみませんか?