PIVOTBY 関数を使用すると、数式を使用してデータの概要を作成できます。この関数は、2つの軸に沿ったグループ化と、関連する値の集計をサポートします。
引数
必須
説明
row_fields
〇
行のグループ化と行ヘッダの生成に使用される値を含む列指向の配列または範囲。
col_fields
〇
列のグループ化と列ヘッダの生成に使用される値を含む列指向の配列または範囲。
values
〇
集計する列指向の配列またはデータ範囲。
function
〇
値を集計する方法を定義する関数。
[field_headers]
-
row_fields、col_fields、値にヘッダーがあるかどうか、および結果でフィールド ヘッダーを返す必要があるかどうかを示す数値。
[row_total_depth]
-
行ヘッダに合計を含めるかどうかを決定します。
[row_sort_order]
-
列の並べ替え方法を示す数値。 数値は 、row_fields の列に対応し、その後に値の列が続 きます。 数値が負の場合、行は降順または逆順に並べ替えられます。
[col_total_depth]
-
列ヘッダに合計を含めるかどうかを決定します。
[col_sort_order]
-
行の並べ替え方法を示す数値。 数値は 、col_fields の列に対応し、その後に 値の列が続きます。 数値が負の場合、行は降順または逆順に並べ替えられます。
[filter_array]
-
対応するデータ行を考慮する必要があるかどうかを示すブール値の列指向の1次元の配列。
[relative_to]
-
2 つの引数を必要とする集計関数を使用する場合、relative_to は、集計関数の 2 番目の引数に提供される値を制御します。 これは通常、PERCENTOFが関数に提供される場合に使用されます。
使用時の注意点
PIVOTBY 関数は、allowDynamicArray が true の場合にのみ有効です。
配列または範囲には複数の列を含めることができます。その場合、出力には複数の集計が含まれます。
ラムダ関数のベクトルを指定できます。その場合、出力には複数の集計が含まれます。ベクトルの方向によって、行方向と列方向のどちらにレイアウトされるかが決まります。
field_headers がない場合、values 引数に基づいてデータにヘッダーが含まれていると自動的に想定されます。1番目の値がテキストで 2番目の値が数値の場合、データにはヘッダーが含まれていると想定されます。行または列のグループ レベルが複数ある場合は、フィールド ヘッダーが表示されます。
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="ja-jp"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-charts/dist/gc.spread.sheets.charts.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-resources-ja/dist/gc.spread.sheets.resources.ja.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;
}