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

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()の動作を疑似的に再現する」方法がベストです。

以下でも、引き続き請求書テーブルを例に解説します。

実現するための考え方

課題は「フィルター情報がダッシュボード内まで届かない」点です。
これを解決するため、

  1. フィルターに必要なIDを一時的に保存する
  2. そのIDでフィルターしたスライスを作成し、ビューに表示する

という仕組みを作ります。

クリックから遷移までのフロー

システムの流れは次の4ステップです。

  1. ユーザーが請求書ヘッダをクリック

  2. 一時格納テーブルへ「ユーザーID + 請求書ヘッダID」を追加・更新

  3. スライスが一時格納された情報を参照して明細をフィルター

  4. ダッシュボードにフィルター済みの請求書明細が表示される

では、実際に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()の挙動をダッシュボードでも再現できました。

実はこの方法かなり便利で、インタラクティブモードを使ったダッシュボードの遷移でも使えます。これについては別記事がありますので、参考にしてみてください。