Tableau Prep分析関数Partitionを試したお話(SQLにあるが、Desktopにない)
Tableau Prep は3-4週間に一度、機能開発が進みます。
そのうち、昨年バージョンアップにて次の関数が導入されました。
・Fixed(Tableau同じみのLOD関数ですね)
・Partition(・・・あれSQLにある、、、あいつ?)
先日、「SQLの肝はPartitionだよね!」というツイッターで会話を聞き、せっかくなのでまとめてみようかしら。と考え、まとめてます。
1.詳細レベルとランク計算の作成について
Tableau のヘルプページでガッツリ解説されてます…!
だけでは本noteは成り立たないので、せっかくなのでその機能を確認していきたいと思います。
①PartitionとGroupbyって何が違うの?
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
この記事が気に入ったらサポートをしてみませんか?