前期比分析に SQL は不要!Looker の PoP メジャー で前期比分析を効率化しよう
TL;DR
- Looker PoP Measure を使うと事前集計不要で前期比の算出ができる
- ただし期間を指定したフィルタと同時に利用すると、複雑な挙動となる可能性もある
想定読者
- Looker で前期比分析をしたい方
- データアナリスト
- データエンジニア
はじめに
2025年 8月に OLTA に入社した HagaSpa です。主に SRE とデータ基盤の運用保守をしています。
OLTA では Looker を用いた分析環境を提供しているのですが、よくある依頼として 前期比分析(PoP 分析)があります。
前期比分析とは特定の値について、現在と過去の同等期間で値を比較する分析パターンです。
具体的には「前月比」「前年比」などを指しており、現在と過去を同じ期間で比較することで変化の背景にある理由が分析しやすくなります。そのためよく利用される分析手法となっています。
Looker で前期比分析を実現する場合、表計算や中間テーブルを裏側に用意しておくなどの準備が必要でした。事前集計するアプローチだと、どうしても事前に要件聞いて集計軸を定める必要があったのですが、それを決めずにデータ探索できるのは大きなメリットです。
今回はプレビューとして登場した PoP メジャー (前期比メジャー) を使うことで、Looker の Explorer から簡単に前期比分析を実現する方法を紹介します。
Looker PoP Measure (前期比メジャー)
OLTA ではクラウドファクタリングサービスを提供しています。
簡単に説明すると、請求書(=債権)を OLTA が買い取ることで、実際に入金される前に一定の現金を得ることができるサービスです。
請求書をオンラインで現金化できるため、利用者は資金繰りが楽になるというメリットがあります。
今回は OLTA が買い取った債権の買取元本の合計を、契約された月毎で並べてみます。
※表示されてる数値は全てダミーデータです。
数字が多くてわかりにくいのですが、2025年8月の行を確認すると、前月と前年の買取元本を表示することができています。
赤線と青線がそれぞれ対応している
この表示をするために必要な実装は type: period_over_period
のメジャーを追加するだけです。
measure: purchase_principal_amount_previous_month {
type: period_over_period
label: "買取元本合計(前月)"
based_on: purchase_principal_amount
based_on_time: factoring_entries.contracted_month
period: month
kind: previous
}
measure: purchase_principal_amount_previous_year {
type: period_over_period
label: "買取元本合計(前年)"
based_on: purchase_principal_amount
based_on_time: factoring_entries.contracted_year
period: year
kind: previous
}
based_on
based_on
は、前期比分析の対象となるメジャーを指定します。今回の場合は「買取元本の合計」となります。
指定できるメジャーの type
は以下となっており、「買取元本の合計」はその名の通り type: sum
のメジャーとなります。
average
average_distinct
count
count_distinct
max
min
sum
sum_distinct
based_on_time
base_on_time
は、前期比分析の軸となる type: time
のディメンジョングループを指定します。
今回はクラウドファクタリングサービスの利用に対する契約日時となっています。
以下のようなディメンジョングループを指定することができます。
year
fiscal_year
month
fiscal_quarter
quarter
week
date
raw
period
period
は前期比分析において遡る期間のことを指します。
今回は前月と前年なので、それぞれ period: month
と period: year
を指定します。
year
fiscal_year
quarter
fiscal_quarter
month
week
date
kind
kind
は前期比分析で行う計算のタイプを指定します。kind には、次のいずれかの値を指定できます。
今回は純粋に前期の値を表示するだけなので、kind: previous
としています。
-
previous
: (デフォルト)前の期間の値。 -
difference
: 期間の差(前の期間から現在の期間を差し引いた値)。 -
relative_change
: 前の期間からの変化率。
今までこのような表示を実現するためには、事前に前月・前年の買取元本を集計した中間テーブルを用意する必要があり、工数の関係上全てのリクエストに応えることはできませんでした。
今後は PoP メジャー を追加するだけなのでレビューやデプロイを含めても 30分 で終わります。
期間フィルタを用いた場合の挙動について
Looker では特定の期間を指定してデータの絞り込みを行う、フィルタ機能があります。
PoP Measure に対してフィルタをかける場合は、PoP メジャー の period と同じ時間の粒度でフィルタすることをおすすめします。
例えば「2025/8月に契約された申込」というようにフィルタをかけると、前年比の PoPメジャー が値を表示できていません。
生成された SQL の一部を見てみるとわかるのですが、Looker ではフィルタを考慮して中間テーブルを作成し、その中間テーブルに対して PoP メジャー で指定された期間の値を取得しています。
そのため PoP メジャー で扱う時間の粒度よりも、狭い時間の粒度でフィルタをすると NULL となってしまいます。
冷静に考えれば当たり前のことですが、ドキュメントを全て読まないと自分は気付きませんでした…
PoP メジャーの Explore クエリで時間ベースのフィルタを追加すると、Looker は、フィルタリングしている粒度で追加の期間を追加し、PoP メジャーのデータが計算されます。たとえば、PoP メジャーを使用して Explore クエリで過去 12 か月間にフィルタリングすると、Looker は 13 か月分のデータを取得します。ただし、period: year で定義された PoP 指標がある場合、PoP 指標には前年のデータを必要とするため、この追加の 1 か月では PoP 指標の値を計算できません。そのため、PoP メジャーの Explore クエリで時間でフィルタする場合は、PoP メジャーの period と同じ時間の粒度でフィルタすることをおすすめします。この例では、過去 12 か月間(Looker は 1 か月分追加でデータを取得)ではなく、過去 1 年間(Looker は 1 年間分追加でデータを取得)でフィルタする必要があります。
PoP メジャー を使用して Explore クエリをフィルタする場合は、この点に注意してください。
まとめ
このように PoP メジャーを使うと簡単に前期比分析が実施できます。事前集計よりも少ない工数でデータ探索できるので、ぜひ利用してみてください。 今後 OLTA では PoP メジャーの利用をデファクトスタンダードにし、他のメジャーに対しても前期比分析の実装を進めていく予定です。
OLTA は 「あらゆる情報を信用に変え あたらしい価値を創出する」をミッションに掲げ、SMB (中小企業・小規模事業者) の強みを最大化するための与信プラットフォームの構築を目指しています。 少しでも興味ある方は、ぜひ一度カジュアルにお話しする機会をいただけると幸いです!
ここまでご覧いただきありがとうございました。
Discussion