Qlik Community

Qlik Japan

Announcements
Customers, Partners & Luminaries only: You're invited to a Data Analytics Roadmap session. Read More
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Creator
Creator

ファイル読み込み時にQlikViewが認識できる日付フォーマット

以下のフォーマットで日付データを読み込もうとしています。

    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パラメータは戻り値のフォーマット定義だったと思いますが

Labels (1)
1 Solution

Accepted Solutions
Highlighted
Creator II
Creator II

表示の変更だけなら下記でいけます。

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')

View solution in original post

5 Replies
Highlighted
Contributor III
Contributor III

本当にこのフォーマットで固定であるならの条件付きの力技です。

なんとかこれでできましたが、私の知識では簡単にできる方法は見つけられませんでした。

=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')

Highlighted
Creator II
Creator II

表示の変更だけなら下記でいけます。

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')

View solution in original post

Highlighted
Creator
Creator

ありがとうございます。

Timestamp#()だけでなく、Date#()でも同様の方法で解決しました。

Timestamp#()、Date#()のリファレンス 分かりにくいですね。

Contributor III
Contributor III

'Jul'はMMMで取れるんですね、勉強になりました。

Highlighted
Creator II
Creator II

ちなみに、'July' とフルで記載されている場合は、’MMMM’ と記述する事で取得出来ますが、通常QVの言語を日本語に選択していると思うので、この場合スクリプト内に以下を記述してロードしておく必用があります。

SET LongmonthNames = 'January;February;March;April;May;June;July;August;September;October;November;December';