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
やはりこれしかないんだね。

コメント