このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-047: レシート明細データ(receipt.csv)の売上日(sales_ymd)はYYYYMMDD形式の数値型でデータを保有している。これを日付型に変換し、レシート番号(receipt_no)、レシートサブ番号(receipt_sub_no)とともに10件表示せよ。
解答ワークフローは以下のようになります。
今回の問題は、数値型のデータを日付型に加工する問題となります。46問目は文字列型から日付型にしていましたが、今回は数値型からとなります。数値型の場合は一度文字列型に変換する必要があります。これを行うにはセレクトツールで文字列型にあらかじめ変更しておくか、フォーミュラツール内の関数ToStringで行います。
日時ツール利用
日時ツールを使う場合は、まずセレクトツールで数値型から文字列型に変換する必要があります。
次に、日時ツールです。変換するフォーマットを選択オプションでは、「文字列を日付/時刻形式に変換する」を選択します。その他変換する文字列フィールドは「sales_ymd」(数値型だとここに出てこないので、文字列型に変換する必要があります)。新しい列名を指定し、「入力する文字列フィールドに一致する形式を選択」は、今回「20181103」のような形でデータが供給されているので「yyyyMMdd」を選択します。
あとは不要項目を削除&リネームして、最初の10件をサンプリングツールなどで取得すれば完了です。
フォーミュラツール使用の場合
次に、日付ツールではなくフォーミュラツールを使う方法をご紹介します。
フォーミュラツール使う場合は、DateTimeParse関数を使っていきますが、元のデータが数値型で供給されているため、ToString関数を使って文字列型にする必要があります。設定としては以下のとおりです。
ToString関数について
ToString関数は、以下の書式となります。
ToString(x, numDec, [addThousandsSeparator], [decimalSeparator])
最低限必要なのは、最初のToString(x)だけですので、単純にフィールドをToStringで囲めば大丈夫です。それ以外に以下のようなオプションがあります。
x | 数値型の値 | 数値型のフィールドまたは値 |
numDec | 小数位 | 小数点以下の文字数を指定(0をインプットとしたとき、このオプションを3とすると小数点以下の数が3つになるので、0.000)となります。 |
addThousandsSeparator | 区切り記号追加 | 桁区切り記号を指定します。既定値は「0」で区切り記号なしです。「1」は「,」(カンマ)となりますが、decimalSeparatorが「,」(カンマ)であれば「.」ピリオドになります。その他、「,」(カンマ)、「.」(ピリオド)、「 」(スペース)、「’」(アポストロフィー)が利用可能です。 |
decimalSeparator | 小数点区切り記号 | 小数点の区切り記号を指定します。既定値では「.」(ピリオド)、「,」(コンマ)も指定可能です。 |
話をもとに戻すと、計算式は以下の通りとなります。
DateTimeParse(ToString([sales_ymd]),"%Y%m%d","日本語")
このあとは不要項目を削除およびリネームして、最初の10件をサンプリングツールなどで取得すれば完了です。
複数フィールドフォーミュラ
今回も複数フィールドフォーミュラを使ってみたいと思います。
設定は以下の通りです。46問目と異なるのは、最初のフィールドタイプの指定の部分で「数値」とする必要があります。
計算式は、フォーミュラツールと同様の関数を利用します。
DateTimeParse(ToString([sales_ymd]),"%Y%m%d","日本語")
これによりワークフローとしては以下のようになります。
まとめ
今回は、日時ツールもしくはフォーミュラツールを使った数値型から日付型への変換方法を学ぶことのできる問題でした。
コメント