見積アプリを他のアプリでグラフに表示したい

お世話になります。

既にある見積アプリのレコードごとの合計金額、件数を別アプリにて月別でグラフ表示をさせたいと考えております。
グラフは、Chart.jsで(javascript上ですが)数字を入れれば表示できるところまでは完了しているのですが、
数字の持ってくるところで煮詰まっております。

条件としては、
A:合計する対象
・全体
・会社ごと
B:期間(見積有効期限もしくは作成日)
・今月、先月、先々月
・今月、翌月、翌々月
・上期(4~9月)
・下期(10~3月)
・今年度
・前年度
で月ごとに表示。
一番の問題として、数字をどう持ってくればいいのか?
一覧アプリを別に作り、そこから条件に合うものをREST APIで持ってくるべきなのか、
そもそも直接合計を出してしまえばいいのか?
https://developer.cybozu.io/hc/ja/community/posts/205023906-%E3%82%A2%E3%83%97%E3%83%AAA%E3%81%AE%E5%95%86%E5%93%81%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%95%86%E5%93%81%E3%81%94%E3%81%A8%E3%81%AB%E9%9B%86%E8%A8%88%E3%81%97%E3%82%A2%E3%83%97%E3%83%AAB%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E3%82%BB%E3%83%83%E3%83%88%E3%81%97%E8%B2%A9%E5%A3%B2%E7%8A%B6%E6%B3%81%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%9F%E3%81%84-
を参考にすると何とかなりそうではあるのですが、動的に?動きそうなので作成日からだと大変そうだと
感じております。(ドロップダウンでBで絞ってしまう)

いっそ、見積作成時に別アプリに会社名、見積期限、金額だけを登録してそこから条件にあう
ものを取り出せばいいのかと少し迷走し始めております。
何か指針となるアドバイス等頂ければありがたいです。
よろしくお願いいたします。

こんにちは!

詳細がわからないので、アドバイスになるかどうかわからないですが

どのくらいの頻度で画面更新するかとかにも関係しそうですね。

画面切り替え?(月ごとに切り替えるのでしょうか?そのへんよくわかりませんが)のたびなどに
APIをいちいち叩くのが勿体無い感じでしたら、
最初に必要日付範囲のレコードを全部持ってきて表示だけ切り替えれば良いと思いますし

そこまで気にしなければ、画面切り替えの都度APIで必要なレコードを取得すれば良いかと思います。

レコードを取得してjsonをSQLのように集計できるようなライブラリもあります。

kintone でSQLを使う

juridon様

お世話になります。
最終的に、見積に「年度」と「月」の項目を別途用意して、
「データ集計&グラフ」アプリにてkintone REST APIにて対応
することにしました。

「データ集計&グラフ」アプリでは、「年度」と「会社名」を
変更、もしくはsubmitしたときに、GETして合計数を出し、
それを元にchart.jsでグラフを描画します。
ただ、他の条件などの追加で項目数が多くなったので、そのへんは
今後使いながら検証必要はあるのかなと考えています。

JavaScriptは下記リンクを参考にしました。
https://fastsystem.funai.site/relatedrecords-get/

実際のコードは下記のようになりました。

function() {
'use strict';
const events = [
'app.record.create.change.Accounth',
'app.record.create.change.FinancialYear',
'app.record.edit.change.Accounth',
'app.record.edit.change.FinancialYear',
];

//4月から3月まで同じ内容繰り返し
kintone.events.on(events, function(event) {
const appId = kintone.app.getRelatedRecordsTargetAppId("Related");
const query = 'Month="' + event.record.Month4.value + '" and FinancialYear="' + event.record.FinancialYear.value + '" and Account="' + event.record.Accounth.value + '"';
const body = {
'app' : appId,
'query' : query,
'totalCount' : true
};
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
event.record.AprNo.value = resp.totalCount;
var sum = 0;
resp.records.forEach((record)=>{
sum += record.TotalAmount.value ? parseInt(record.TotalAmount.value) : 0;
});
event.record.AprAmount.value = sum;
kintone.app.record.set(event);
});
return event;
});