Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
nab
Contributor
Contributor

レコードの生成

お世話になります。

qlik初心者です。

スクリプトで、何とかできないかと悩んでいます。

・タイムスタンプでデータが来る
・1レコードで日付をまたぐことがある
・日付で区切るようにして、レコードを分けたい

ご教授お願いいたします。

7 Replies
hmapgo03032006
Contributor II
Contributor II

はじめまして。

極力単純な方法でをここをがけ作成してみました。

サンプルのQVWをご確認ください。

※Excelはソースです。

hmapgo03032006
Contributor II
Contributor II

すみません。

先ほどのサンプルに誤りがございました。

こちらのサンプルをご確認ください。

nab
Contributor
Contributor
Author

お返事ありがとうございます。

説明不足で申し訳ありません。クリックセンスでお願いいたします。

よろしくお願いいたします。

hmapgo03032006
Contributor II
Contributor II

申し訳ございませんがセンスは扱っていないので
ロードスクリプト記載致しいます。


//まずデータが何日間かをカウント
//floorを用いて時間情報を0にて計算
daycount:
LOAD
floor(end)-floor(start) as count

FROM
Example_TEST.xlsx
(ooxml, embedded labels, table is state);

//peekにて変数に値を入れる
let v_Daycount=peek('count',0,'daycount');

//変数作成後に不要となったテーブルを削除
drop Table daycount;

//12日から14日の3日間のデータをnextで1日づつ作成。
//0からカウントなのでpeekの取得した2を使用することで3日間分のデータを作れる。

for n=0 to $(v_Daycount)

LOAD
date(if($(n)=0,start,floor(start)+$(n)),'YYYY/MM/DD h:mm') as start,
date(if($(n)=$(v_Daycount),end,floor(start)+$(n)+1),'YYYY/MM/DD h:mm') as end,
state,
product,
work,
mainProgram,
subProgram
FROM
Example_TEST.xlsx
(ooxml, embedded labels, table is state);

next

EXIT SCRIPT;
nab
Contributor
Contributor
Author

早速のご回答ありがとうございます。

重ね重ねのご質問で申し訳ありませんが、以下のような場合はどのようにしたらいいでしょうか?

・添付のExample.xlsxでは、1レコードのみでしたが、複数のレコードが存在し、それらに対しても同様な処理を行いたい

ご教授お願いいたします。

hmapgo03032006
Contributor II
Contributor II

データ毎にナンバリングし、同じようにFOR NEXTでループでOKです。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

//テーブルを読み込む
TEMP:
LOAD start,
end,
state,
product,
work,
mainProgram,
subProgram
FROM
Example_TEST2.xlsx
(ooxml, embedded labels, table is state);

//Order by にてstart昇順にして、データ毎にナンバリングをする
NoConcatenate
TEMP1:
LOAD
RowNo() as DateNO,
start,
end,
state,
product,
work,
mainProgram,
subProgram

Resident TEMP
Order by start asc;
drop Table TEMP;


//FOR NEXTにてループさせるために DateNOの最大値を変数に入れる。
NoConcatenate
DateNO:
load
DateNO
Resident TEMP1
Order by DateNO desc;
;

//DateNOの最大値を変数に入れる。
let v_DateNOMAX=peek('DateNO',0,'TEMP1_0');

//不要となったテーブルを削除
drop Table DateNO;


for m=1 to $(v_DateNOMAX)


//データが何日間かをカウント
//floorを用いて時間情報を0にて計算
daycount:
LOAD
floor(end)-floor(start) as count

Resident TEMP1
where DateNO=$(m);


//peekにて変数に値を入れる
let v_Daycount=peek('count',0,'daycount');


//変数作成後に不要となったテーブルを削除
drop Table daycount;

//12日から14日の3日間のデータをnextで1日づつ作成。
//0からカウントなのでpeekの取得した2を使用することで3日間分のデータを作れる。

for n=0 to $(v_Daycount)

DATE:
LOAD
date(if($(n)=0,start,floor(start)+$(n)),'YYYY/MM/DD h:mm') as start,
date(if($(n)=$(v_Daycount),end,floor(start)+$(n)+1),'YYYY/MM/DD h:mm') as end,
state,
product,
work,
mainProgram,
subProgram

Resident TEMP1
where DateNO=$(m)

;
next n
next m

drop Table TEMP1;
EXIT SCRIPT;

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

以上になります。

nab
Contributor
Contributor
Author

ありがとうございます。 大変参考になります。

where句で、ひとつづつ切り出していくのですね。

今日は、試せる環境がないので、明日試して見ます。