JQL: mixpanel で複雑な分析機能を使い始める – その3 動的キーによるグループ化 –

2022.10.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

mixpanelではイベントやユーザーのデータにさまざまなプロパティがあります。 mixpanel側のデフォルトで用意されているものだったり、自身でSDKを使って追加したりすることも可能です。 JQLを使えばこういったものをキー(静的なキー)にして集計するなどを行えますが、静的なキーを元に計算等を行って集計するようなこともできるようになっています。

※ キーを計算する(動的なキー)

JQLではmain()関数が必須となっていますが、動的なキーを扱うために、main()以外の関数を定義(ヘルパー関数)して集計に使うことになります(main関数から呼び出す)

やってみる

メールアドレスのドメイン名を取得して集計

ドキュメントにも記載されている ユーザーの最も一般的なメールドメインのトップ 10 は? というケースから試していきたいと思います。

JQL

function getEmailDomain(user) {
  var email = user.properties["$email"];
  if (!email) { return undefined; }
  pos = email.indexOf('@');
  if (pos < 0) { return undefined; }
  return email.substr(pos + 1);
}

function main() {
  return People()
  .groupBy([getEmailDomain], mixpanel.reducer.count())
  .reduce(mixpanel.reducer.top(10));
}

上記のように、groupByという組み込み関数の引数に、getEmailDomainという自作した関数を指定しています。

実行結果は以下

また、自作の関数と既存のプロパティの組み合わせも可能でした。

function main() {
  return People()
  .groupBy([getEmailDomain,'properties.$browser'], mixpanel.reducer.count())
  .reduce(mixpanel.reducer.top(10));
}

groupByの第一引数に[getEmailDomain,'properties.$browser'] といった感じでproperties.$browserを追加して、ドメインと使用ブラウザで集計しています。

結果は以下のようになります。 ブラウザの情報も出てますね(key0がドメイン、key1がブラウザ)。

リファラーから参照元をカスタマイズして集計

ユーザーやイベントデータの中に、デフォルトでReferrerやReferring Domain、Initial Referring Domain と言った参照元の情報が含まれます

このリファラーのドメインをグループ化したり、わかりやすい別名をつけたりしてカスタマイズし、集計することもできました。

function getReferringDomainType(user) {
  var domain = user.properties["$initial_referring_domain"];
  if (!domain) { return undefined; }

  if(domain.search('(.*)google.([^/?]*)') === 0 )  { 
    return  'Google' ; 
  }else if(domain.search( 'cm-prd-support.zendesk.([^/?]*)') === 0){
    return  'Zendesk Guide(OLD)' ; 
  }else if(domain.search( 'cm-prod-support.zendesk.([^/?]*)') === 0){
    return  'Zendesk Guide' ; 
  }else if(domain.search( 'gtm-msr.appspot.com([^/?]*)') === 0){
    return  'GTM' ; 
  }else if(domain.search( '\\$direct') === 0){
    return  '直接' ; 
  }
  return 'その他';
}

function main() {
  return People()
  .groupBy([getReferringDomainType], mixpanel.reducer.count())
  ;
}

リファラーのドメインごとにタイプ分類をするサンプルコードを書いてみました。

実行してみると、

このように集計されました。

余計な情報を削ぎ落としてざっくりと集計したいといった時に使えるかもしれませんね。

外部ライブラリは使えるのか?

外部ライブラリを読み込んで使用することはできませんでした。

var request = require('request');

function main() {
〜〜〜〜〜
}

requireを書いて実行してみると、

Uncaught exception ReferenceError: require is not definedというエラーが発生します。

※ JQLの裏では、Chromeで使われているJavaScriptエンジンであるV8が使われています。

参考

-Grouping By a Dynamic Key