GASでピボットテーブルを作る

ピボットテーブルを操作するためのメモ。
[こちらの記事](https://fremilli.com/pivot-table-gas/)を参考にさせていただきました。

###集計元データ
こんな感じのデータを元にピボットテーブルを作る。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205237/1ce806e9-97c2-113d-6d02-099f383e5b03.png" width=30%>

###シート名
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205237/5f065a2b-b938-2f43-1ade-84be4c59830a.png" width=50%>
データが入ってるシートの名前 → data
ピボットテーブルを作るシートの名前 → pivot 


###コードの全体像
```javascript:sample.gs
function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName('data');
  const pivotSheet = ss.getSheetByName('pivot');
  const dataSource = dataSheet.getDataRange();
  // ピボットテーブルの作成
  const pivotTable = pivotSheet.getRange('A1').createPivotTable(dataSource);
  
  // 行の設定
  let itemGroup = pivotTable.addRowGroup(1);
  itemGroup.showTotals(true).sortAscending;
  itemGroup.showRepeatedLabels();
  itemGroup = pivotTable.addRowGroup(2);
  itemGroup.showTotals(false).sortAscending;
  
  // 列の設定
  itemGroup = pivotTable.addColumnGroup(3);

  // 値の設定
  let pivotValue = pivotTable.addPivotValue(4, SpreadsheetApp.PivotTableSummarizeFunction.SUM);
  pivotValue.setDisplayName('売上金額');
  pivotValue = pivotTable.addPivotValue(1, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotValue.setDisplayName('売上件数');
}
```

###1.ピボットテーブルを作成する
該当コード部分

```javascript:sample.gs
function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName('data');
  const pivotSheet = ss.getSheetByName('pivot');
  const dataSource = dataSheet.getDataRange();
  // ピボットテーブルの作成
  const pivotTable = pivotSheet.getRange('A1').createPivotTable(dataSource);
}
```
こんな感じで作成される。
![画面収録-2022-01-27-18.57.44.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205237/d6287113-d62d-ef32-1741-b9aafed34632.gif)

###2.行の設定
該当コード部分

```javascript:sample.gs
  // 行の設定
  let itemGroup = pivotTable.addRowGroup(1); //addRowGroupの引数はdataシートの年が格納されている列数。
  itemGroup.showTotals(true).sortAscending;
  itemGroup.showRepeatedLabels();
  itemGroup = pivotTable.addRowGroup(2); //addRowGroupの引数はdataシートの月が格納されている列数。
  itemGroup.showTotals(false).sortAscending;
```
こんな感じで設定される。
![wiv13-44nrk.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205237/709b25f9-4c28-ee08-c9bb-7f53b422d294.gif)
年の行は showRepeatedLabels() で「行ラベルを繰り返す」にチェックをいれている。
月の行は showTotals() の引数をfalseにすることで統計を非表示にしている。

###3.列の設定
該当コード部分

```javascript:sample.gs
  // 列の設定
  itemGroup = pivotTable.addColumnGroup(3); //addRowGroupの引数はdataシートの拠点が格納されている列数。
}
```
![画面収録-2022-01-27-18.59.23.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205237/6787c11f-323c-f819-6fea-85d8b0b32b30.gif)

###4.値の設定
該当のコード部分

```javascript:sample.gs
  // 値の設定
  let pivotValue = pivotTable.addPivotValue(4, SpreadsheetApp.PivotTableSummarizeFunction.SUM);
  pivotValue.setDisplayName('売上金額');
  pivotValue = pivotTable.addPivotValue(1, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotValue.setDisplayName('売上件数');
}
```
最初から最後まで実行するとこんな感じで出来上がる
![0lsh8-7qbak.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205237/3494b495-19ed-ccb8-ad25-a90ae07b5a85.gif)

addPivotValue() の第1引数はdataシートの列数を指定して、第2引数はどういう集計方法するかをしている。
集計方法は[公式サイト](https://developers.google.com/apps-script/reference/spreadsheet/pivot-table-summarize-function)に一覧があります。
このコードでは売上金額に関してはSUMで、売上件数にCOUNTAで集計。