본문으로 건너뛰기
AUISoft에이유아이소프트
AUIPivot v2.8 DEMO

기준 가격 이상 차량의 판매 비중

registerCustomAggregator

각 지점에서 판매한 차량 중 기준 가격 이상인 차량이 차지하는 비중입니다.

registerCustomAggregator()로 전체 판매 대수와 조건에 맞는 판매 대수를 모은 뒤 나누는 계산을 등록합니다. PRICE는 한 대 가격, COUNT는 판매 대수입니다.

예를 들어 전체 10대 중 기준 가격 이상인 차량을 3대 팔았다면 30%입니다. 판매기록 수가 아닌 판매 대수로 계산합니다.

등록한 id를 operation에 지정하고, aggregatorOptions.minPrice에 기준 가격을 전달하십시오. formatString으로 계산 결과를 백분율로 표시합니다.

AUIPivot.registerCustomAggregator(myPivotID, {
    id: "PRICE_THRESHOLD_SHARE",
    version: 1,
    labelText: "기준 가격 이상 판매 비중",
    // 기준 가격을 따로 지정하지 않으면 300만 원을 사용합니다.
    defaultOptions: { minPrice: 3000000 },
    validateOptions: function (options, context) {
        // 판매 대수 외에 같은 기록의 가격도 계산에 필요합니다.
        context.requireField("PRICE");
        return Number.isFinite(options.minPrice) && options.minPrice >= 0;
    },
    create: function () {
        // 각 지점과 분기마다 전체 대수, 조건에 맞는 대수를 따로 모읍니다.
        return { allUnits: 0, matchedUnits: 0 };
    },
    accumulate: function (state, value, context) {
        // value는 COUNT 필드의 판매 대수입니다. 기록 한 건이 3대이면 3을 더합니다.
        if (!Number.isFinite(value) || value <= 0) return;
        state.allUnits += value;

        // 가격을 확인할 수 있고 기준 이상인 경우에만 조건에 맞는 대수에 더합니다.
        const price = context.getValue("PRICE");
        if (Number.isFinite(price) && price >= context.options.minPrice) {
            state.matchedUnits += value;
        }
    },
    merge: function (target, source) {
        // 소계와 총계에서는 비율을 평균내지 않고 두 판매 대수 합계를 합칩니다.
        target.allUnits += source.allUnits;
        target.matchedUnits += source.matchedUnits;
    },
    finalize: function (state) {
        // 조건에 맞는 대수를 전체 대수로 나눕니다. 판매 대수가 없으면 빈칸입니다.
        return state.allUnits === 0 ? null : state.matchedUnits / state.allUnits;
    }
});

// 등록한 집계를 값 필드에 지정하고 기준 가격을 전달합니다.
AUIPivot.setValueFields(myPivotID, [
    { dataField: "COUNT", operation: "SUM", customLabelText: "판매 대수", formatString: "#,##0" },
    {
        dataField: "COUNT",
        operation: "PRICE_THRESHOLD_SHARE",
        // minPrice는 위에서 등록한 집계 함수가 읽는 기준 가격입니다.
        aggregatorOptions: { minPrice: 3000000 },
        customLabelText: "기준 가격 이상 판매 비중",
        formatString: "0.00%"
    }
]);

필터를 적용하면 해당 기록 안에서 비중을 계산합니다. 소계와 총계도 각 범위의 판매 대수 합계로 다시 나눕니다.

자동차 판매 자료를 불러오는 중입니다.