DataPortalレポートのフィルタ適用リンク生成をGASで手間を掛けずにできるようにしてみた

DataPortalのフィルタ適用リンク作成が割と手間を要するため、少しでも楽できないかと思いGASで試してみました。
2022.06.14

DataStudioのレポート内容をリンクによって切り替えられるようにしたい場合、URL経由でパラメータを渡す必要があります。

パラメータ数が少なかったり、レポートの種類が少ない場合はパターン分のレポートを作ってしまうのも手でしょう。ただ、そのパターン分のメンテナンスが発生することも事実。URL経由でのパラメータ渡しを楽に出来ないものかと試した結果について書いてみました。

レポートフィルタのリンク化で必要なもの

レポート上での実際の手続きについては上記公式ドキュメントの手続きに沿って触れられています。必要な項目としては以下3つとなります。

  • フィールド
  • パラメータ
  • フィルタ

このうち、リンクURL作成に直結するのはパラメータのみです。当記事ではフィールドとフィルタには触れません。

リンクの作成をGASで行う

DataPortalはフィルタ適用リンクのURL作成を機能として賄ってくれません。公式ドキュメント記載の手順に沿って手作業にて行う必要があります。今回はSpreadSheetにて実施してみました。パラメータの設計をセル上で行い、GASでセルの値を取得して加工出力します。

GASの処理は公式サンプルを少し弄る程度の内容です。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu('レポート');
  menu.addItem('URL生成', 'myFunction');
  menu.addToUi();
}

function myFunction() {
  const param_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("パラメータ");
  const values = param_sheet.getDataRange().getValues();
  values.reverse()
  values.pop()
  values.reverse()

  var params = {}
  values.forEach(function(e) {
    params[e[0]] = e[1]
  })
  var paramsAsString = JSON.stringify(params);
  var encodedParams = encodeURIComponent(paramsAsString);
  const url_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("URL");
  const report_id = url_sheet.getRange("B1").getValue();
  const page_id = url_sheet.getRange("B2").getValue();
  const _url = 'https://datastudio.google.com/reporting/%s/page/%s?params=%s'
  var link_url = Utilities.formatString(_url, report_id, page_id, encodedParams)
  url_sheet.getRange("B3").setValue(link_url);
}

シート構成は以下の通り。

パラメータシートに設定したいパラメータを入力し、URLシートにレポートのIDを入力します。「レポート」メニューから「URL生成」を実施することでURLが出力されます。

あとがき

今回はとりあえず出力することを目的としたため、URLは常に上書き出力される状態になっています。前回の出力URLを上書きせずに行をずらすことで履歴として残すこともできるでしょう。リンクを通したフィルタの切り替えが面倒に思っていた場合の参考になれば幸いです。