Google Analytics Reporting API v4 でカスタム ディメンションでフィルタした値を取得する

Google Analytics API v4 でカスタム ディメンションでフィルタした値を取得するコードを紹介します。

概要

Google Analytics API v4 でカスタム ディメンションの値ごとに集計したい場合や、特定のカスタム ディメンションで特定の値のみを集計したいことがあります。 この記事では、Google Analytics API v4を利用してカスタム ディメンションを利用して集計するコードを紹介します。
サービス終了に関する注意
Google Universal Analytics はサービスを終了したため、現在はこの記事で紹介しているコードは動作しません。 新しい Google Analytics 4 (GA4) プロパティを利用する必要があります。 GA4プロパティからのデータ取得はこちらの記事を参照してください。

プログラム例

Windows Form アプリケーションを作成します。

事前準備

Google Analytics Reporting API やライブラリのインストールをします。手順はこちらの記事を参考にしてください。

UI

下図のUIを作成します。ボタンと複数行のテキストボックスを配置します。
(ボタンはbutton2 のみを利用します)

コード

下記のコードを記述します。button3のクリックイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Google.Apis.AnalyticsReporting.v4;
using Google.Apis.AnalyticsReporting.v4.Data;
using Google.Apis.Auth.OAuth2;
using System.IO;


namespace GoogleAnalyticsUserGet
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
      FileStream stream = new FileStream("ipentectest-0f26d0134ab7.json", FileMode.Open, FileAccess.Read);
      GoogleCredential credential = GoogleCredential.FromStream(stream).CreateScoped(AnalyticsReportingService.Scope.AnalyticsReadonly);

      AnalyticsReportingService.Initializer initializer = new AnalyticsReportingService.Initializer()
      {
        HttpClientInitializer = credential,
        ApplicationName = "app"
      };

      AnalyticsReportingService service = new AnalyticsReportingService(initializer);

      GetReportsRequest request = new GetReportsRequest();

      ReportRequest report_request = new ReportRequest()
      {
        ViewId = "(Google Analytics のビューのID)",
        Metrics = new[] { new Metric { Expression = "ga:users" } },
        Dimensions = new[] { new Dimension { Name = "ga:date" } },
        FiltersExpression = "ga:dimension1==dark",
        DateRanges = new[] { new DateRange { StartDate = "2021-01-01", EndDate = "2021-01-15" } },
        OrderBys = new[] { new OrderBy { FieldName = "ga:date", SortOrder = "DESCENDING" } }
      };

      request.ReportRequests = new[] { report_request };

      ReportsResource.BatchGetRequest batchRequest = service.Reports.BatchGet(request);
      GetReportsResponse response = batchRequest.Execute();

      foreach (var x in response.Reports.First().Data.Rows) {
        textBox1.Text += string.Join(", ", x.Dimensions) + "   " + string.Join(", ", x.Metrics.First().Values) + "\r\n";
      }
    }
  }
}

解説

今回、カスタム ディメンションの1番目にカラーのディメンションを設定しています。このカスタム ディメンションの値でフィルタした結果を取得します。


認証部分や値の表示のコードの詳細はこちらの記事を参照してください。
  FileStream stream = new FileStream("ipentectest-0f26d0134ab7.json", FileMode.Open, FileAccess.Read);
  GoogleCredential credential = GoogleCredential.FromStream(stream).CreateScoped(AnalyticsReportingService.Scope.AnalyticsReadonly);

  AnalyticsReportingService.Initializer initializer = new AnalyticsReportingService.Initializer()
  {
    HttpClientInitializer = credential,
    ApplicationName = "app"
  };

  AnalyticsReportingService service = new AnalyticsReportingService(initializer);

  GetReportsRequest request = new GetReportsRequest();

  /* 中略 */

  request.ReportRequests = new[] { report_request };

  ReportsResource.BatchGetRequest batchRequest = service.Reports.BatchGet(request);
  GetReportsResponse response = batchRequest.Execute();

  foreach (var x in response.Reports.First().Data.Rows) {
    textBox1.Text += string.Join(", ", x.Dimensions) + "   " + string.Join(", ", x.Metrics.First().Values) + "\r\n";
  }

ReportRequest 作成部分のコードが下記です。
ViewIdプロパティに取得するAnalytics のビューのIDを設定します。 カスタム ディメンションでフィルタする場合は、FiltersExpression プロパティに ga:dimension(インデックス番号) を指定します。 今回はインデックス1のカスタム ディメンションでフィルタをするため、ga:dimension1 を記述します。フィルタするディメンションの値を条件式として記述します。 今回はga:dimension1==darkの記述としているため、カカスタム ディメンション1の値が dark であるアクセスのみをフィルタして取得します。
Metrics, Dimensions, DataRanges などの設定は通常のページビューなどを取得する場合と同様です。
  ReportRequest report_request = new ReportRequest()
  {
    ViewId = "(Google Analytics のビューのID)",
    Metrics = new[] { new Metric { Expression = "ga:users" } },
    Dimensions = new[] { new Dimension { Name = "ga:date" } },
    FiltersExpression = "ga:dimension1==dark",
    DateRanges = new[] { new DateRange { StartDate = "2021-01-01", EndDate = "2021-01-15" } },
    OrderBys = new[] { new OrderBy { FieldName = "ga:date", SortOrder = "DESCENDING" } }
  };

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button2]をクリックします。下図の結果が表示されます。カスタム ディメンションの値でフィルタされた結果のユーザー数が表示できました。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2021-03-07
iPentec all rights reserverd.