LINKTOFILTEREDVIEW()をダッシュボードで使う方法

画面遷移と同時にフィルターを適用できる LINKTOFILTEREDVIEW() 関数。非常に便利な機能ですが、ひとつ大きな弱点があります。
それは「ダッシュボードでは機能しない」という点です。
本記事では、この制限を回避し、ダッシュボードでも LINKTOFILTEREDVIEW() と同等の動きを再現する方法を紹介します。
なお、LINKTOFILTEREDVIEW() の基本については以下の公式ドキュメントを参照してください。
AppSheet公式:LINKTOFILTEREDVIEW()
LINKTOFILTEREDVIEW()はダッシュボードでは動作しない
具体例として、シンプルな請求書データを使って説明します。
テーブルは以下の2つです。
- 請求書ヘッダ

- 請求書明細

請求書明細側が請求書ヘッダIDを参照し、請求書ヘッダで明細の合計を出します。
データは以下のような状態で入っています。
- 請求書ヘッダView

- 請求書明細View

通常の動作(ダッシュボード以外)
LINKTOFILTEREDVIEW() を使って、請求書ヘッダをクリックした際に、そのヘッダIDに紐づく明細のみを表示するアクションを設定します。

LINKTOFILTEREDVIEW(
"請求書明細",
[請求書ヘッダID]=[_THISROW].[請求書ヘッダID]
)請求書1をクリックすると、請求書明細Viewに遷移して、請求書1の請求書ヘッダIDを持っている明細のみが表示されます。
- 請求書1の行をクリック

↓
- 請求書1にを持っている明細のみフィルターして表示

遷移先をダッシュボードにすると・・・
しかし、遷移先をダッシュボードにした場合は挙動が変わります。
実例では、請求書明細Viewのみをダッシュボードに含めています。

アクションの遷移先をダッシュボードに変更します。
LINKTOFILTEREDVIEW(
"請求書明細ダッシュボード",
[請求書ヘッダID]=[_THISROW].[請求書ヘッダID]
)するとどうでしょうか。
ダッシュボード内に請求書明細のみを配置していますが、フィルターが効いていません。
- 請求書1をクリック

↓
- フィルターが効いていない!

考えられる原因
公式に明示されているわけではありませんが、おそらく次のような仕組みになっているためと思われます。
- ダッシュボードは複数のページを格納した一つのページである
- フィルター情報は "ダッシュボード外側"までは届くが、中の個別ビューには届かない
つまり、フィルターが無効化されているのではなく、ダッシュボードという“箱”でフィルター情報が止まってしまっているイメージです。
ダッシュボードでLINKTOFILTEREDVIEW()の動きを再現する方法
結論として、
LINKTOFILTEREDVIEW()を直接使ってダッシュボードへフィルター付きで遷移することはできません。
そのため、以下のように「LINKTOFILTEREDVIEW()の動作を疑似的に再現する」方法がベストです。
以下でも、引き続き請求書テーブルを例に解説します。
実現するための考え方
課題は「フィルター情報がダッシュボード内まで届かない」点です。
これを解決するため、
- フィルターに必要なIDを一時的に保存する
- そのIDでフィルターしたスライスを作成し、ビューに表示する
という仕組みを作ります。
クリックから遷移までのフロー
システムの流れは次の4ステップです。
- ユーザーが請求書ヘッダをクリック
- 一時格納テーブルへ「ユーザーID + 請求書ヘッダID」を追加・更新
- スライスが一時格納された情報を参照して明細をフィルター
- ダッシュボードにフィルター済みの請求書明細が表示される
では、実際にAppSheetを使ってみていきましょう。
実装手順
1.一時格納テーブルの作成
- テーブル名:一時格納TB
- カラム名:
ID(TEXT)
ユーザーID(TEXT)
請求書ヘッダID(TEXT)
2.アクションの設置
アクションは、以下の4つを作成します。
①ユーザーIDと請求書ヘッダIDを追加
②ユーザーIDと請求書ヘッダIDを更新
③請求書明細ダッシュボードに遷移
④1~3をまとめて実行
①ユーザーIDと請求書ヘッダIDを追加
一時格納TBにユーザーIDと請求書ヘッダIDを追加します。
これは、一時格納TBにユーザーIDがまだ無い場合に、②のアクションが動作しないため、最初にこのアクションを実行します。
ただし、2回目は以降は実行させないので、条件式を付けます。
②ユーザーIDと請求書ヘッダIDを更新
ユーザーIDに紐づく請求書ヘッダIDを更新します。これはINPUT関数を使います。難易度が高めなので、ここでは設定のみを説明します。
③請求書明細ダッシュボードに遷移
最後に、ダッシュボードに遷移するアクションを設定します。
ここでは、LINKTOFILTEREDVIEW()ではなく、「LINKTOVIEW()」を使用します。
④1~3をまとめて実行
「Grouped: execute a sequence of actions 」アクションを設定し、①~③のアクションを順番に実行します。
3.スライスの作成
アクションが完成したら、最後にスライスを作成します。
- スライス名:s_請求書ヘッダIDフィルター
スライスでは、以下の条件で行を取得します。
- 現在のユーザーと一時格納TBに入力されているユーザーIDが一致する行の請求書ヘッダIDを取得
- その請求書ヘッダIDを持つ明細のみを取得
この条件設定には、LOOKUP()関数を用います。
このスライスをダッシュボードに表示させる明細一覧ビューに設定します。
いざ、ダッシュボードで表示!
それでは、実際の挙動を見てみましょう。
・請求書ヘッダをクリック
・フィルターされた明細が表示された!
さいごに
以上で、LINKTOFILTEREDVIEW()の挙動をダッシュボードでも再現できました。
実はこの方法かなり便利で、インタラクティブモードを使ったダッシュボードの遷移でも使えます。これについては別記事がありますので、参考にしてみてください。