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を作ります。
dimensions=ga:countryで比較単位を決めるmetrics=ga:pageviewsで比較する数値を決めるsort=-ga:pageviews,ga:countryで大きい順と同値時の順を決める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へマイナス記号を付けて行の順番が反転するか確かめてください。
関連記事

