[]
테이블 시트 는 데이터 소스 스키마에서 계층형 데이터와 함께 사용할 수 있는 내장 수식을 지원합니다.
필드에 대한 수식을 지정하려면 데이터 소스 스키마의 hierarchy
옵션 내에서 summaryFields 옵션을 사용할 수 있습니다.
summaryFields 속성은 GC.Data.IHierarchySummaryFieldCollection 인터페이스로부터 상속됩니다.
다음 섹션에서는 계층 기반 데이터 수식의 다양한 유형을 설명합니다.
CHILDREN 수식은 부모 레코드에서 levelOffset
단계 떨어진 자식의 fieldName
으로 지정된 값을 가져올 때 사용됩니다. 자식과 부모 간의 단계 수는 levelOffset
값으로 나타냅니다.
만약 levelOffset
이 현재 레코드와 가장 낮은 자식 간의 거리보다 크면 데이터를 가져올 수 없습니다.
수식 정의는 다음과 같습니다:
CHILDREN(levelOffset, fieldName)
ONLYCHILDREN 수식은 부모가 아닌 자식의 fieldName
으로 지정된 값을 가져올 때 사용됩니다.
수식 정의는 다음과 같습니다:
ONLYCHILDREN(fieldName)
PARENT 수식은 현재 레코드에서 levelOffset
단계 떨어진 부모의 fieldName
으로 지정된 값을 가져올 때 사용됩니다.
부모와 현재 레코드 간의 단계 수는 levelOffset
값으로 나타냅니다.
만약 levelOffset
이 현재 레코드와 최상위 부모 간의 거리보다 크면 데이터를 가져올 수 없습니다.
수식 정의는 다음과 같습니다:
PARENT(levelOffset, fieldName)
LEVEL 수식은 현재 레코드의 계층 레벨을 가져오는 데 사용됩니다.
수식 정의는 다음과 같습니다:
LEVEL()
LEVELROWNUMBER 수식은 현재 레코드가 부모 범위 내에서 몇 번째 행인지 가져오는 데 사용됩니다.
수식 정의는 다음과 같습니다:
LEVELROWNUMBER()
다음은 다양한 계층형 데이터 수식을 설정하는 코드 샘플입니다:
window.onload = function () {
var spread = new GC.Spread.Sheets.Workbook(_getElementById('ss'), { sheetCount: 0 });
initSpread(spread);
};
function initSpread(spread) {
spread.options.autoFitType = GC.Spread.Sheets.AutoFitType.cellWithHeader;
spread.clearSheets();
var dataManager = spread.dataManager();
initHierarchyFormulas(spread, dataManager);
}
function initHierarchyFormulas(spread, dataManager) {
var table = dataManager.addTable("Table", {
remote: {
read: {
url: getBaseApiUrl() + "/Hierarchy_Formula"
}
},
schema: {
hierarchy: {
type: 'Parent',
column: 'parent',
summaryFields: {
'budget': '=SUM(CHILDREN(1,"budget"))'
}
},
columns: {
id: {
isPrimaryKey: true,
},
},
}
});
var sheet = spread.addSheetTab(0, "HierarchyFormula", GC.Spread.Sheets.SheetType.tableSheet);
sheet.setDefaultRowHeight(40, GC.Spread.Sheets.SheetArea.colHeader);
sheet.options.allowAddNew = false;
table.fetch().then(function () {
var myView = table.addView("myView", [
{ value: '=CONCAT([@department]," (L",LEVEL(),"-",LEVELROWNUMBER(),")")', caption: 'Department', width: 265, outlineColumn: true },
{ value: "budget", width: 100, caption: 'Budget' },
{ value: '=IF(LEVEL()=0,"",[@budget]/PARENT(1,"budget"))', width: 120, caption: 'Percentage', style: { formatter: '0.00%' } },
{ value: "location", width: 100, caption: 'Location' },
{ value: "phone", width: 150, caption: 'Phone' },
{ value: "country", width: 100, caption: 'Country' },
]);
spread.suspendPaint();
sheet.setDataView(myView);
spread.resumePaint();
});
위 코드를 실행하면 다음과 같은 출력 결과가 표시됩니다:
Ask ChatGPT