GAS(Google Apps Script)でピボットテーブルを作るとき、総計として用いた項目でソートする方法です。
「sortDescending、.sortAscending で降順、昇順にできることは知っているけれど、ソートするカラム自体ではなくて総計をソートの条件に並べ替えたいんだ」という方向けの記事です。
引数の意味は私も理解できていないのですが、ネットに情報が少ないため、とりあえず動くコードが作れたというレベルで記事を書いています。
いずれ時間のあるときにサンプルコードも含めて分かりやすく更新したいと思います。
解説したいのはsortByなのですが、念のため呼び出すまでの過程のサンプルコードを書いておきます。
定数で設定している値や宣言がvarかconstかは今関係ないので、細かい部分は気にしないでください。
const PIVOT_SUFFIX = “_集計”
const ACCESS_PAGE_COL = 2;
const IMPRESSION_COL = 3;
var sheet = SpreadsheetApp.getActiveSpreadsheet();
let sheetName = sheet.getSheetName()
let newSheetName = sheetName + PIVOT_SUFFIX;
const dataSheet = sheet.getSheetByName(sheetName);
const pivotSheet = sheet.getSheetByName(newSheetName);
const dataSource = dataSheet.getDataRange();
const pivotTable = pivotSheet.getRange(‘A1’).createPivotTable(dataSource);
こんな感じでピボットテーブルが格納された変数を作っておきます。
当然ながら、先に集計につかう総計の値を設定します。
pivotTable.addPivotValue(IMPRESSION_COL, SpreadsheetApp.PivotTableSummarizeFunction.SUM);
すると、
pivotTable.addRowGroup(ACCESS_PAGE_COL).showTotals(false).sortBy(pivotTable.getPivotValues()[0], []).sortDescending();
このような形でsortByメソッドが使えるようになります。
問題は引数の値です。
1つ目の引数は何の値をもとにソートするかを指定します。
総計は複数設定されている場合もあるので配列の形で指定しますが、1つしか設定していないなら添え字を0にすればOKです。
2つ目の引数は配列を指定することになっているのですが、正直よく分かっていません。
sortByメソッドを呼び出すときに出てくる解説を見ると、配列内に直接要素の名前を列挙していました。
しかし、気にせずに空の配列を入れておけば、「1つ目の引数の総計」でソートされるようです。