目次
- 絞り込みは効く。ただし単位はレコード
- 「使えない」のではなく「単位が違う」
- 標準機能でできる対処
- 1. そもそもテーブルをやめて、1行1レコードにする
- 2. 集計したい値だけ、テーブルの外に出しておく
- 3. 関連レコード一覧で見せる
- テキストの値を外に出したいとき
- まとめ
受注アプリのテーブルに明細を入れて運用していると、こういう場面が来ます。「商品Aを含む注文だけ見たい」。絞り込みを設定すると、たしかにレコードは絞られます。ところが開いてみると、商品B も C も混ざったテーブルがそのまま表示される。欲しかったのは商品Aの行だけなのに。
設定ミスではありません。kintoneの絞り込みは、テーブルに対しても動きますが、効く単位が「行」ではなく「レコード」だからです。この記事では、その仕組みと、集計・抽出をしたいときにどう設計すればよいかを整理します。
絞り込みは効く。ただし単位はレコード
サイボウズのアップデート情報には、こう書かれています。
テーブル内のフィールドを絞り込み条件に指定した場合、そのテーブル内に絞り込み条件を満たす行が1行以上存在するレコードが、絞り込み結果に表示されます。
つまり「条件に合う行が1行でもあれば、そのレコードが対象になる」という動きです。レコードが対象になる以上、表示されるのはテーブル全体です。条件に合わない行も一緒についてきます。

「使えない」のではなく「単位が違う」
この挙動自体は、レコードを探す用途では理にかなっています。「商品Aを含む注文を探す」なら、まさにこの動きが欲しい。
噛み合わなくなるのは、行を数えたい・行だけを取り出したいときです。
- 商品Aが何件売れたか数えたい → レコード数は分かるが、行数は分からない
- 商品Aの明細だけを一覧で並べたい → 他の商品の行も一緒に出てくる
- 商品ごとの金額を集計したい → テーブルの中の値は、そのままでは集計軸に使いにくい
- 担当者ごとに明細を配りたい → レコード単位でしか切り出せない
kintoneのレコードは1件のかたまりで、テーブルはその中の入れ子です。一覧・グラフ・通知はレコードを1件として扱うため、入れ子の中の1行を独立した対象として扱えません。ここが設計上の分かれ目になります。
標準機能でできる対処
1. そもそもテーブルをやめて、1行1レコードにする
いちばん素直な解決です。明細をテーブルではなく別アプリのレコードとして持ち、親レコードとは関連レコード一覧でつなぎます。
こうすると1行が1レコードになるので、絞り込みも集計もグラフも、すべて標準機能のまま素直に効きます。行を数えたい・行で抽出したいという要件があるなら、この形が本来の姿です。
ただし入力の手間は増えます。1件の注文に10明細あるなら、10レコード作ることになります。テーブルの「まとめて入力できる」利点は失われます。
2. 集計したい値だけ、テーブルの外に出しておく
テーブルの入力しやすさを残したまま、扱いたい値だけをテーブルの外の通常フィールドにも持たせる方法です。
たとえば明細の合計金額を計算フィールドで外に出しておけば、その値でグラフも絞り込みも作れます。テーブルは入力用、外のフィールドは集計用と役割を分ける考え方です。
合計や件数のような数値は計算フィールドで対応できますが、商品名や担当者のようなテキストの値は、標準の計算フィールドでは外に出せません。ここが手詰まりになりやすい部分です。
3. 関連レコード一覧で見せる
明細を別アプリに持ったうえで、親レコードには関連レコード一覧として表示する方法です。1つ目の派生形ですが、見た目はテーブルに近くなります。
ただし関連レコード一覧の値は、そのアプリの絞り込みや集計には使えません。あくまで表示用です。
テキストの値を外に出したいとき
実務で行き詰まるのは、たいてい2番目の「テキストの値を外に出せない」ところです。合計金額は計算フィールドで出せても、「このレコードに含まれる商品名」「明細の担当者」は標準では外に出せません。
手で書き写す運用にすると二重入力になり、書き忘れたレコードから静かに崩れていきます。
テーブルコピープラグインは、この写す作業を保存時に自動化するものです。テーブルの列の値を、テーブル外のフィールドへコピーします。コピー先は通常のフィールドなので、一覧の絞り込みにも、グラフにも、条件通知にも、CSV書き出しにもそのまま使えます。複数行あるときは改行で連結し、テーブルが空のときは書き換えません。
対応しているのは「文字列(1行)」と「ユーザー選択」の列です。数値や日付の列には対応していないので、金額の合計などは従来どおり計算フィールドを使ってください。購入前に無料で試せます。
まとめ
- テーブル内フィールドでの絞り込みは効く。ただし単位はレコードで、条件に合う行が1行でもあればそのレコードが出る
- 表示されるのはテーブル全体。条件に合わない行も一緒に見える
- 行を数えたい・行だけ抽出したいなら、1行1レコードの設計に変えるのが本筋
- 入力しやすさを残すなら、集計に使う値だけをテーブルの外に持つ
- 数値は計算フィールドで外に出せるが、テキストの値は標準では出せない
アプリを作るときに「この値は後で数えたくなるか」を一度考えておくと、テーブルにするか別レコードにするかを迷わずに決められます。あとから作り替えるのは、データが増えてからだと大仕事になります。