Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
以下のフォーマットで日付データを読み込もうとしています。
Jul 19, 2018 06:24 PM
しかし、QlikViewが日付として認識できないためか、Date()によるフォーマット変換ができず、
Year()、Month()等の日付系関数も値を返しません。
Date(Date#('Jul 19, 2018 06:24 PM'), 'YYYY/MM/DD') をしても同様です。
仕方がないので、ソースデータ(Excel or CSV)をExcelで開いて
ソースデータの一次加工をしてからQVに読込みさせようとExcel上で日付データの
表示フォーマットを別なもの(YYYY/MM/DD hh:mm)に変換しようと思いましたが、
Excelでは何故かセルの設定変更後に一度該当セルを編集モードにしないと上記変更が
反映されないため、諦めました。
→データ量が多く、全行に対して手動でセル編集モードにすることが現実的でないため
→手動でセル編集モードにして日付の表示フォーマットを変更した行は、QVでも日付として正しく認識されました
上記の結果から、そもそものソースデータの日付フォーマットを変換しないとダメかな、
と思っていますが、QlikViewが日付として認識できるフォーマット、もしくはできないフォーマットなど
制約はありますでしょうか?
もしくは、Date#()にパラメータを与えてソースデータのフォーマットをQVに教えてあげるようなことはできますでしょうか?
→Date#()の第2パラメータは戻り値のフォーマット定義だったと思いますが
表示の変更だけなら下記でいけます。
Date(Timestamp#('Jul 19, 2018 06:24 PM','MMM DD, YYYY hh:mm tt'),'YYYY/MM/DD')
ただ、別時刻の同一日を同じものとして連携する必要があるなら、シリアル値の小数点以下を切捨てする必要があるので下記計算式になります。
Date(Floor(Timestamp#('Jul 19, 2018 06:24 PM','MMM DD, YYYY hh:mm tt'),1),'YYYY/MM/DD')
本当にこのフォーマットで固定であるならの条件付きの力技です。
なんとかこれでできましたが、私の知識では簡単にできる方法は見つけられませんでした。
=timestamp#(date(makedate(mid('Jul 19, 2018 06:24 PM',9,4),
Match(left('Jul 19, 2018 06:24 PM',3),'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'),
mid('Jul 19, 2018 06:24 PM',5,2)),'YYYY/MM/DD') & ' ' &
maketime(if(right('Jul 19, 2018 06:24 PM',2)='PM',num(mid('Jul 19, 2018 06:24 PM',14,2))+12,num(mid('Jul 19, 2018 06:24 PM',14,2))),mid('Jul 19, 2018 06:24 PM',17,2),'00'),
'YYYY/MM/DD hh:mm:ss')
表示の変更だけなら下記でいけます。
Date(Timestamp#('Jul 19, 2018 06:24 PM','MMM DD, YYYY hh:mm tt'),'YYYY/MM/DD')
ただ、別時刻の同一日を同じものとして連携する必要があるなら、シリアル値の小数点以下を切捨てする必要があるので下記計算式になります。
Date(Floor(Timestamp#('Jul 19, 2018 06:24 PM','MMM DD, YYYY hh:mm tt'),1),'YYYY/MM/DD')
ありがとうございます。
Timestamp#()だけでなく、Date#()でも同様の方法で解決しました。
Timestamp#()、Date#()のリファレンス 分かりにくいですね。
'Jul'はMMMで取れるんですね、勉強になりました。
ちなみに、'July' とフルで記載されている場合は、’MMMM’ と記述する事で取得出来ますが、通常QVの言語を日本語に選択していると思うので、この場合スクリプト内に以下を記述してロードしておく必用があります。
SET LongmonthNames = 'January;February;March;April;May;June;July;August;September;October;November;December';