今回の課題
BigQueryにて、離脱率や直帰率などの○○率数値の計算する際に、
INT64やFLOAT型のまま割り算をすると、正確の数値が出なかった。
理由は、BigQueryで少数点以下が発生する数値の計算をする際は、
NUMERIC型に変換して計算をしなければ、誤差が発生してしまうためだった。
(詳しくは、NUMERICの不思議参照)
解決策
少数点が発生する数値をNUMERICに変換したうえで、計算を行った。
これで正確な数値を算出できる。
select
cast(exits as numeric) / cast(pageviews as numeric) as exits_rates -- 離脱数÷PV数=離脱率
, cast(bounces as numeric) / cast(pagevies as numeric) as bounces_rates -- 直帰数÷PV数=直帰率
from
`テーブル名`
また、〇〇率数値におかしな数値が無いか、ざっと確認しておくと尚良い。
シンプルに、0〜100%の間の数値になっているか確認するのでも良い。
例えば、下記のクエリでデータが抽出されない(COUNTの結果が0になる)ことを確認するなど行う。
with master as (
select
cast(exits as numeric) / cast(pageviews as numeric) as exits_rates-- 離脱数÷PV数=離脱率
, cast(bounces as numeric) / cast(pagevies as numeric) as bounces_rates -- 直帰数÷PV数=直帰率
from
`テーブル名`
)
select
count(*)
from
master
where
1=1
and exits_rates < 0
and exits_rates > 100
and bounces_rates < 0
and bounces_rates > 100
【参考】
・(SQLite)Select句で計算をした場合に少数にする方法
・[SQL]割合を計算するときの定石(割られる数をCASTする)
・NUMERICの不思議