ログデータあるある

目に見えるものが、ほんとうのものとは限らない。
- 村上 春樹 -

購入や訪問が発生するたびにデータが追加されるログデータですが、その日に購入や訪問が発生しないとそもそもデータとして入ってきません。

例えば、下記のようなログデータの場合、2021年1月1日にはa-1000・a-1001・a-1002の3台の機械で売上が発生し、2021年1月2日にはa-1003・a-1004・a-1005の3台の機械で売上が発生しています。
datemachine_idsales
2021/1/1a-1000100
2021/1/1a-1001200
2021/1/1a-1002300
2021/1/2a-1003400
2021/1/2a-1004500
2021/1/2a-1005600

このログデータを下記のマスタと[machine_id]で結合すると、
machine_idmachine_name
a-10000号機
a-10011号機
a-10022号機
a-10033号機
a-10044号機
a-10055号機

こんな感じになります。
図1

しかし上記は当然のことながら、ログデータに存在しない(=つまり売上がなかった機械)はその日付上ではでてきません。

売上がなかった機械は売上0として表示させたい場合、どうすれば良いでしょうか?
datemachine_idmachine_namesales
2021/1/1a-10000号機100
2021/1/1a-10011号機200
2021/1/1a-10022号機300
2021/1/1a-10033号機0
2021/1/1a-10044号機0
2021/1/1a-10055号機0
2021/1/2a-10000号機0
2021/1/2a-10011号機0
2021/1/2a-10022号機0
2021/1/2a-10033号機400
2021/1/2a-10044号機500
2021/1/2a-10055号機600


今回はこちらについて考えていきます。


ログデータに存在しないが、マスタに存在するIDを表示する

ログデータとマスタを[machine_id]で結合してしまうと、ログデータの日付に対してマスタに記載の[machine_id]を紐付けられません。なので今回は[machine_id]ではなく、[date]で結合することを考えてみます。

  1. 日付マスタを準備する
    date
    2021/1/1
    2021/1/2

    ログデータに入っている日付をすべて列挙した日付マスタを作成します。

  2. マスタと上記の日付マスタを結合キー「1」で結合する
    図2

    これでマスタの各レコードに対して、日付マスタのすべての日付が紐付けられます。
    machine_idmachine_namekeydate
    a-10000号機12021/1/1
    a-10011号機12021/1/1
    a-10022号機12021/1/1
    a-10033号機12021/1/1
    a-10044号機12021/1/1
    a-10055号機12021/1/1
    a-10000号機12021/1/2
    a-10011号機12021/1/2
    a-10022号機12021/1/2
    a-10033号機12021/1/2
    a-10044号機12021/1/2
    a-10055号機12021/1/2


  3. 日付マスタとログデータを[date]をキーにして結合する
    図3


  4. 値を計算する計算式を作成する
    iif([Machine Id (Log)]=[Machine Id],[Sales],0)

    結合時に[machine_id]を指定していないので、ログデータとマスタの[machine_id]が一致した問だけ値を返す計算式を作成します。他にもディメンションがあれば、適宜条件式に追加しましょう。

  5. 完成!
    図4

まとめ

今回はログデータに存在しないが、マスタに存在しているIDを表示する方法を考えてみました。マスタのレコード数が日付分増えてしまうので、データ量や運用面には注意しましょう。


Tableau Public