
ThoughtSpotのフィルター機能について
AkimasaKajitaniです。今回は、ThoughtSpotのフィルターについて全容を解説したいと思います。
ThoughtSpotでは、適用されるタイミングの異なる様々なタイプのフィルターがあります。モデルに適用するフィルター、チャートに適用するフィルター、そしてライブボードで適用するフィルターといった形になります。また、フィルターも様々な機能が存在します。知っておくと便利な機能もいくつかあります。
それぞれ以下のようになっているので、順番に解説していきます。
- 行レベルセキュリティルール(テーブルレベル)
- モデルのフィルター
- ランタイムフィルター
- 検索のフィルター
- ライブボードフィルター
- ライブボードクロスフィルター
- リンクされたライブボードフィルター
- 選択的なライブボードフィルター
- 必須のライブボードフィルター
- バルクフィルター
- フィルター設定の保存
行レベルセキュリティ(RLS)ルール
行レベルセキュリティをご存知でしょうか?例えば、データ内に営業部という項目があり、その中のデータが西日本営業、東日本営業、というふうに記載があるときに、自分の所属している営業組織のデータしか見えないようにしたい場合に使う機能が「行レベルセキュリティ」です。
つまり、西日本営業部の人は、データが西日本営業のときだけ見える、ということです。
この行レベルセキュリティという機能は一種のフィルターです。ただし、基本的にエンドユーザーはこれを意識せずに利用します。自動的に許可された行のみを見れるようにテーブルレベルでフィルターがかかるようになっています。
実際にデータベースに対して発行されるSQL文では、そのユーザーのみが見れるようなWHERE句とともにSQLが構築されています。
参考:
About row-level security (RLS) | ThoughtSpot Cloud Documentation
RLS rules | ThoughtSpot Developers
モデルのフィルター
モデル自体にフィルターをかけることが可能です。モデルには、フィルターという項目があり、そこでフィルターを設定することができます。モデルの編集権限を持っていない場合、このフィルターを解除することはできません。
画面としては、以下のようにモデルのエディターの「フィルタータブ」で設定が可能です。

追加の際は、以下のように通常のフィルターを設定するような画面が開きます。

ランタイムフィルター
組み込みの場合にのみ使えるフィルターで、Visual Embed SDK、RestAPI、URLクエリパラメータを使ってフィルターをかけることができます。これも一般的にエンドユーザーが意識することはできず、開発者によって使われます。
例えば、URLクエリパラメータの場合を見てみましょう。
通常のURLは以下のように表記されます。
https://XXXXX.thoughtspot.cloud/#/insights/saved-answer/fcb6bad1-8937-498a-a8bf-d16c0c11ea75
ランタイムフィルターを使うときは、「https://XXXXX.thoughtspot.cloud/」の直後に設定します。(以下、日本語でフィルタをかけているため、日本語部分がURLエンコードされています)
https://XXXXX.thoughtspot.cloud/?col1=%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA&op1=EQ&val1=Hardware#/insights/pinboard/b72eaa7c-b6c6-4fed-b66e-4ca9f88751b8
書式としては、
?col1={column-name}&op1={operator}&val1={value}
となります。「operator」は、いくつかから選択するようになります。例えばイコールなら「EQ」となります。詳細はドキュメント を参照ください。
実際、オリジナルでは以下のようになります。

これが、ランタイムフィルターで、「?col1=カテゴリ&op1=EQ&val1=Hardware」と追加すると、以下のように絞られます。

ただし、ライブボードのフィルタの画面には何も表示されないので、エンドユーザーがURL以外でフィルタがかかっていることを判断できない点は要注意です。
検索(Search/Answer)のフィルター
このあたりからエンドユーザーが実際に利用するフィルターの機能です。
検索画面では、基本的にキーワードでフィルターをかけることができます。UI的には検索バーに直接入力するか、データパネル上でマウスをあてると、各項目に漏斗の形のアイコンが出てくるため、これをクリックすると、フィルターをかける設定ダイアログが開くようになっています。

検索バーでは、フィルタとして動作している要素は灰色で表示されます。

また、チャート内でも、以下のように灰色で表示されます。

ライブボードに組み込まれた検索結果は、画面上に表示がでないため、ライブボード上ではあまり意識することは少ないかもしれません。気をつけないといけないのは、ライブボードフィルターが検索結果内で使っているのと同じ項目に対して設定されている場合、ライブボードフィルタが上書きしてしまうことです。
また、リンクフィルターが設定されているような場合でも、意図せずフィルタが上書きされることがあるかもしれません(リンクされる側のフィルタが上書きされるケース)。
NULL値や空白を区別してフィルタをかけたい
Nullや空白を区別してフィルタをかけたいということがあるかと思います。詳しくは以下のURLをご覧ください。Nullをキーワード検索する場合は、{null}で検索が可能です。
https://docs.thoughtspot.com/cloud/26.2.0.cl/filter-null

ライブボードフィルター
まず、ライブボードのフィルターを使うためには、データソースが「モデル」である必要があります。データソースが「テーブル」の場合、フィルターを適用することはできません。
また、ライブボードのフィルターは、デフォルトではライブボードで設定したフィルターがライブボード上のすべてのチャートに対して上書きするような動きをします。
さらに、ライブボードのフィルターはいくつかの設定項目により、様々なカスタマイズができるようになっています。
例えば、以下のようなことを行いたいですか?
- チャート内の要素で他のチャートにフィルターをかけたい
- 異なるデータソース(モデル)間でフィルターを同期したい
- 特定のチャートのみにライブボードのフィルタを適用したい
- 必須にしたいフィルターがある
- ある項目のフィルターに対して、いくつものアイテムを一括で適用したい
通常のライブボードフィルター
通常、ライブボードのフィルタは、以下のように編集画面から「追加」の「フィルターを追加」から行います。

これで、追加するフィルター候補がでてくるので、フィルターに設定したい項目を選びます。

これで、設定した項目がフィルターとして機能するようになります。

チャート内の要素で他のチャートにフィルターをかけたい(ライブボードクロスフィルター)
これは、各チャートの各要素を右クリックすることで、「フィルター」メニューが出てきますが、この機能は「ライブボードクロスフィルター(Liveboard cross filters)」という機能です。
https://docs.thoughtspot.com/cloud/26.2.0.cl/liveboard-filters-cross
これは、各チャートの属性要素を右クリックした際、他のチャートにもその属性でフィルタがかかる機能です。

なお、同じライブボード内に、データソースとして異なるモデルを使っているチャートがある場合、フィルターの対象外となります。この場合でもフィルターがかかるようにしたい場合は、リンクされたライブボードフィルター(Linked Liveboard filters)の機能を利用してください。すなわち、ライブボードフィルタを追加し、リンクフィルターを設定すればオッケーです。
制限事項
- Attribute(属性)のみ適用されます
- 日付は適用されません
異なるデータソース(モデル)間でフィルターを同期したい(リンクされたライブボードフィルター)
これは「リンクされたライブボードフィルター(Linked Liveboard filters)」で実現可能です。
https://docs.thoughtspot.com/cloud/26.2.0.cl/liveboard-filters-linked
ライブボードフィルターに対して「フィルターをリンクする」に設定を追加することで、モデル間のフィルターをリンクさせることができます。

制限事項
- リンクした項目は、同じ値の時のみリンクされます。例えば、モデル1の「地域」という列の値が「関東」の場合、リンクしているモデル2の「地域」の値が「関東地区」という文言だった場合はリンクしません。
- 同じモデル内の異なる項目間同士でフィルターをリンクすることはできません
- リンクする列のデータ型は同じである必要があります(DATE型の列とDATETIME型の列はリンクできません)
- リンクされた側の項目をフィルタに追加しようとすると、リンクした側の項目と同一とみなされ追加はできません(すでに追加された状態とみなされます)
なお、各チャートを右クリックした際に出てくるフィルター(ライブボードクロスフィルター)にも、リンクフィルターの設定が適用されます。
特定のチャートのみにライブボードのフィルタを適用したい(選択的なライブボードフィルター)
これは「選択的なライブボードフィルター(Selective Liveboard filters)」という機能で対応可能です。
https://docs.thoughtspot.com/cloud/26.2.0.cl/liveboard-filters-selective
ライブボードフィルターを追加すると、「適用可能なチャート」というタブがあるため、そこでそのフィルタが適用されるチャートを選択するだけです。

必須にしたいフィルターがある(必須のライブボードフィルター)
これは、「必須のライブボードフィルター(Mandatory Liveboard filters)」という機能で対応可能です。この機能を使うと、フィルタを何かしらかけるまでライブボードには何も表示されません。この性質を使って、ライブボードアクセス時に自動的に表示されるクエリを抑制することができます。
https://docs.thoughtspot.com/cloud/26.2.0.cl/liveboard-filters-mandatory
設定は、ライブボードフィルターの画面の「フィルターオプション」から指定します。

これを適用すると、以下のように必須フィルターを設定していない場合は画面がでなくなります。

これを利用して、ライブボードの最初の表示の際に不要なSQLがDWHに飛ばないようにすることが可能です。
制限事項
- この機能は「新しいライブボードエクスペリエンス」を選択している場合にのみ利用可能です
- ThoughtSpot Mobileでは利用できません
ある項目のフィルターに対して、いくつものアイテムを一括で適用したい
これは「バルクフィルター(bulk filter)」という機能で対応可能です。
フィルターする際、基本的に一つずつキーワードに書いていくか、ぽちぽちマウスでチェックボックスにチェックをいれていく必要がありますが、バルクフィルターを使うと、一括でフィルターしたいアイテムのリストを貼り付けてフィルタをかけることができます。
https://docs.thoughtspot.com/cloud/26.2.0.cl/filter-bulk
例えば、フィルターをかける際、ダイアログの右上にでてくる「一括で値を追加」ボタンをクリックすると、この機能が利用できます。

以下のようなダイアログが開くため、あとはフィルタしたい値を貼り付けるだけです。貼り付け元として、ThoughtSpotのテーブル表示からそのままコピペできるのが地味に便利です。

あとは、「値の追加」を行うと、以下のように選択された状態になります。

制限事項
- この機能を利用するユーザーは、テーブルもしくはモデルに対しての編集(Edit)権限が必要となります
フィルター設定の保存
フィルター設定は実は保存が可能です。ライブボードフィルターを操作すると、左端に「ビューを保存」というボタンが出てくるのに気づいている人がいるかもしれません。

このボタンをクリックすると、以下のように「ビューを保存」ダイアログが出てきます。

さらに、フィルタを変更すると、同じボタンからまた「ビューを保存」することができます。

ここで保存したフィルターの設定は、いつでも呼び出しが可能です。

ビューを保存する際、「このライブボードにアクセスできる全員が利用できるようにする。」にチェックを入れると、設定した本人以外もこのフィルターをいつでも適用できるようになります。
設定したビューは、「ビューを管理」で削除したり名称を変更したり、誰でも見えるようにするオプションをいつでも変更が可能です。

なお、この機能を利用して、何もフィルタをかけていない状態を保存しておけば、表示を一括で消すようなリセットボタンとして機能させることができます。
まとめ
ThoughtSpotで利用できるフィルタの機能について紹介しました。
多種多様なフィルタがあるので、うまくつかってあげてください。
※ThoughtSpotバージョン26.6.0.cl-66
運営会社