• Google Analytics APIのsortは左から優先しマイナス記号で降順にする

Google Analytics APIのsortは左から優先しマイナス記号で降順にする

公開日: 執筆:佐藤

Google Analytics Core Reporting APIのsortは、カンマで並べたfieldを左から順に優先します。既定は昇順です。値の大きい順や新しい順にしたいfieldには、名前の前へマイナス記号を付けます。

並び替えるfieldは、同じrequestのdimensionsまたはmetricsにも指定してください。返していないfieldをsortだけへ書くとerrorになります。

sortは行を選ばず返す順番を決める

Core Reporting API v3のReferenceは、sortを、返すdataの並び順と方向を指定するdimensionとmetricの一覧と定義しています。

sortは、行を集計するdimensionやmetricを決めるparameterではありません。行を残すか除くかを決めるfilterでもありません。dimensionsとmetricsで作った結果を、どの順で返すか決めます。

parameter 役割
dimensions dataを分ける分類軸を決める
metrics 各行へ返す数値を決める
filters 条件に合う行を残す
sort 返す行の順番を決める

たとえば、country別のpageview数を取得する場合は、ga:countryで行を分け、ga:pageviewsを数えます。pageview数の多いcountryから返す設定だけをsortへ書きます。

dimensions=ga:country
metrics=ga:pageviews
sort=-ga:pageviews

先頭のマイナス記号が降順を示します。マイナス記号を外したsort=ga:pageviewsは、pageview数の少ない行から始まる昇順です。

複数fieldは左から順に優先する

sortへ複数のfieldを書く場合は、最も優先したいfieldを左へ置きます。

dimensions=ga:country
metrics=ga:pageviews
sort=-ga:pageviews,ga:country

このqueryは、最初にga:pageviewsを大きい順へ並べます。同じpageview数の行があれば、次にga:countryを昇順へ並べます。

順番を反対にすると、答える質問も変わります。

sort=ga:country,-ga:pageviews

この場合はga:countryの昇順が先です。country別の行ではcountryの値が異なるため、二番目のga:pageviewsは並びにほとんど影響しません。metricの大きい行を先に見たいのにdimensionを左へ置くと、期待した順位表になりません。

文字列と数値と日付は既定の昇順が違う

Referenceでは、文字列、数値、日付の既定順を次のように分けています。

  • 文字列はen-US localeのalphabetical orderによる昇順
  • 数値は数値として小さい順
  • 日付は日付として古い順

数値を文字列のように並べるわけではありません。2、10、100という数値なら、数値の大小で並びます。日付を新しい順へ出したい場合は、対象の日付dimensionへマイナス記号を付けます。

ただし、見出しに表示する日本語名の五十音順を期待して、英語localeの文字列順をそのまま使わないでください。APIが返すdimension値と、利用者へ見せたい表示順が違う場合は、reportを作る側で別の並びを決めます。

sortに書くfieldはrequestにも含める

sortへ指定できるのは、同じrequestのdimensionsまたはmetricsで使用したfieldです。次のrequestは、ga:pageviewsを返す指定がないためerrorになります。

dimensions=ga:country
metrics=ga:bounces
sort=-ga:pageviews

pageview数で並べたいなら、ga:pageviewsをmetricsへ加えます。不要なmetricを返したくないという理由でsortだけへ隠して指定することはできません。

fieldを追加するときは、組み合わせが有効かも確認します。dimensionとmetricの組み合わせが無効なら、sort以前にqueryの設計を直す必要があります。

上位だけを見るときはsortを先に決める

上位十行だけを取得したい場合は、先に何の上位かを決めます。session数の上位、pageview数の上位、conversion rateの上位では、必要なmetricと判断が違います。

説明用の仮例として、country別pageview数の上位十行を見るなら、次の順でqueryを作ります。

  1. dimensions=ga:countryで比較単位を決める
  2. metrics=ga:pageviewsで比較する数値を決める
  3. sort=-ga:pageviews,ga:countryで大きい順と同値時の順を決める
  4. max-results=10で最初の十行へ絞る

max-results=10だけを先に指定しても、欲しい上位十行になるとは限りません。何を上位とするかをsortで確定してから、返す件数を制限します。

一万行を超えてページ分割する場合も、各requestで同じsortを保ちます。期間、dimension、metric、filter、sortを途中で変えると、別の並びを一つのdataとして連結することになります。

並び順と経営判断を混同しない

pageview数の多いcountryを上へ出せても、そのcountryが事業に役立つとは限りません。問い合わせ、売上、費用を判断したいなら、それに対応するmetricと計測条件が必要です。

API実装を外部へ委託する場合は、sortの文字列だけでなく、「どの行を先に見たいか」という質問も渡してください。codeを書く人が並び順を決め、利用者が理由を知らない状態では、metricを変更したときにreportの意味も変わります。

最初の一手は、現在のqueryをQuery Explorerで開き、sortを一fieldだけ指定することです。昇順の結果を確認し、そのfieldへマイナス記号を付けて行の順番が反転するか確かめてください。

戻る