こんにちは。ざわかける!のざわ(@zw_kakeru)です。
TableauCRM(旧EinsteinAnalytics)を用いたダッシュボードの作成時に、データをピポットテーブルで表示する際のカラムソートに関するTipsです。
ピポットテーブルにするとシステム側でカラムを勝手にソートされてしまいますが、これを利用しつつ自分の好きな順番で指定して出力することができます。
起きたこと
会社の売上状況を整理しようと思ってTableauCRM(旧EinsteinAnalytics)でダッシュボードを作成し、レシピから出力されたデータをピポットテーブルで表示しました。
結果を見てみると、カラムが10月>11月>12月>1月>2月>9月>下期計>第3四半期トータル>第4四半期トータルの順で出力されてしまっています。表として非常に見づらいですね。
どうやらStringとしての順番にソートされているようです。これは望ましくありません。
順番としては9月>10月>11月>第3四半期トータル>12月>1月>2月>第4四半期トータル>下期計で並んでもらいたいものです。
色々と調べているとデータをピポットテーブルに変換するときにソートの処理が走るということが分かったので、ピポットテーブルを使わない実装にすれば好きな順番での出力が可能になりますね。
しかしそうも言ってられないので、試しにStringとしての順番が上記と一致するように先頭にprefixをつけてみました。
こうすることで望んだ順番での表示はできましたが、不恰好な上に分かりにくくなってしまいます。
10_9月とかって表示されても10月なのか9月なのかややこしいですよね。
(そもそも何で勝手にソートするんだよ〜)という感じですが、できれば余計なprefix無しに自由にカラム順を操作したいところです。
やったこと
解決策を述べていきます。
やることは先述のprefix付与とほぼ同じなのですが、カラムソートのために” “(半角スペース)を使います。
TableauCRMにおいて、文字列の先頭の半角スペースはソート時には文字列として考慮されますが、出力時には文字列として考慮されないという仕様になっています(試行錯誤の末判明)。
これを利用して、SAQLを用いて文字列の先頭に半角スペースを挿入し、その数を項目に応じて調整することで任意の順番で表示することができるようになります。
q = foreach q generate
-- (略)
case
'month'
when "10_9月" then " 9月"
when "11_10月" then " 10月"
when "12_11月" then " 11月"
when "13_第3四半期トータル" then " 第3四半期トータル"
when "14_12月" then " 12月"
when "15_1月" then " 1月"
when "16_2月" then " 2月"
when "17_第4四半期トータル" then " 第4四半期トータル"
when "18_下期計" then "下期計"
end as '月',
-- (略)
このように変換後の文字列の先頭に半角スペースを(数を調整して)挿入することで、望んでいる順番(9月>10月>11月>第3四半期トータル>12月>1月>2月>第4四半期トータル>下期計の順番)でカラムを出力することができました。
ちなみに、文中の半角スペースも同様にソート文字列としては考慮されますが、表示される際は1つの半角スペースとしてのみになるようです。
終わりに
対症療法感が否めませんが、とりあえずこの実装が一番楽かなあと思います。
不便なので公式側で機能として早く実装してもらいたいものですね。
おそらくもう私は間違えませんが、私以外にも困っている人がいると思いますのでメモ書きとして残しておきます。
以上です。