このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-049: レシート明細データ(receipt.csv)の売上エポック秒(sales_epoch)を日付型に変換し、「年」だけ取り出してレシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに10件表示せよ。
※出力する日付型のデータはsales_yearとする
解答ワークフローは以下のようになります。
今回の問題は、48問目で求めた「UNIX秒で提供されている数値型のデータを日付型に加工する」というところに加えて得られた日付型のデータから望む形、今回で言えば「年」を取り出す問題となります。48問目までは前回解説していますのでそちらを参照していただくとして、ここでは48問目の解答の結果から先を実際に見ていきたいと思います。
というとことで、以下の部分からスタートします。
この時点では以下のようなデータが得られていると考えてください(先頭から5レコード、sales_dateフィールドのみ表示しています)。
日時ツール使用の場合
日時ツールの場合は以下のような設定となります。変換するフォーマットを選択は、「日時/時刻形式を文字列に変換する」、変換する日付/時刻フィールドは、48問目で作った「sales_date」、新しい列名は「sales_year」とします。形式としては、年のみ取得するようなものはプリセットにないので、カスタムを選択肢、「yyyy」と記載します。
これで完了です。上の設定画面の一番右下にある出力サンプルを見ると、年のみが得られています。
あとは、不要な項目を削除し、先頭から10レコードを取得すれば完了です。以下のようなワークフローとなります。
フォーミュラツール使用の場合
フォーミュラツール使用の場合は、DateTimeYear関数を使います。
DateTimeYear
DateTimeYear(dt)
dt | DateTime型 | 日時型のフィールドもしくは値 |
単純に日時型のフィールドのみを指定するだけの関数であるため、非常にシンプルな関数です。
今回の場合のフォーミュラツールでの設定は以下の通りです。
DateTimeYear([sales_date])
これで完了です。データプレビューでも年のみが表示されています。
あとは、不要な項目を削除し、先頭から10レコードを取得すれば完了です。以下のようなワークフローとなります。
フォーミュラツールをまとめてみましょう
上の例では複数のフォーミュラツールが存在していますが、まとめることが可能です。
今回の計算式は48問目の方では以下のような計算式でした。
DateTimeAdd("1970-01-01 00:00:00",[sales_epoch],"sec")
次に、今回の計算式は以下のようなものでした。
DateTimeYear([sales_date])
つまり、48問目の計算式を単にDateTimeYear関数でくくるだけです。つまり、以下のような計算式となります。
DateTimeYear(DateTimeAdd("1970-01-01 00:00:00",[sales_epoch],"sec"))
フォーミュラツールの設定としては以下のようになります。
あとは不要な項目を削除して先頭から10件抽出すれば完了です。
非常にすっきりしたワークフローになりました。
ここからさらに最初のセレクトツールを消して、フォーミュラツールの[sales_epoch]に対してToNumber関数を使えば、さらにツールを一つ減らすことが可能です。
まとめ
今回は、日時型のデータを欲しい形、今回は「年」で取り出す問題でした。日時ツールやDateTimeYear関数などが利用可能です。もちろん、DateTimeFormat関数も使うことができます。
コメント