見出し画像

#kintone100日チャレンジ Day080:標準クロス集計の外側を設定で扱う「クロス集計表アドバンス」を組んでみた

面倒解決エンジニアの森田ユウゴです。
台湾からお届けする「#kintone100日チャレンジ」の 80 日目。

台湾は本日祝日、個人的な用事があるので台湾時間ではギリギリ午前中にコミット。

👉 #kintone100日チャレンジの概要はこちら

本日のテーマは、kintoneアプリ管理者・業務改善担当者向けの「クロス集計表アドバンス」。kintoneの基本機能にもクロス集計表はありますが、今回は「サブテーブルや複数の集計列まで、カスタムビュー上でまとめて扱いやすくする」方向に寄せました。

「クロス集計表アドバンス」について

🎯 どんな課題に向き合ったか(現場の不とベネフィット)

  • 現場の「不」: kintone標準のクロス集計表は、複数の項目を掛け合わせた集計をすぐ作れる便利な機能です。一方で、サブテーブル内の数値をレコード直下のフィールドと同じ軸で集計したい、複数の集計列を並べたい、日付の抜け月を0で埋めたい、といった少し込み入った集計では、標準機能だけだと運用に合わせきれない場面があります。

  • 導入後の世界(ベネフィット): カスタムビューを1つ用意し、プラグイン設定で行軸・列軸・集計列を選ぶだけで、1次元集計にも2次元クロス集計にも切り替えられます。設定をJSONでエクスポート/インポートできるので、似た構成のアプリへ横展開しやすいのも狙いです。

💡 着想・こだわり(既存との違い)

kintoneには標準のグラフ機能としてクロス集計表があります。公式ヘルプでも、クロス集計表は大項目と中項目など複数の分類項目を使い、集計結果を縦横に掛け合わせて表す機能として説明されています。

なので、今回の見せ場は「クロス集計表を新しく作ること」ではありません。

こだわったのは、標準機能の外側にある集計ニーズを、プラグイン設定だけで扱える形に寄せることです。たとえば、レコード直下の数値フィールドとサブテーブル内の数値フィールドを同じ集計列として扱う。日付軸は年・四半期・月・週・日で丸める。列軸を指定したときだけ2次元クロス集計に切り替える。こういう「毎回コードを書けばできるけれど、現場では設定で済ませたい」部分を詰めました。

実装面では、一覧表示イベントではJavaScript APIで表示対象ビューや絞り込み条件を取得し、全件集計が必要なレコード取得だけREST APIのcursorを使っています。標準の一覧条件を尊重しつつ、10,000件超の取得にも耐えやすい構成にしたのがポイントです。

✨ これで出来ること(機能概要)

まずはこちらをご覧ください。

カスタムビュー上に集計表を表示: 選択したカスタムビューのHTMLに `<div id="advanced-crosstab"></div>` を置くと、その場所に集計表を描画します。対象ビュー以外では動作しないため、既存の一覧とは分けて運用できます。

  • 1D / 2D のクロス集計を設定で切り替え: 行軸だけなら1次元集計、列軸も指定すれば行軸×列軸の2次元クロス集計になります。集計方法は合計・件数・平均・最大・最小に対応しています。

  • サブテーブル・日付補完・設定移行に対応: 直下フィールドだけでなくサブテーブル内フィールドも集計対象にできます。日付は年・四半期・月・週・日単位で丸められ、欠落区間を0で補完する設定も用意しています。

課題

現時点では下記のような課題が残っています。

  • REST API cursorによる全件取得の負荷
    クロス集計は表示中の一覧条件に合うレコードをまとめて集計するため、レコード取得にはREST APIのcursorを使っています。10,000件超にも対応しやすい一方で、大量データではREST消費枠や処理時間を考慮する必要があります。

さいごに

明日もお楽しみに!

下記のブログもご覧ください!
👉 【#kintone100日連続チャレンジ】AIにkintoneカスタマイズを100%任せたらどこまでいけるか?現役フリーランスの「100 Days of kintone Hacks」始動!
👉 ココナラで「kintone有資格者が導入や運用の相談にのります」サービスを開始します!


いいなと思ったら応援しよう!