Tableauの結合またはカスタムSQLで、開始日/終了日のデータから欠損値を補完してみる

投稿者:

先日こちらの投稿で、Alteryxを使用しての欠損値補完の方法をご紹介しました。

Alteryx + Tableau連携で開始日/終了日のデータから欠損値を補完してみる

 

今回は、この中の一部を、Tableau Desktopの結合機能もしくはカスタムSQL機能を使って実現する方法をご紹介します。

 

【前提】

今回使用するデータセットは、以下のように、1レコードに開始日と終了日(今回はInとOut)の両方のデータを持っている形です。

また、終了日がまだ存在しない(現在も宿泊中である etc.)というケースは除外しています。

 

【手順 – 概要】

1. 日付のマスターテーブルを用意する

2. Tableau Desktopで、aとbどちらかの方法で、データテーブルと1のマスターテーブルを繋ぎ合わせる

a. 結合する

b. カスタムSQLを使用する

3. 可視化

 

【手順 – 詳細】

1. 日付のマスターテーブルを用意する

まずは、開始日と終了日の間を埋めていくベースとなる、日付マスターとなるテーブルを用意します。

今回は日単位で埋めていきたいので、2017/6/1から2017/6/10までの10行を、Excelで作成しました。月単位、時間単位等、最終的に集計したい単位で埋めていくことになるので、必要に応じた粒度でご用意ください。

 

2. Tableau Desktopで、aとbどちらかの方法で、データテーブルと1のマスターテーブルを繋ぎ合わせる

※ aとb、どちらの方法を選択できるかは、接続先のデータソースの種類や、Tableau Desktopのバージョンによって異なります。

 

a. 結合する

今回はデータソースとしてExcelを使用しています。Tableau Desktopデフォルトの方法でExcelに接続すると、結合句として不等号が使用できないので、ファイル選択時に▼のメニューから「レガシー接続」を選択します。

 

結合の設定は以下の通りです。

 

結果はこちら。IDごとに、滞在日数分レコードが増えて、その日付が「日付」フィールドに入っています。

 

 

b. カスタムSQLを使用する

裏側の処理はaの結合とまったく同じですが、これをSQLで書くことも出来ます。普段からSQLに慣れ親しんでいる方は、こちらも選択肢としてアリですね。

 

まずは、Excelに対してカスタムSQLを発行するには、先ほどと同じく「レガシー接続」してください。

レガシー接続後、まっさらな状態からSQLを書きたい場合は「新しいカスタムSQL」をドラッグアンドドロップ。

 

イチから書くのはちょっと…という場合は、通常通りテーブルをドラッグアンドドロップしてから、「データ」メニュー → 「カスタムSQLに変換」を選択してください。そのテーブルに接続するためのベースは作ってくれるので、必要な部分だけ編集していきます。

(画像が粗くてすみません。)

今回使用するSQLは以下の通りです。

SELECT [サンプルデータ$].[ID] AS [ID],
[サンプルデータ$].[In] AS [In],
[サンプルデータ$].[Out] AS [Out],
[日付マスター$].[日付] AS [日付]
FROM [サンプルデータ$], [日付マスター$]
WHERE [日付マスター$].[日付] >= [サンプルデータ$].[In] AND [日付マスター$].[日付] <= [サンプルデータ$].[Out]

 

結果はこちら。aの結合時と同じですね。

 

 

3. 可視化

あとはいつも通り、可視化していきましょう。

 

 

 

【まとめ】

日付のマスターデータを作成する、というところさえクリア出来てしまえば、あとはそこまで難しくありません!

AlteryxのようなETLツールを使用した方がよい場合も、今回ご紹介した方法で手元でパパッと処理してしまう方がよい場合も、両方あると思います。その時々の状況に合わせて使い分けてみてください。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください