List of things(リスト型)

概要

テキスト・数値・Things・ユーザーなど、あらゆる型を“リスト”として扱うことができます。
Bubble のリストは 最大 10,000 アイテムまで に制限されています。それ以上追加しようとするとエラーになります。


… :count(件数)

リスト内のアイテム数を返します。


… contains …(含む)

リストが指定した値を含む場合に yes を返します。


… doesn’t contain …(含まない)

リストが指定した値を含まない場合に yes を返します。


… :first item(先頭のアイテム)

リストの最初のアイテムを返します。


… :last item(最後のアイテム)

リストの最後のアイテムを返します。


… :random item(ランダムなアイテム)

リストから任意の1つのアイテムを返します。
数学的に完全なランダムではなく、主に表示用途で利用します。


… :item #(#番目のアイテム)

リストの # 番目のアイテムを返します。


… :items until #(先頭〜#番目)

1番目から #番目までのサブリストを返します。


… :items from #(#番目〜最後)

#番目から最後までのサブリストを返します。

応用:範囲抽出(例:5〜10番目)

List of things:items until 10:items from 5

順序が重要です。


… contains list …(リストを含む)

1つ目のリストが、2つ目のリストのすべての要素を含む場合に yes。


… join with …(連結テキスト)

リストをテキストとして連結し、区切り文字として引数を使用します。
line_break を使うと各要素が改行区切りになります。


… :sum(合計)

数値リストの合計を返します。
空のリストは「空の値」を返します。


… :product(積)

数値リストをすべて掛け合わせた結果を返します。


… :average(平均)

数値リストの平均値を返します。
空のエントリは無視されます。


… :median(中央値)

数値リストの中央値を返します。
要素数が偶数なら中央2つの平均値。


… :min(最小値)

最も小さい値を返します。


… :max(最大値)

最も大きい値を返します。


… :approximate count(概算件数)

高速処理で、正確ではない件数を返します(誤差は約 ±2%)。


… :cached aggregation(キャッシュ集計)

集計結果を 30秒間キャッシュして再利用し、サーバー負荷を軽減します。
対象:count / approximate count / max / min / median / average / sum / product


… :filtered(フィルタ)

検索後に、さらに条件で絞り込むためのフィルタです。
検索条件とほぼ同じ方法で使います。


… :format as text(テキスト整形)

リストを 任意のフォーマットでテキスト化します。

選択肢:
・区切り文字
・各アイテムの表示内容
・BBコード

例:名前のリスト
This name」と太字指定、区切りをスペースにすると「name1 name2 name3

外部APIで利用するなどで、JSON作成にも使えます。

JSON 形式のリストを作る場合:

{
  key: "This value's field"
}

リストに2件あれば:

{
  key: "Value1's field"
},
{
  key: "Value2's field"
}

… :sorted(並び替え)

リストをソートします。


:ranked by …(類似度によるランキング)

対象アイテムとの数値フィールドの RMS 類似度でランク付けします。
例:マッチングアプリでユーザーをランキングするなど。


… merged with …(結合)

2つのリストを結合して1つのリストを返します。
重複は1つにまとめられます。


… intersect with …(積集合)

2つのリストの両方に含まれるアイテムだけを返します。


… :unique elements(重複排除)

リストの重複アイテムをすべて取り除きます。


… :plus item(アイテム追加)

リストに新しいアイテムを追加した新しいリストを返します。
既に存在する場合は追加されません。


… :minus item(アイテム削除)

リストから指定したアイテムを削除した新しいリストを返します。


… :minus list(リスト削除)

元のリストから、引数リスト内の要素をすべて除外します。


… :make static(リストを固定化)

動的リストを、その瞬間の静的リストに変換します(ワークフロー内のみ)。
※ 高度な機能です。
※ Repeating group の動作は変わりません。


… :group by(グループ化)

この演算子は、リストを関連する項目ごとの「グルーピング(まとまり)」に分割し、各グループの要約値を計算します。
これはデータをチャートやテーブルで可視化したいときに特に役立ちます。
例:顧客ごとの注文数・売上額、アプリの月ごとの新規ユーザー数など。

「:group by」を選択すると、グルーピングを追加する集計項目を追加する ためのパネルが開きます。
例えば「X を Y ごとに集計して表示する」という文があれば、X が 集計(Aggregation)、Y が グルーピング(Grouping) になります。

グルーピングの追加

グルーピングを追加すると「Field 1 to group by」「Field 2 to group by」という項目が表示されます。
これは「どのフィールドを使ってグループ分けするか」を指定するものです。

Bubbleが現在サポートしているグループ化対象:

  • User(ユーザー)
  • カスタムデータタイプ
  • テキスト
  • 数値
  • 日付

単一 / 複数グルーピング

多くの場合、1つのグルーピングで十分ですが、複数のグルーピングを使うこともできます。
例:
注文リスト(Order)に「顧客(Customer)」と「日付(Date)」がある場合

  • 顧客 → 月 の順にグループ化すると、出力順は
    {Customer 1, Jan}, {Customer 1, Feb}, …, {Customer 2, Jan}, …
  • 月 → 顧客 の順だと
    {Jan, Customer 1}, {Jan, Customer 2}, …, {Feb, Customer 1}, …

最初のグルーピング → 次のグルーピング の順で並びます。

数値フィールドのグループ化

数値でグループ分けする際は「Type of grouping」で以下を選択できます。

Exact(完全一致)

同じ数値のものだけが同じグループになります。
例:3.1 の項目は 3.1 のグループになる。

Bucket(バケット)

一定範囲ごとにグループ化する方式。
Bucket で指定するものは下記です。

  • Interval(区切り幅)
  • Starting value(開始値)

例:
Starting value = 10、Interval = 5
→ バケットは 10, 15, 20, 25, 30 …

項目は「その値以上で最も大きいバケット」に入ります
(例:19.999 → 15、20 → 20)。
開始値より小さい値は結果に含まれません。

Do not skip empty groups(空のグループを飛ばさない)

Bucket が「最後のグルーピング」か「唯一のグルーピング」の場合に表示します。
これを ON にすると:

  • Ending value(終了値)を指定できる
  • その範囲のバケットを「データがなくてもすべて表示」できる
    → 折れ線グラフで欠けている月を飛ばさないようにできる

例:
Start = 20、Interval = 10、End = 50
→ 20 / 30 / 40 / 50 の4つのバケットが必ず出ます。

複数グルーピングでの「空グループを飛ばさない」

例えば:

  • グループ①:果物の種類(apple / banana / pear)
  • グループ②:数値のバケット(20〜50)

すると出力は:

{apple, 20}, {apple, 30}, {apple, 40}, {apple, 50},
{banana, 20}, {banana, 30}, ...
{pear, 20}, {pear, 30}, ...

いずれかの果物が 20〜60 の値を持っていれば、全組み合わせが表示されます。

日付フィールドのグループ化

数値と同様に:

  • Exact(完全一致)
  • Day(日ごと)
  • Month(月ごと)

があります。

Day / Month のバケット例

Day:2日間隔
Starting date:2018年4月17日 11:03(NY)
→ バケットは

  • 2018/4/17 00:00
  • 2018/4/19 00:00
    (+days 演算と同じルール)

Month では Starting date の月初に丸められます。

空グループを飛ばさない(Day/Month)

例として、月ごとの折れ線グラフで「データゼロの月」を飛ばさないために使います。
例:
Month、Interval = 1、Ending date = 2018年6月17日
→ 最終バケットは 2018/6/1(6月分はすべて含まれる)

集計(Aggregation)

グルーピング後、各グループに対して以下の計算が可能になります。

  • Count(件数)
  • Sum(合計)
  • Product(積)
  • Average(平均)
  • Median(中央値)
  • Min(最小値)
  • Max(最大値)

選んだ数値フィールドに対して適用されます。Count はフィールドを選ぶ必要のない唯一の集計です。

:group by の実行結果

「:group by」演算子をリストに対して実行すると、新しいリストが生成されます。
この新しいリストは、リピーンググループやチャートのデータソースとして利用でき、さらに追加のリスト操作を行うことも可能です。
生成されたリストには、作成された各グループごとに1つのアイテムが含まれ、そしてそのアイテムには

  • 各グルーピングに対応するフィールド
  • 各集計(aggregation)に対応するフィールド
    が含まれます。

グルーピングのフィールド名

各グルーピングによって作成されるフィールドは、元のデータでグループ化に使用したフィールド名と同じ名前になり、
そのフィールドには、そのグループを表す「バケット値」が入ります。

例:
数値フィールド「my magic number」を、

  • Interval = 10
  • Starting value = 0
    で「Bucket(バケット)」グルーピングした場合、

生成されるリストには「my magic number」というフィールドが含まれます。

たとえば、「20 のバケット」に入るグループ(= 値が 20 以上、30 未満のすべての項目で構成されたグループ)のアイテムでは、
このフィールドの値は 20 になります。

集計(Aggregation)のフィールド名

追加した集計ごとに、新しいフィールドが出力リストに生成されます。
このフィールド名は以下のように構成されます:

「集計の種類」 + 「元フィールド名」

例えば、「my magic number」フィールドに対して Average(平均) を計算する集計を追加した場合、
出力リストには 「average of my magic number」 というフィールドが作成されます。

一方、Count(件数) は特定のフィールドを対象に計算するわけではないため、
単に 「count」 というフィールドが追加されます。


…:each item…

「:each item」プレフィックスは、リスト自体ではなく、リスト内の各アイテムに対して演算子が作用する場合に、リスト演算子の前に付けられます。
このプレフィックスは機能を変更するものではなく、選択された演算子がどのように動作するかをわかりやすく示すためだけに存在します。