Sisenseナレッジ - INSIGHT LAB

【Sisense Dashboard】フィルターによるデフォルト表示の設定と絞り込み

作成者: Turtle|2020年10月16日

こんにちは。Turtleです。

今回のサムネイル、なかなかインパクトありませんか?どこで撮影したかあんまり覚えていないんだけど。ぼくはビビッときたらすぐに写真を撮っちゃうタイプの人間です。だからたまにカメラロールを見返すと自分でも「ん?なにこれ」ってなることが結構ある。その瞬間のぼくは確かにビビッときていたはずなんだけど...まあでもそれが普通か。その場の雰囲気とか、そのときの自分の感情とか、その他諸々の要素が絡み合ってビビッとくるものだよね。(何を偉そうに語ってるん)

...さて。気を取り直して。
今回はウィジェットフィルターもしくは数式フィルターを使ってデフォルトの表示を固定し、さらにダッシュボードフィルターで絞り込みをかける方法について調査した。フィルターについての理解に不安がある方は、以下の記事を参考に。

・【Sisense Formula】数式にフィルター設定
・【Filter】Sisenseのフィルターは3層構造

使用するデータはこちら

1. 問題

先程ダウンロードしたデータをビルドして、

widget:ピボット
行:Class
値:Value

に設定する。


さて、ウィジェットができたところで。今回やりたいのは「Zクラスを省いたものをデフォルトの状態(=ダッシュボードフィルターで何も絞り込んでいない状態)にし、さらにダッシュボードフィルターで任意のクラスに絞り込む」こと。

こう聞いて一番最初に思いつくのは
①ウィジェットフィルターでZクラスを省いたものを設定する
➁ダッシュボードフィルターで絞り込む
という手順だと思うんだよね。さっそく試してみよう。

右のウィジェットフィルターでZクラスだけチェックを外したものを設定する。


これでデフォルトの状態がZクラスが表示されないものとなった。


よし。あとはダッシュボードフィルターでクラスを絞り込むだけだね。今回はA~Cクラスに絞り込むことにしよう。ダッシュボードフィルターでClassを追加しA,B,Cにチェックを入れてOKを押す。


よし、これで完了、余裕だなあ~と思いきや...!

あれ、ダッシュボードフィルターでA~Cクラスを選択しているのに、ピボットの行が全く絞り込まれていない...?なるほど、どうやらダッシュボードフィルターよりウィジェットフィルターの方が強いらしいね。うーん、どうしようか。

...そういえば、Sisenseにはフィルターが3種類あったね。そう、数式フィルター!あれを使ってどうにかすることができないかな?

①数式フィルターでZクラスを省く
➁ダッシュボードフィルターで絞り込む

これでいけそうかも。さっそく試してみる。

Valueの数式エディタを開き、Class→詳細→フィルターでZのチェックを外してOKを押す。
数式フィルターは(数式, フィルター)という使い方をするので、([Total Value], [Class])という形でOKを押すと...


あらららら。Zクラスは残っているし、Valueは全て同じ数値になっているし...ダッシュボードフィルター以前の問題ですね。なるほど、どうやら値として入っているのはZクラスを除いた各クラスの合計値っぽい。うーむ。

ウィジェットフィルターを使っても数式フィルターを使ってもうまくいかない。けど安心してほしい。これにはちゃんと解決策は存在する(しかも様々なパターン)。以下ではその一部を紹介する。

2. 解決策

2-1. Dimテーブルの追加

今までの流れを見て、ファクトテーブルだけでやっているからじゃないの?と思ったそこのあなた。ズバリその通り。今回の問題は、ディメンションテーブルをつくらない限り一生解決しない(少なくともぼくの知る限りでは)問題だったのだ!

...というわけで、ディメンションテーブルを作成する。ElastiCubeでカスタムテーブルを作成。以下のコードを入れて「保存」を押す。

SELECT 
DISTINCT Class AS Class_List FROM Fact

新しくできた「Dim」テーブルを「Fact」テーブルと「Class_List」と「Class」でつないでおく。


ビルドして準備はおっけー。これで問題解決のアイテムは手に入れた。以下では、ウィジェットフィルターを使うパターンと数式を使うパターンの2つを紹介する。

2-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クラスを省いたものをデフォルトの状態(=ダッシュボードフィルターで何も絞り込んでいない状態)にし、さらにダッシュボードフィルターで任意のクラスに絞り込む」ことができるのだろうか。結果は以下の通り。


この結果から、ピボットテーブルの列に関係なく、ウィジェットフィルターとダッシュボードフィルターに異なる列をそれぞれ入れてあげれば、正常に絞り込むことができると結論付けることができる。
また、これで「ウィジェットフィルター > ダッシュボードフィルター」という関係性は、同一の列でしか発生しないということも証明できた。

2-3. 数式フィルター

ウィジェットフィルターのパターンは案外簡単に解決したよね。数式フィルターもまったく同じ。手順は同じなんだけど、Dimテーブルの列を使うだけで望んでいた結果が得られるようになる。

①数式フィルターでZクラスを省く
➁ダッシュボードフィルターで絞り込む

手順はこうだったよね。今回も同じように進めていく。
以下のように設定する。

行:Class
値:([Value], [Class_List])

Class_Listのフィルター設定は以下の通り。
OKを押して出来上がったものを見てみると、Zクラスも消えているし値もきちんと各クラスに応じたものになっている。

これで標準の表示でZクラスを省くのはクリアできた。あとはダッシュボードフィルターでA~Cクラスにちゃんと絞り込むことができればOKなんだけど...ダッシュボードフィルターにはFactテーブルのカラムとDimテーブルのカラム、どっちを使ったらいいの?ってなるよね。結果は以下の通り。

Factテーブルのカラム(Class)使用


Dimテーブルのカラム使用(Class_List)


なるほど。Dimテーブルのカラムで絞り込むと総計の値は絞り込まれないんだね。うーん。どうも取り扱いが難しい。「結局、どういう場合にちゃんと絞り込めるの?」ってなるよね。安心してほしい。ちゃんと調べました。

ウィジェットフィルターのパターンと同じように、「ピボットテーブルの行(Pivot)」「数式フィルター(Formula)」「ダッシュボードフィルター(Dashboard)」のそれぞれでFactテーブルのカラム or Dimテーブルのカラムの2通りが考えられるため、全体で2×2×2=8パターンが想定される。

どのパターンが「Zクラスを省いたものをデフォルトの状態(=ダッシュボードフィルターで何も絞り込んでいない状態)にし、さらにダッシュボードフィルターで任意のクラスに絞り込む」ことができるのか。結果は以下の通り。

成功したのは「Fact-Dim-Fact」もしくは「Dim-Fact-Dim」だった。「ピボットテーブルの行とダッシュボードフィルターには同じカラムを使用し、かつ数式フィルターには異なるカラムを使用する」とうまくいくようだね。

3. まとめ

今回は、ウィジェットフィルターもしくは数式フィルターを使ってデフォルトの表示を設定し、さらにダッシュボードフィルターで絞り込みをかける方法について調査した。フィルターに加えてFactテーブル or Dimテーブルも考えなくてはいけないので、結構ややこしい。ただ、ややこしい分、調査して発見することも多かった。

ウィジェットフィルターの場合は比較的分かりやすいけど、数式フィルターを使う場合は実はけっこう複雑になっている(今回はあえて触れなかった)。機会があればその辺についてまた書こうと思う。

それでは。