こんにちは。Turtleです。
今回のサムネイル、なかなかインパクトありませんか?どこで撮影したかあんまり覚えていないんだけど。ぼくはビビッときたらすぐに写真を撮っちゃうタイプの人間です。だからたまにカメラロールを見返すと自分でも「ん?なにこれ」ってなることが結構ある。その瞬間のぼくは確かにビビッときていたはずなんだけど...まあでもそれが普通か。その場の雰囲気とか、そのときの自分の感情とか、その他諸々の要素が絡み合ってビビッとくるものだよね。(何を偉そうに語ってるん)
...さて。気を取り直して。
今回はウィジェットフィルターもしくは数式フィルターを使ってデフォルトの表示を固定し、さらにダッシュボードフィルターで絞り込みをかける方法について調査した。フィルターについての理解に不安がある方は、以下の記事を参考に。
・【Sisense Formula】数式にフィルター設定
・【Filter】Sisenseのフィルターは3層構造
使用するデータはこちら。
先程ダウンロードしたデータをビルドして、
widget:ピボット
行:Class
値:Value
に設定する。
さて、ウィジェットができたところで。今回やりたいのは「Zクラスを省いたものをデフォルトの状態(=ダッシュボードフィルターで何も絞り込んでいない状態)にし、さらにダッシュボードフィルターで任意のクラスに絞り込む」こと。
こう聞いて一番最初に思いつくのは
①ウィジェットフィルターでZクラスを省いたものを設定する
➁ダッシュボードフィルターで絞り込む
という手順だと思うんだよね。さっそく試してみよう。
右のウィジェットフィルターでZクラスだけチェックを外したものを設定する。
これでデフォルトの状態がZクラスが表示されないものとなった。
よし。あとはダッシュボードフィルターでクラスを絞り込むだけだね。今回はA~Cクラスに絞り込むことにしよう。ダッシュボードフィルターでClassを追加しA,B,Cにチェックを入れてOKを押す。
...そういえば、Sisenseにはフィルターが3種類あったね。そう、数式フィルター!あれを使ってどうにかすることができないかな?
①数式フィルターでZクラスを省く
➁ダッシュボードフィルターで絞り込む
これでいけそうかも。さっそく試してみる。
Valueの数式エディタを開き、Class→詳細→フィルターでZのチェックを外してOKを押す。
あらららら。Zクラスは残っているし、Valueは全て同じ数値になっているし...ダッシュボードフィルター以前の問題ですね。なるほど、どうやら値として入っているのはZクラスを除いた各クラスの合計値っぽい。うーむ。
ウィジェットフィルターを使っても数式フィルターを使ってもうまくいかない。けど安心してほしい。これにはちゃんと解決策は存在する(しかも様々なパターン)。以下ではその一部を紹介する。
今までの流れを見て、ファクトテーブルだけでやっているからじゃないの?と思ったそこのあなた。ズバリその通り。今回の問題は、ディメンションテーブルをつくらない限り一生解決しない(少なくともぼくの知る限りでは)問題だったのだ!
...というわけで、ディメンションテーブルを作成する。ElastiCubeでカスタムテーブルを作成。以下のコードを入れて「保存」を押す。
SELECT
DISTINCT Class AS Class_List FROM Fact
新しくできた「Dim」テーブルを「Fact」テーブルと「Class_List」と「Class」でつないでおく。
ビルドして準備はおっけー。これで問題解決のアイテムは手に入れた。以下では、ウィジェットフィルターを使うパターンと数式を使うパターンの2つを紹介する。
最初にウィジェットフィルターを使って試したとき、以下のような手順だったはず。
①ウィジェットフィルターでZクラスを省いたものを設定する
➁ダッシュボードフィルターで絞り込む
これから紹介する解決策も手順は何ら変わらない。ただ使うアイテム(Dimテーブルのカラム)が増えただけのことである。そう、それだけなんだけど、これがあれば問題は一瞬で解決する。
じゃ、サクッと解決しちゃおう。以下のように設定。
行:Class(Factテーブル)
値:Value
ウィジェットフィルター:Class(Factテーブル)
※ウィジェットフィルターはZを外す
さっきは、これでダッシュボードフィルター(Factテーブル)でA~Cクラスで絞り込んでもダメだったんだよね。ダッシュボードフィルターよりもウィジェットフィルターの方が強いから。
じゃあ、ダッシュボードフィルター(Dimテーブル)で絞り込むとどうなるの?って当然思うよね。結果は以下の通り。
お!ちゃんと絞り込めてるじゃん!なるほど、「ウィジェットフィルター > ダッシュボードフィルター」という関係性は、同一の列でしか発生しないっぽい。
...これで終わったらだめだよね。「"っぽい"で終わらずにちゃんと調べろよ...!」という誰かの声が聞こえたので(誰とは言わない)、ちゃんと調べました。
今回の事例だと、「ピボットテーブルの行(Pivot)」「ウィジェットフィルター(Widget)」「ダッシュボードフィルター(Dashboard)」のそれぞれでFactテーブルの列(Class) or Dimテーブルの列(Class_List)が考えられるので、2×2×2= 8パターンが想定される。
どのパターンが「Zクラスを省いたものをデフォルトの状態(=ダッシュボードフィルターで何も絞り込んでいない状態)にし、さらにダッシュボードフィルターで任意のクラスに絞り込む」ことができるのだろうか。結果は以下の通り。
この結果から、ピボットテーブルの列に関係なく、ウィジェットフィルターとダッシュボードフィルターに異なる列をそれぞれ入れてあげれば、正常に絞り込むことができると結論付けることができる。
また、これで「ウィジェットフィルター > ダッシュボードフィルター」という関係性は、同一の列でしか発生しないということも証明できた。
ウィジェットフィルターのパターンは案外簡単に解決したよね。数式フィルターもまったく同じ。手順は同じなんだけど、Dimテーブルの列を使うだけで望んでいた結果が得られるようになる。
①数式フィルターでZクラスを省く
➁ダッシュボードフィルターで絞り込む
手順はこうだったよね。今回も同じように進めていく。
以下のように設定する。
行:Class
値:([Value], [Class_List])
Class_Listのフィルター設定は以下の通り。
これで標準の表示でZクラスを省くのはクリアできた。あとはダッシュボードフィルターでA~Cクラスにちゃんと絞り込むことができればOKなんだけど...ダッシュボードフィルターにはFactテーブルのカラムとDimテーブルのカラム、どっちを使ったらいいの?ってなるよね。結果は以下の通り。
Factテーブルのカラム(Class)使用
なるほど。Dimテーブルのカラムで絞り込むと総計の値は絞り込まれないんだね。うーん。どうも取り扱いが難しい。「結局、どういう場合にちゃんと絞り込めるの?」ってなるよね。安心してほしい。ちゃんと調べました。
ウィジェットフィルターのパターンと同じように、「ピボットテーブルの行(Pivot)」「数式フィルター(Formula)」「ダッシュボードフィルター(Dashboard)」のそれぞれでFactテーブルのカラム or Dimテーブルのカラムの2通りが考えられるため、全体で2×2×2=8パターンが想定される。
どのパターンが「Zクラスを省いたものをデフォルトの状態(=ダッシュボードフィルターで何も絞り込んでいない状態)にし、さらにダッシュボードフィルターで任意のクラスに絞り込む」ことができるのか。結果は以下の通り。
成功したのは「Fact-Dim-Fact」もしくは「Dim-Fact-Dim」だった。「ピボットテーブルの行とダッシュボードフィルターには同じカラムを使用し、かつ数式フィルターには異なるカラムを使用する」とうまくいくようだね。
今回は、ウィジェットフィルターもしくは数式フィルターを使ってデフォルトの表示を設定し、さらにダッシュボードフィルターで絞り込みをかける方法について調査した。フィルターに加えてFactテーブル or Dimテーブルも考えなくてはいけないので、結構ややこしい。ただ、ややこしい分、調査して発見することも多かった。
ウィジェットフィルターの場合は比較的分かりやすいけど、数式フィルターを使う場合は実はけっこう複雑になっている(今回はあえて触れなかった)。機会があればその辺についてまた書こうと思う。
それでは。