AppSheet 開発Tips SELECT/FILTER /REF_ROWSの違いと使い分け

SELECT/FILTER/REF_ROWSは、同じような仕事をするため、使い分けが混乱する場面があります。

いづれの関数も、テーブルからデータを抽出することを目的にしていますが、テーブルのリレーションによって使い分けをすると、簡潔に表現できます。

例えば受注と受注明細テーブルがあった場合には以下のようにapp formulaにSELECT/FILTER/REF_ROWS関数をいれます。

このような使い分けの勘所をご紹介できればと思います。

選択の基準

まず、SELECT/FILTER/REF_ROWS関数のどれを選択するかの基準です。

1.リレーションを活用して簡単に関連データを取得したい場合:

→ REF_ROWS()が最適。親子関係が設定済みなら、最小限の設定で自動的にデータが取得できます。

2.条件付きで他テーブルのキー値を取得したい場合:

→ FILTER()が適している。キー値リストを取得した後、他のロジックに活用しやすい。(例:[テーブルキー値].[値段] といった参照が可能)

3.柔軟な条件でデータを抽出したい場合:

→ SELECT()が便利。
指定列の値を自由に取得できるため、条件が複雑な場合にも対応可能です。

関数適用範囲適切な場面特徴
SELECT()特定の列(任意の値のリストを取得)条件付きで特定の列の値を取り出したい場合カスタマイズ性が高く、複数列にまたがる条件でも使える。
FILTER()テーブル全体(キー値のリストを取得)条件付きで他テーブルのレコードを検索し、そのキーを活用したい場合主に「キー」を使った操作で有効。他テーブルとのリレーションに強い。
REF_ROWS()リレーション(関連するレコードのキーを取得)参照列が設定されており、自動的に関連レコードを取得したい場合明示的に条件を書く必要がなく、リレーション構築済みであれば自動で使える。

SELECT/FILTER/REF_ROWS関数

以下で、1つづつ見ていきたいと思います。

1. SELECT()

テーブルのREF型ではなく、他のタイプ型のカラム情報が欲しい場合はSELECT関数を使います。SELECTと後述するSUM、MAXなどを組み合わせたりする時などです。

特性:

  • 指定したテーブルや列から条件に一致する値のリストを取得します。
  • 汎用性が高く、柔軟にデータをフィルタリングできます。
  • 結果として「リスト」を返します。

構文:

SELECT(テーブル名[列名], 条件式)

使用例:

  • 特定の条件に合うデータを取得する場合

受注テーブルに紐づく受注明細を取得し、その単価の合計を取得します。この時、欲しいのは受注明細のキーである「受注番号:商品コード」ではなく、「単価」のため、SELECTを用いて「単価」を取得しています。

SELECT(受注明細[単価],[受注番号]=[_THISROW].[受注番号])

主な使い所:

  • 他のテーブルから条件付きでデータを取得したいとき。
  • 特定の列の値だけを取り出したいとき。

2. FILTER()

特性:

  • 指定したテーブルから条件に一致する「行」のキー値を取得します。
  • そのまま参照テーブルに紐づけて使用しやすい形式。
  • 結果として「キー値のリスト」を返します。

構文:

FILTER(テーブル名, 条件式)

使用例:

  • 条件に合うすべてのキーを取得する場合

受注テーブルの中で、現在の行の顧客IDに一致する顧客備考のキーLISTを取得します。

FILTER(“顧客備考”,[顧客ID]=[_THISROW].[顧客ID])

主な使い所:

  • 他テーブルのレコードを条件付きでリレーション構築したい場合。
  • キー値を使って直接他のテーブルのデータにアクセスするとき。

3. REF_ROWS()

特性:

  • 他のテーブルの「参照(Ref)」によるリレーションから、自動的に関連付けられた行を取得します。
  • SELECT()FILTER()を明示的に記述する必要がないため、効率的。
  • 結果として「キー値のリスト」を返します。

構文:

REF_ROWS("テーブル名", "Ref列名")

使用例:

  • 関連するレコードを自動取得する場合

受注テーブルの受注番号列を参照し、現在の行に関連付けられた受注明細のキーを取得します。

REF_ROWS("受注明細", "受注番号")

主な使い所:

  • テーブル間のリレーションがすでに定義されている場合。
  • 親テーブルから子テーブルの関連レコードを簡単に取得したいとき。

まとめ

いかがでしょうか?

AppSheetを作成する際の参考になれば幸いです。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です