Google Analytics Data API の CohortSpec にてフィルターをかける方法と GAS でのサンプル

CohortSpec の「フィルター」とは

GUI の「探索」画面でいう、以下の「内訳」の部分です。この「内訳」によるデータ取得を API で実現するためにはフィルター機能を使います。

公式ドキュメント

具体的な例とともに公式ドキュメントにも記載があります。「週次コホートと他の API 機能とのコホートの使用」の項目です。

重要な点

重要なのは 2点 です。

1. "dimensions" の値の中にフィルターの "fieldName" の値 を含めること

上記の例では "dimensions" の値の中に "country" を含めています*1

{
  "dimensions": [
    { "name": "cohort" },
    { "name": "cohortNthWeek" },
    { "name": "country" }
  ],
(以下省略)

2. 「"filter" の値となるオブジェクト」に含まれるプロパティは、"filedName" のみではだめ

上記の例では "inListFilter" というプロパティを設定しています。

(前略)
  "dimensionFilter": {
    "filter": {
      "fieldName": "country",
      "inListFilter": {
        "values": [ "Russia", "Mexico" ]
      }
    }
  },
(以下省略)

filter で「絞り込み」をかけたくない場合はどうすればいいか

上記の「2.」の条件の意味は、フィルターに用いた Metrics や Dimension 値によって何らかの絞り込みが必要なことを意味します。

しかし、絞り込みは行わずに、全ての値のパターンが取得したという場合もあるかと思います(特に CohortSpec では)。たとえば、"fieldName" に "operatingSystem" を指定して、全ての OS ごとに細分化してコホートの値を見たい、という場合です。

この場合には絞り込みのプロパティに stringFilter を用いるとよいです。

このフィルタの matchType というプロパティに PARTIAL_REGEXP を指定することで、正規表現による絞り込みがかけられます。正規表現を .* にすれば全ての値が取得できます(((not set) みたいなのは…どうなるんだろう(未検証です))。

以下、例です。

(前略)
  "dimensionFilter": {
    "filter": {
      "fieldName": "operatingSystem",
      "stringFilter": {
        matchType: "PARTIAL_REGEXP",
        value: ".*"
      }
    }
  },
(以下省略)

"filter" に関するドキュメント

"filter" に関する公式ドキュメントは以下です。

GAS での実装例

上記の公式ドキュメントの例は、直接 HTTP クライアント で POST する場合の JSON の例です。

GAS の場合は以下のようになります。ほとんど変わりませんが const dimensionFilter = AnalyticsData.newFilterExpression() だけはハマりそうです。

  // dimensionFilter の部分のみを抜粋している(ので、以下のままでは動かない)
  const dimensionFilter = AnalyticsData.newFilterExpression()

  dimensionFilter.filter = {
    fieldName: 'operatingSystem',
    stringFilter: {
      matchType: 'PARTIAL_REGEXP',
      value: '.*',
      caseSensitive: false,
    },
  }

  const request = AnalyticsData.newRunReportRequest()
  request.dimensionFilter = dimensionFilter

  const report = AnalyticsData.Properties.runReport(request, propertyId)

*1:"name" を key としたオブジェクトとして含めます

Powered by はてなブログ