온톨로지FunctionsFunctions on objects커스텀 집계 생성

본 번역은 검증되지 않았습니다. AIP를 통해 영문원문으로부터 번역되었습니다.

커스텀 집계 생성

Functions는 온톨로지의 데이터를 기반으로 커스텀 집계를 계산하는 데 사용할 수 있으며, 이를 Workshop의 차트 위젯에서 표시할 수 있습니다. 이 가이드에서는 온톨로지에서 집계된 데이터를 로드하여 결과를 조작하고 미래 결과의 프로젝션을 생성한 다음 수정된 결과를 반환하는 커스텀 집계 로직을 작성하는 방법에 대해 설명합니다.

이 섹션을 진행하는 동안 다음 참조자료가 유용할 수 있습니다:

집계 로드

이 예에서는 expenses라는 온톨로지를 가지고 있다고 가정하고, 각각에는 그룹의 부서 이름, 날짜, 그리고 비용 금액이 포함되어 있다고 가정해 봅시다. 우리는 다음 6개월 동안 부서별 월간 지출을 추정하려고 합니다. 월간 지출에 대한 집계된 데이터를 로드하는 것으로 시작할 수 있습니다:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 // Objects의 search 메소드를 실행하여 결과를 반환받습니다. const result = await Objects.search() // expenses 메소드를 통해 경비에 관련된 데이터를 검색합니다. .expenses() // groupBy 메소드를 통해 데이터를 부서 이름(departmentName)별로 그룹화합니다. // topValues 메소드는 가장 많이 나온 값들을 반환합니다. .groupBy(expense => expense.departmentName.topValues()) // segmentBy 메소드를 통해 데이터를 날짜(date)별로 세분화합니다. // byMonth 메소드는 월별로 데이터를 세분화합니다. .segmentBy(expense => expense.date.byMonth()) // sum 메소드를 통해 각 그룹별로 금액(amount)의 합계를 구합니다. .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 };

모두 함께, 이 Function에 대한 전체 예제 코드는 다음과 같습니다:

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 38 @Function() public async estimatedDepartmentExpenses(): Promise<ThreeDimensionalAggregation<string, IRange<Timestamp>>> { // 객체를 검색하여 비용을 그룹화하고, 부서 이름별로 최고값을 찾습니다. // 날짜별로 세그먼트를 만들고, 각 비용의 총합을 구합니다. 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 차트에서 사용하여 앞으로 6개월 동안의 월별 지출 예측을 보여줄 수 있습니다.