中級向け

n8n Summarizeノードの使い方:件数と合計で母数が違う

グループごとに合計や件数を出すノードです。値が欠けたアイテムは合計から外れますが件数には入るため、並べて見ると平均を読み違えます。実際に動かして確認しました。存在しない項目を指定してもエラーにならない件も実装まで確かめています。

動作確認: — n8n 2.36.8 / Summarize ノード v1.1

Summarize は、グループごとに合計や件数を出すノードです。 表計算のピボットテーブルにあたります。

カテゴリごとの売上合計、担当者ごとの件数、日付ごとの平均。 そういう集計を、コードを書かずに出せます。

Aggregate が「まとめて1件にする」ノードなら、 こちらは 「グループごとに計算する」 ノードです。

ただし欠けた値の扱いが集計方法ごとに違い、結果を並べると読み違えます。

集計方法は8つ

n8nのSummarizeノード設定画面。Aggregationのドロップダウンが開いており、Append、Average、Concatenate、Count、Count Unique、Max、Min、Sum の8つが並んでいる
Aggregation の選択肢。既定は Count です

Append / Average / Concatenate / Count / Count Unique / Max / Min / Sum の8つです。

グループ分けは Fields to Split By に項目名を書きます。 複数指定するときはカンマ区切りです。

Summarizeノードの設定画面。Fields to Summarize に2項目、Fields to Split By に category、Options の Output Format が Each Split in a Separate Item になっている
Fields to Split By に category を入れた状態

件数と合計で母数が違う

6件のデータを用意しました。Bグループには amount が欠けたものと null のものが 混ざっています。

{ category: 'A', amount: 100, name: '田中' }
{ category: 'A', amount: 200, name: '鈴木' }
{ category: 'B', amount: 300, name: '佐藤' }
{ category: 'B',              name: '高橋' }   // amount が無い
{ category: 'B', amount: null, name: '伊藤' }   // amount が null
{              amount: 500, name: '渡辺' }     // category が無い

amount の合計、name の件数、amount の平均を、category ごとに出した結果です。

[
  { "category": "A", "sum_amount": 300, "count_name": 2, "average_amount": 150 },
  { "category": "B", "sum_amount": 300, "count_name": 3, "average_amount": 300 },
  {                  "sum_amount": 500, "count_name": 1, "average_amount": 500 }
]

出力の項目名は <集計方法>_<項目名> の形で自動的に付きます。

同じ項目で count を取れば揃います。count_amount にすれば1になります。

グループの項目が無いアイテム

最後の1件には category がありません。エラーにはならず、独立したグループになりました。

{ "sum_amount": 500, "count_name": 1, "average_amount": 500 }

category というキー自体が出力に現れません。 後続で $json.category を読むと undefined になります。

Options の Ignore items without valid fields to group by で、 こうしたアイテムを除外できます(既定はオフ)。

出力の形は2つ選べる

Options の Output Format で切り替えます。

表記 結果
Each Split in a Separate Item(既定) グループごとに1アイテム
All Splits in a Single Item 全グループを1アイテムに

後者を選ぶと、こうなりました。

{
  "A": { "sum_amount": 300, "count_name": 2 },
  "B": { "sum_amount": 300, "count_name": 3 },
  "undefined": { "sum_amount": 500, "count_name": 1 }
}

グループ名がそのままキーになります。

存在しない項目を指定してもエラーにならない

amount を kingaku と書き間違えたら、という検証です。

エラーになりませんでした。 結果は sum_kingaku: 0、実行は成功扱いです。 代わりに出力パネルにヒントが出ました。

The field 'kingaku' does not exist in any items

使うときに気をつけること

  • 合計と件数を並べて出すなら、同じ項目で数える。 別項目だと母数がずれます
  • 0 が出たら項目名を疑う。 打ち間違えても止まりません
  • グループ項目が欠けたアイテムは独立したグループになる。 除外したいなら Ignore items without valid fields to group by を使う

検証していないこと

  • 試したのは sum / count / average の3つです。 Append / Concatenate / Count Unique / Max / Min は動かしていません
  • Include Empty Values(空の値を含めるか)は未検証です。 Append などで使う設定です
  • Fields to Split By に複数の項目を指定していません。 1項目だけです
  • Disable Dot Notation は試していません
  • Ignore items without valid fields to group by は、設定の存在を確認しただけで、 実際にオンにして動かしていません
  • 検証したのは6件の小さなデータです

数字が出てくるノードほど、間違っていても気づきにくいと思います。 Summarize は止まらずに 0 を返すので、なおさらです。

次に読む