オントロジーファンクションオブジェクトの関数カスタム集計を作成する

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

カスタム集計を作成する

オントロジー内のデータに基づいてカスタム集計を計算するために、Functions を使用できます。そして、Workshop のチャートウィジェットに表示できます。このガイドでは、オントロジーから集計データをロードし、結果を操作して将来の結果の予測を作成し、変更された結果を返すカスタム集計ロジックの作成方法について説明します。

このセクションで取り組む際に、以下のリファレンスが役立ちます:

集計をロードする

この例では、expenses というオントロジーがあり、それぞれに組織の部門名、date、経費 amount が含まれていると仮定します。次の6ヶ月間の部門別月間支出を推定したいとします。まず、月間支出の集計データをロードすることから始めます。

Copied!
1 2 3 4 5 6 7 8 9 10 // Objects.search()を実行し、その結果を待機します const result = await Objects.search() // 経費に関する情報を取得します .expenses() // 経費を部署名でグループ化します。トップの値に基づいています .groupBy(expense => expense.departmentName.topValues()) // 経費を月別に分けます .segmentBy(expense => expense.date.byMonth()) // 各月の経費合計を計算します .sum(expense => expense.amount);

集計結果の操作

次に、各部門の次の 6 か月間の支出を推定します。例として、非常に素朴なアプローチを使用し、最後の月の値を次の 6 か月間の見積もりとして使用しましょう。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 const modifiedBuckets = result.buckets.map(bucket => { // 最近の月に対応するバケツを見つける const lastBucket = bucket.value[bucket.value.length - 1]; let nextSixMonths: IBaseBucket<IRange<Timestamp>, Double>[] = []; let currentMonth = lastBucket.key.max!; // 6回ループする for (let i = 0; i < 6; i++) { // この範囲の終わり(次の月)を見つける const nextMonth = currentMonth.plusMonths(1); // 次の月を日付範囲として使用し、最近の月を値として新しいバケツを追加する nextSixMonths.push({ key: { min: currentMonth, max: nextMonth, }, value: lastBucket.value, }); currentMonth = nextMonth; } // 修正された結果を返す return { key: bucket.key, value: nextSixMonths }; });

集計結果の返却

これで、次の6か月の見積もりが作成できましたので、この見積もり値を返すだけです:

Copied!
1 2 // 返り値として、修正されたバケットを含むオブジェクトを返す return { buckets: modifiedBuckets };

以下に、この関数の完全な例示コードを示します:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 @Function() public async estimatedDepartmentExpenses(): Promise<ThreeDimensionalAggregation<string, IRange<Timestamp>>> { // Objects.search() による結果を集計します const result = await Objects.search() .expenses() // 支出に関するデータを取得します .groupBy(expense => expense.departmentName.topValues()) // 部門名でグループ化します .segmentBy(expense => expense.date.byMonths()) // 月ごとに区分します .sum(expense => expense.amount); // 各区分の支出を合計します const modifiedBuckets = result.buckets.map(bucket => { // 最も最近の月に対応するバケットを見つけます const lastBucket = bucket.value[bucket.value.length - 1]; let nextSixMonths: IBaseBucket<IRange<Timestamp>, Double>[] = []; let currentMonth = lastBucket.key.max!; // 6回ループします for (let i = 0; i < 6; i++) { // この範囲の終わり(次の月)を見つけます const nextMonth = currentMonth.plusMonths(1); // 次の月を日付範囲として使用し、最も最近の月を値として新しいバケットを追加します nextSixMonths.push({ key: { min: currentMonth, max: nextMonth, }, value: lastBucket.value, }); currentMonth = nextMonth; } // 変更された結果を返します return { key: bucket.key, value: nextSixMonths }; }); // 変更後のバケットを返す return { buckets: modifiedBuckets }; }

その結果として得られた集計は、Workshop Chartで使用して、次の6ヶ月間の月別支出見積もりを表示することができます。