PIVOTBY 함수로 수식을 통한 데이터 요약을 만들 수 있습니다. 두 개의 축에 따른 그룹화와 관련 값 집계 기능을 지원합니다.
인수
필수
설명
row_fields
Y
행을 그룹화하고 행 헤더를 생성하는 데 사용되는 값을 포함하는 열 지향 배열 또는 범위입니다.
col_fields
Y
열을 그룹화하고 열 헤더를 생성하는 데 사용되는 값을 포함하는 열 지향 배열 또는 범위입니다.
values
Y
집계할 데이터를 포함하는 열 지향 배열 또는 범위입니다.
function
Y
그룹화된 데이터를 요약하는 함수입니다.
[field_headers]
N
숫자는 row_fields, col_fields 및 values가 헤더를 갖는지 여부와 필드 헤더가 결과에 포함되어야 하는지 여부를 지정합니다.
[row_total_depth]
N
행 헤더에 총합이 포함되어야 하는지 여부를 결정합니다.
[row_sort_order]
N
행이 어떻게 정렬되어야 하는지 나타내는 숫자입니다. 숫자는 row_fields의 열에 해당하며, 그 뒤에 values의 열이 옵니다. 숫자가 음수이면 행은 내림차순/역순으로 정렬됩니다.
[col_total_depth]
N
열 헤더에 총합이 포함되어야 하는지 여부를 결정합니다.
[col_sort_order]
N
열이 어떻게 정렬되어야 하는지 나타내는 숫자입니다. 숫자는 col_fields의 열에 해당하며, 그 뒤에 values의 열이 옵니다. 숫자가 음수이면 열은 내림차순/역순으로 정렬됩니다.
[filter_array]
N
데이터 행이 고려되어야 하는지 여부를 나타내는 불리언 값이 포함된 열 지향 1D 배열입니다.
[relative_to]
N
집계 함수의 두 번째 인수에 제공되는 값들을 제어합니다.
참고:
PIVOTBY 함수는 allowDynamicArray가 true인 경우에만 유효합니다.
배열 또는 범위에 여러 열이 포함될 수 있습니다. 이러한 경우에는 출력에 여러 집계가 포함됩니다.
LAMBDA 함수의 벡터를 제공할 수 있습니다. 이러한 경우에는 출력에 여러 집계가 포함됩니다. 벡터의 방향에 따라 행 단위 또는 열 단위로 배치할지를 결정합니다.
field_headers가 누락되면 자동으로 데이터에 값 인수를 기반으로 헤더가 포함되었다고 가정합니다. 첫 번째 값이 텍스트이고 두 번째 값이 숫자인 경우 데이터에 헤더가 있다고 가정합니다. 행 또는 열 그룹 수준이 여러 개인 경우 필드 헤더가 표시됩니다.
window.onload = function () {
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 1 });
initSpread(spread);
};
function initSpread(spread) {
let sheet = spread.getActiveSheet();
spread.options.allowDynamicArray = true;
spread.suspendPaint();
spread.suspendCalcService();
sheet.setColumnCount(30);
let data = [["Year","Category","Product","Status","Sales","Rating","Profit"],[2023,"Electronics","Smart TV","Active",15000,4.5,250],[2023,"Fashion","Designer Jeans","Discontinued",8000,4.7,150],[2024,"Food","Organic Granola","Active",5000,4.8,100],[2023,"Books","Bestseller Novel","Active",12000,4.6,180],[2024,"Electronics","Laptop","Active",20000,4.9,300],[2023,"Beauty","Skincare Set","Active",7000,4.4,120],[2023,"Home & Garden","Garden Tools","Active",6500,4.3,130],[2024,"Health","Fitness Tracker","Active",9500,4.6,190],[2023,"Toys","Action Figure","Active",4800,4.7,95],[2024,"Automotive","Car Accessories","Active",3200,4.5,65],[2023,"Sports","Basketball","Active",7600,4.8,150],[2024,"Office Supplies","Notebooks","Active",11000,4.4,220],[2023,"Pet Supplies","Dog Food","Active",5600,4.6,110],[2024,"Music","Headphones","Active",13000,4.9,260],[2023,"Outdoor","Camping Tent","Active",4400,4.5,88],[2024,"Jewelry","Silver Necklace","Active",2800,4.7,56],[2023,"Tools","Power Drill","Active",3900,4.4,78],[2024,"Baby","Stroller","Active",1700,4.6,34],[2023,"Kitchen","Blender","Active",2500,4.8,50],[2024,"Clothing","Casual Shirt","Active",6200,4.5,124],[2023,"Art","Oil Paintings","Active",1900,4.7,38],[2024,"Hobbies","Model Trains","Active",3100,4.4,62],[2023,"Tech Gadgets","Smart Watch","Active",7300,4.6,146],[2024,"Travel","Luggage","Active",4600,4.8,92],[2023,"Home Decor","Wall Clock","Active",2200,4.5,44],[2024,"Fitness","Yoga Mat","Active",5700,4.7,114],[2023,"Gardening","Plant Pots","Active",3400,4.4,68],[2024,"Audio","Speakers","Active",8900,4.6,178],[2023,"Lighting","LED Bulbs","Active",4300,4.8,86],[2024,"Gaming","Video Games","Active",16000,4.5,320],[2023,"Furniture","Sofa","Active",5500,4.7,110],[2024,"Health","Vitamins","Active",7100,4.4,142],[2023,"Office","Desk Chair","Active",6300,4.6,126],[2024,"Books","Educational Textbooks","Active",9200,4.8,184],[2023,"Tools","Screwdriver Set","Active",3700,4.5,74],[2024,"Home & Garden","Patio Furniture","Active",4900,4.7,98],[2023,"Automotive","Car Seat Covers","Active",2600,4.4,52],[2024,"Electronics","Smart Home System","Active",10500,4.6,210],[2023,"Health","Blood Pressure Monitor","Active",3800,4.8,76],[2024,"Beauty","Makeup Kit","Active",5900,4.5,118],[2023,"Music","Turntable","Active",2100,4.7,42],[2024,"Toys","Board Games","Active",3300,4.4,66],[2023,"Clothing","Winter Coat","Active",4700,4.6,94],[2024,"Food","Gourmet Chocolates","Active",7400,4.8,148],[2023,"Home Decor","Curtains","Active",2900,4.5,58],[2024,"Pet Supplies","Cat Litter","Active",6100,4.7,122],[2023,"Outdoor","Hiking Boots","Active",3500,4.4,70],[2024,"Kitchen","Slow Cooker","Active",8200,4.6,164],[2023,"Toys","Dolls","Active",4400,4.8,88],[2024,"Books","Poetry Collection","Active",5300,4.5,106],[2023,"Health","Massage Chair","Active",6600,4.7,132],[2024,"Home & Garden","Fire Pit","Active",7700,4.4,154],[2023,"Automotive","Car Wash Kit","Active",4000,4.6,80],[2024,"Office Supplies","Highlighters","Active",5200,4.8,104],[2023,"Tools","Hammer","Active",3200,4.5,64],[2024,"Beauty","Hair Dryer","Active",6800,4.7,136],[2023,"Kitchen","Coffee Maker","Active",4600,4.4,92],[2024,"Toys","Remote Control Cars","Active",7900,4.6,158],[2023,"Home Decor","Picture Frames","Active",3300,4.8,66],[2024,"Electronics","Router","Active",8500,4.5,170],[2023,"Clothing","Suit","Active",5700,4.7,114]];
sheet.setArray(0, 0, data);
sheet.getRange(0, 0, 1, 7).backColor("Accent 7 80");
sheet.setText(0, 9, "The usage with non-adjacent columns and multiple aggregations");
sheet.setFormula(1, 9,"=FORMULATEXT(J3)");
sheet.setFormula(2, 9,"=PIVOTBY(A1:B62,D1:D62,CHOOSECOLS(E1:G62,1,3),HSTACK(PERCENTOF,MAX),3,2)");
let ranges = [new GC.Spread.Sheets.Range(2, 9, 49, 8)];
sheet.conditionalFormats.addFormulaRule('$J3="Year"', new GC.Spread.Sheets.Style('Accent 2 40'), ranges);
sheet.conditionalFormats.addFormulaRule('$K3=""', new GC.Spread.Sheets.Style('Accent 2 60',null,null,null,"Bold"), ranges);
sheet.getRange(2, 9, 49, 2).font("Bold");
sheet.getRange(2, 9, 49, 2).backColor("Accent 2 80");
spread.resumeCalcService();
spread.resumePaint();
}
<!doctype html>
<html style="height:100%;font-size:14px;">
<head>
<meta charset="utf-8" />
<meta name="spreadjs culture" content="ko-kr"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets-charts/dist/gc.spread.sheets.charts.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ko/purejs/node_modules/@mescius/spread-sheets-resources-ko/dist/gc.spread.sheets.resources.ko.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div class="sample-tutorial">
<div id="ss" style="width:100%;height:100%"></div>
</div>
</body>
</html>
.sample-tutorial {
position: relative;
height: 100%;
overflow: hidden;
}
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}