このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-048: レシート明細データ(receipt.csv)の売上エポック秒(sales_epoch)は数値型のUNIX秒でデータを保有している。これを日付型に変換し、レシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに10件表示せよ。
※出力する日付型のデータはsales_dateとする
解答ワークフローは以下のようになります。
今回の問題は、UNIX秒で提供されている数値型のデータを日付型に加工する問題となります。しかしながら、UNIX Epoch Timeは基準時間からの経過秒を格納しているため、基準時間に対しての計算が必要になるため、フォーミュラツールを利用する必要があります。
UNIX Epoch Time
UNIX Epoch Timeは「1970-01-01 00:00:00」を基準として、そこからの経過秒のデータとなります。
ちなみに、Excelの日付のシリアル値も基準が異なりますが、似たような考え方となります。
基準時間に対して秒数を足せば良いということになりますが、これを実現するのが「DateTimeAdd」関数です。
DateTimeAdd関数
DateTimeAdd関数は、日付データに対して数値を足す関数です。例えば、日付型のデータに対して1年足す、10分足す、などの計算が可能です。
DateTimeAdd(dt,i,u)
dt | DateTime型 | 日時型のフィールドもしくは値 |
i | integer(整数) | 足し算を行う値 |
u | unit(単位) | 単位を文字列で指定します。「year」「months」「days」「hours」「minutes」「seconds」。secなど省略形も受け入れます |
ワークフローの作成
それではワークフローの作成に戻ります。
まず、売上エポック秒(sales_epoch)は数値ということなので、セレクトツールで数値型に変更しましょう。
売上エポック秒(sales_epoch)は数値として大きいため、Int32型が必要です。
次に、フォーミュラツールで日付型のデータを得たいと思います。設定は以下の通り。
今回の場合は基準値が「1970-01-01 00:00:00」で、足し込む値は「sales_epoch」に格納されているため、以下のような計算式となります。
DateTimeAdd("1970-01-01 00:00:00",[sales_epoch],"sec")
“1970-01-01 00:00:00″と記載するだけで、Alteryxの標準の日付型の形式のため自動的に日時型と判定されます。
データ型はしっかりとDate型にしましょう。
あとは不要な項目を削除して先頭から10件抽出すれば完了です。
セレクトツールを使わずに数値型に変換する場合
次に、セレクトツールを使わず、いきなりフォーミュラツールを使ってみたいと思いますが、これをするには売上エポック秒(sales_epoch)を数値型に変換する必要があります。ここで出てくるのがToNumber関数です。
ToNumber関数
ToNumber関数は、文字列を数値型に変換する関数です。書式は以下のようになります。
ToNumber(x, [bIgnoreErrors], [keepNulls], [decimalSeparator])
x | 文字列型の値 | |
bIgnoreErrors | 0またはfalse:変換エラーメッセージを報告します 1またはtrue:変換エラーメッセージを無視します | |
keepNulls | 0またはfalse:数値以外の値をゼロに変換 1またはtrue:数値以外の値をNullに変換します | |
decimalSeparator | 指定した区切り記号を小数点記号とし、すべての桁区切り記号(スペース、カンマ、ピリオド、アポストロフィ)を無視します |
実際難しい設定無しで数値に変換したい場合は、ToNumber([フィールド名])として使う場合が多いかと思います。桁区切り記号が入っているような場合は、decimalSeparatorオプションが使えるかと思います。
それでは実際に使っていきましょう。フォーミュラツールの設定は以下のようになります。
DateTimeAdd("1970-01-01 00:00:00",ToNumber([sales_epoch]),"sec")
今回はセレクトツールを使っていないため、文字列型の[sales_epoch]をToNumber関数で囲うだけで数値型に変換されます。
このあとは不要項目を削除およびリネームして、最初の10件をサンプリングツールなどで取得すれば完了です。
まとめ
今回は、UNIX Epoch Timeで格納されたデータを日付型に変更することができました。Excelのシリアル値の場合も基準値が異なるだけで似たような考え方で応用が可能です。
コメント