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 としたオブジェクトとして含めます