【JKI】005_Date to Fiscal Year
【JKI_005】課題を確認
Just KNIME It! (JKI)
今回の挑戦はこちら。
Google翻訳すると
【会計年度の多様性】
年度なんだから1年間に決まってるし、始まりの月さえ指定したらいいのではと最初は思いました。甘かった。
そんなことあるんですか!完璧を目指すなら開始日と終了日が必要なわけですね。
【データセットを入手】
からExcelファイル2つを入手し、いつものようにknime-workspace内にdataフォルダを作って格納しました。
それぞれExcel Readerで読み込みます。
以前にも使った手法なので、設定画面のみ以下に。
設定:
【日付データへ変換】
JKIの第2回でやらかしたので、今回は同じ過ちは繰り返しません。
結果:
【課題の解釈が分かれるところ】
ここまでは良かったんですけど、この先はそれなりに悩みました。
どうしてかというと、「fiscal_years_lookup_table.xlsx」に会計年度の定義がされていない期間をどう扱うかが課題には明記されていなかったからです。
2015年10月1日より前や2020年9月30日より後をどうするか。
例えば、上記のFYすなわち会計年度Fiscal Yearの定義はサンプルと見なして、同様のルールでFYを定めてしまう方法もあります。
しかし今回は
と言ってますので、私の判断では「fiscal_years_lookup_table.xlsx」に定められた日付のみをFY定義に用いることで、この定義書を差し替えるだけで柔軟に多様な会計年度のラベル付けができるWFを提供することにしました。
皆さんの解釈と違ってもまあそんなこともあるさと割り切りました。仕事だったらもちろん相手に真意を確かめてから作りますよ、気づいたらね。
【データにIDを付与】
Loop処理でFYを入力していこうと考えたので、各行にIDを発番しておくことにしました。もっとうまいやり方もあるかもしれないんですが、IDを最初のデータテーブルの並びの順に後でソートできるようなIDをつけておくといろいろ便利なことがあると思ったからです。
今回は変数ROWINDEXをそのまま整数値のID番号として使いました。
結果:
【FY毎にLoop処理】
設定:
一回目のループ時の変数:
FY2016はStart が 2015-10-01, End が 2016-09-30と変数指定されています。
【Date&Time-based Row Filter】
上記の変数指定された期間でデータを絞り込みます。
設定:
一回目のループ時の結果:
意図した通りに絞り込まれています。
【会計年度データを加える】
上記で変数Keyに会計年度が指定されていたので、その値を新たなカラムに入力します。
一回目のループ時の結果:
【まわせTRTVループ】
Table Row To Variable Loopを今回だと5行分すなわち5回まわします。
上記はノードをStep Loop Executinして1回目で止めた状態です。
右クリックでResume Loop Executionを選べば残りのループ全てを回せますね。
Loop完了結果:
Iterationが0~4の5回分、集計されて379行の処理が終わりました。
最初に「contract_dates_table.xlsx」で入力したのは445行なので、66行は処理されないで会計年度が定義されませんでした。
【データを統合して整形】
JoinerでOrderカラムをキーにして入力データにFYカラムを統合します。作業用のOrderカラムなどは残さない設定としています。
設定:
結果:
最初の方は2015年9月までのデータが多いのでFYは空白になってます。
最後の方は比較的新しい日付でかつ2020年9月までなのでFY定義ができています。以上で完了と考えます。
【WF提出】
難易度の基準が分からないなぁと思いつつKNIME HubにWFを上げて完了です。
今回の皆さんの解答と次の課題も楽しみにしておきます。
おまけ:
【JKI_004振り返り】
公式解答のRuleEngineの設定が効率良いなと思いました。
私のは効率よくなかったですね。反省。
【すべては老後のために】
Loopを回そうとするとき、かなりの確率で思い出す曲がこちら。
好きだわぁ~この感じ
記事を読んでいただきありがとうございます。 先人の智慧をお借りしつつ、みなさんに役立つ情報が届けられたらと願っています。 もしサポートいただけるなら、そのお金はKNIMEの無料勉強会の開催資金に充てようと思います。