リスト型のカラムが「テキスト」として連結されてしまう?

AppSheet
AppSheetDataTipsデータ型

AppSheetでText型のカンマ区切りデータをリスト化し、ユニークな選択肢を生成する正しい方法

AppSheetのEnumEnumList型の選択肢を動的に生成したい場合、元のデータがText型でカンマ区切りの文字列として保存されていると、そのままではリストとして扱われず、連結された文字列として認識されてしまうことがあります。

例えば、「ユーザー」テーブルのグループlistカラムがText型で、以下のようにデータが格納されているとします。

userID社員名グループlist
U001佐藤営業部,経理部
U002田中開発部
U003山田営業部,広報部
U004鈴木人事部,総務部

このとき、別のテーブルの担当グループカラム(Enum型など)で、これらのユーザーが所属するすべてのユニークなグループ名(例: {"営業部", "経理部", "開発部", "広報部", "人事部", "総務部"}) を選択肢として表示したいとします。

{“営業部,経理部” , “開発部” , “営業部,広報部” , “人事部,総務部”}


解決策:SELECTとSPLITの組み合わせ

この課題を解決する最も直接的で簡潔な方法は、ご指摘いただいた通り、SELECT関数とSPLIT関数を組み合わせて使用することです。

以下の式を、あなたのEnumまたはEnumList型カラムの**Suggested values**に設定してください。

UNIQUE(
  SPLIT(
    SELECT(ユーザー[グループlist], TRUE),
    ","
  )
)

この式は、以下のステップで動作し、ご希望通りのユニークなグループ名のリストを生成します。

  1. SELECT(ユーザー[グループlist], TRUE):
    • まず、AppSheetは「ユーザー」テーブルの全ての行から、[グループlist]カラムの値(例えば "営業部,経理部""開発部")を抽出します。
    • このとき、SELECT関数はこれらのテキスト値を一つのリストとして集約します。結果は、LIST("営業部,経理部", "開発部", "営業部,広報部", "人事部,総務部") のようになります。まだ、各要素はカンマ区切りの「長いテキスト」のままです。
  2. SPLIT(..., ","):
    • ここが重要なポイントです。SPLIT()関数は、第1引数にテキストを、第2引数に区切り文字を指定します。
    • 実は、AppSheetのSPLIT()関数は、第1引数に「テキストのリスト」が渡された場合、そのリストの各要素(それぞれのテキスト)に対してSPLIT処理を適用し、その結果生成されるすべてのリストを「平坦化」して一つの大きなリストとして返します。
    • 例えば、SPLIT(LIST("営業部,経理部", "開発部"), ",") を実行すると、
      • "営業部,経理部"{"営業部", "経理部"} に、
      • "開発部"{"開発部"} にそれぞれ分割され、
      • 最終的にこれらが平坦化されて {"営業部", "経理部", "開発部"} というリストが生成されます。
    • したがって、SPLIT(SELECT(ユーザー[グループlist], TRUE), ",") の結果は、{"営業部", "経理部", "開発部", "営業部", "広報部", "人事部", "総務部"} のような、すべての個々のグループ名が要素となった平坦なリストになります。
  3. UNIQUE(...):
    • 最後に、UNIQUE()関数がこの平坦なリストから重複するグループ名を取り除き、ユニークなグループ名だけのリスト(例: {"営業部", "経理部", "開発部", "広報部", "人事部", "総務部"})が完成します。

{“営業部” , “経理部” , “開発部” , “広報部” , “人事部” , “総務部”}


まとめ

AppSheetでText型のカンマ区切りデータをリストとして扱い、そこからユニークな選択肢を生成したい場合は、以下の簡潔な式で実現できます。

UNIQUE(
  SPLIT(
    SELECT(ユーザー[グループlist], TRUE),
    ","
  )
)