gusuku Customine で集計のカスタマイズ

kintoneで集計カスタマイズ

kintoneでとある問合せを集積するアプリがあったと思いねえ。問い合わせがあるごとに、日時、担当者、問合せ者の性別や年齢層、その内容等を記録するアプリである。
そのアプリを、1日の終わりに集計して、Excelで出力したいという依頼。
例えば、各担当者が何件受けたかという件数の集計なら、SQLであれば担当者名でグループ化して、あとは行数をカウントしてやればいい。その他の項目も同様に計算できる。問題はそれを実現するコマンドは何かということとなる。

コマンドがない?

しかし探し始めて困惑。そういった都合のいい「やること」が見つからない。いや、そんなことはないでしょう。どう考えてもこういったニーズは相当あるはず。と探し続けているうちによさそうな「やること」を発見。

レコードを仕分けして別のアプリに登録する

それは、「レコード」内にある「レコードを仕分けして別のアプリに登録する」対象のレコードを、特定のキーを指定することでグループ化でき、数値フィールドの内容を計算することができるようだ。これだ!詳しくはGUSUKUのサイトを参照のこと。
https://support.gusuku.io/ja-JP/support/solutions/articles/36000175077

パラメータの設定例は以下。

仕分けキー例えば担当者名。
さらにテーブルを集約するキー今回は不要だが、レコード内にテーブルがある場合、こちらもグループ化が可能ということか。これはオプション。
登録するアプリ「集約_担当者名」的なアプリを事前に作成しておく。
レコードに対するマッピング登録アプリとレコードのフィールドの突き合せ設定。
登録先テーブル今回は不要なのだが、必須になっているので、ダミーテーブルを作成しておく必要がある。
テーブルに対するマッピングこれも必須なので、ダミーで何かしら登録する。まあ内訳として記録しておくことにしよう。

ん、「別のアプリに登録」……追加しかできないってこと?

この「やること」を実装してみて気がついた。これ、動かすたびにアプリにデータ行を追加してしまう。Excelへの出力は受け付けた日付でまとめて集計するから、例えば昼に間違えて集計ボタンを押してしまったら、1日の終わりに再度集計した際に午前中のデータ分がダブって出力されてしまうことになる。これは大変よろしくない。とすると、集計の初期処理として、まず同一日付のデータを集計前にクリアする必要がある。

Customineはデータの削除ができない!

しかしCustomineは「やること」においてデータの削除機能を提供していなかった。
「予期せぬ動作によってデータが失われる危険性を鑑み、削除機能は提供していません。フラグを立てたりして代用しておくんなまし」
いやー、そのー、それは有り体に申し上げて、過保護とか大きなお世話とかになりませんかね……
物理削除より論理削除って、理屈はわかりますけどさあ……kintoneでやるのは正直面倒くさい……
それに集計データが無尽蔵に積み上がるのもなんか嫌だなあ。
今回はExcel出力が主眼で、集計値のKintone上の保存は考慮していないし、間違って押したりした場合の不完全なデータとかが残ってしまうのもいただけない。

仕方がない、ループで回そう

やむを得ずアプローチを変えることにして、仕方がないのでもっと原始的に行くことにした。
アプリとして担当者マスタを作成。フィールドに担当者名と、集計値の保存フィールドを作成。このマスタアプリを各集計項目分作成する。

  • やること「リストから要素を取り出す」を利用し、マスタから担当者名を取り出す。
  • 元データから担当者名と日付で絞り込んでレコード取得。
  • その行数を取得し、担当者マスタの集計値フィールドを更新。
  • マスタのデータ分繰り返す。

これでマスタに集計値が保存されるので、これを項目種類分繰り返す。
なんだか馬鹿っぽいし、処理も若干重いしでこれもあまり気に入らないけど、少なくとも集計値は処理のたびに上書きされるので、データの無駄な積み上がりはない。
それに、恐らくこれ以外の手法は取れない気がする。

公式でも同じことをやっていた

これはその後に気がついたんだが、公式でも同じようなことをやっていた。
https://support.gusuku.io/ja-JP/support/solutions/articles/36000202473
やはりこれしかないんだね。

コメント