ヘルプに載っていないデータ変換処理
スクリプトの説明
クリックテックジャパン株式会社
2023年10月24日
•概要
•データ変換処理スクリプト詳細
•スクリプト具体例と解説
アジェンダ
3
概要
4
データ変換スクリプト概要
• QlikViewではファイルウィザードの変換オプ
ションを使用することで複雑なスクリプト処理
をしなくてもデータ変換処理をすることが可能
です。
• この変換オプションの処理はQlik Senseでも利
用可能です。
• オンラインヘルプやQlikコミュニティにコマンド
に関する説明が掲載されていません。
今回、QlikViewの変換オプションを紐解いて
QlikViewおよびQlik Senseを使用して説明しま
す。
5
データ変換スクリプト詳細
6
データ変換処理スクリプトのルール
• ファイル形式データ、Inlineのロードで使用可能
• 取り込むデータの形式を決める()内で使用
• 書式ルール
- ,Filters()で全体を括る
- コマンド毎に()で括る
- 複数コマンドを実行する場合は「,」をつける
- コマンドの組み合わせを実行する場合は
Compoundを使用する
LOAD 年月日,
カテゴリ,
伝票No,
販売価格
FROM
データ変換サンプルデータ.xlsx
(ooxml, embedded labels, table is データ削除
, filters(
Remove(Row,
RowCnd(Compound,
RowCnd(CellValue, 1, StrCnd(equal, '合計')),
RowCnd(CellValue, 2, StrCnd(equal, 'A'))
)
)
)
);
7
データ変換処理スクリプトコマンド
• ベース
- filters ベース:データ変換コマンドは 「,filters()」の「()」に記述
• 変換
- Remove 削除:選択したセル、条件付き削除を実行
- Replace 置換:設定した条件でセルの値を置換
- Transpose 行列の入れ替え:行列の入れ替え
- Rotate 回転:データテーブルを左右に回転
- Unwrap 改行:指定した行からデータを改行
- Colxtr 列の処理:新規列の作成、列の値の置換
• 評価コマンド
- Cellvalue セルの評価を行う際に使用
- Strcnd セルの評価条件
- Rowcnd 行の評価条件
- Row 行
- Col 列
8
データ変換処理スクリプトコマンド
• 演算子
- Bottom 下(セルの置換)、下からの位置(改ページ)
- Compound 組み合わせ評価コマンドを組み合わせるときに使用
- Contain 値を含む
- Equal 値が等しい
- Length 長さが次の値と等しい
- Longer 長さが次の値より大きい
- Shorter 長さが次の値より小さい
- Pos セルの削除の際に位置を指定
- Start 次の値で始まる
• 演算子
- Top 上(セルの置換)もしくは上から(選択行の削除)
- null 値なし
- end 次の値で終わる
- case 大文字小文字を区別
- not NOT条件
- Right Rotateの右回転
- Left Rotateの左回転
9
スクリプト具体例と解説
10
データ行削除
LOAD 年月日,
カテゴリ,
伝票No
販売価格
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is データ削除, filters(
Remove(Row, Pos(Top, 15)), //15行目削除
Remove(Row, Pos(Top, 9)), //9行目削除
Remove(Col, Pos(Top, 4)) //4列目削除
));
※通常スクリプトで簡単に実現
1年月日 カテゴリ 伝票No 販売価格
2 2023/10/1A A0001 1000
3 2023/10/1B B0001 2000
4 2023/10/1C C0001 3000
5 2023/10/2A A0002 1200
6 2023/10/2C C0002 3200
7 2023/10/3A A0003 1300
8 2023/10/3C C0003 3000
9 2023/10/3B B0002 2200
10 2023/10/3D D0001 4000
11 2023/10/4B B0003 2300
12 2023/10/4C C0004 3300
13 2023/10/4D D0002 4400
14 2023/10/4E E0001 5000
15合計 35900
11
条件削除
LOAD 年月日,
カテゴリ,
伝票No,
販売価格
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is データ削除
, filters(
Remove(Row, RowCnd(CellValue, 1, StrCnd(equal, '合計'))),
//1列目セルの値が'合計'と等しい場合に行を削除
Remove(Row, RowCnd(CellValue, 2, StrCnd(equal, 'A')))
//2列目セルの値が’A’と等しい場合に行を削除
)
);
※通常スクリプトで簡単に実現
年月日 カテゴリ 伝票No 販売価格
2023/10/1A A0001 1000
2023/10/1B B0001 2000
2023/10/1C C0001 3000
2023/10/2A A0002 1200
2023/10/2C C0002 3200
2023/10/3A A0003 1300
2023/10/3C C0003 3000
2023/10/3B B0002 2200
2023/10/3D D0001 4000
2023/10/4B B0003 2300
2023/10/4C C0004 3300
2023/10/4D D0002 4400
2023/10/4E E0001 5000
合計 35900
12
条件削除構文例
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is データ削除, filters(
Remove(Row, RowCnd(Compound,
RowCnd(CellValue, 1, StrCnd(null)), //1列目値なし
RowCnd(CellValue, 2, StrCnd(equal, 'A')), //2列目 Aに等しい
RowCnd(CellValue, 2, StrCnd(equal, 'A', case)), //2列目 Aに等しい 大文字小文字区別
RowCnd(CellValue, 2, StrCnd(equal, 'A', not)), //2列目 Aに等しい NOT
RowCnd(CellValue, 2, StrCnd(equal, 'A', not, case)), //2列目 Aに等しい 大文字小文字区別 NOT
RowCnd(CellValue, 2, StrCnd(contain, 'A')), //2列目 Aを含む
RowCnd(CellValue, 2, StrCnd(start, 'A')), //2列目 Aから始まる
RowCnd(CellValue, 2, StrCnd(end, 'A')), //2列目 Aで終わる
RowCnd(CellValue, 2, StrCnd(length, 1)), //2列目 長さ1
RowCnd(CellValue, 2, StrCnd(shorter, 1)), //2列目 長さ1より小さい
RowCnd(CellValue, 2, StrCnd(longer, 1)) //2列目 長さ1より大きい
))
));
※通常スクリプトで簡単に実現
13
LOAD 年月,
カテゴリ,
伝票NO,
販売価格
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is 置換, filters(
Replace(1, top, StrCnd(null)), //値無し 上の文字列に置換
Replace(2, top, StrCnd(null)) //値無し 上の文字列に置換
));
年月 カテゴリ 伝票NO 販売価格
2023/10A A0001 1000
A0002 1200
A0003 1300
B B0001 2000
B0002 2200
B0003 2300
C C0001 3000
C0002 3200
C0003 3000
C0004 3300
D D0001 4000
D0002 4400
E E0001 5000
年月 カテゴリ 伝票NO 販売価格
2023/10A A0001 1000
2023/10A A0002 1200
2023/10A A0003 1300
2023/10B B0001 2000
2023/10B B0002 2200
2023/10B B0003 2300
2023/10C C0001 3000
2023/10C C0002 3200
2023/10C C0003 3000
2023/10C C0004 3300
2023/10D D0001 4000
2023/10D D0002 4400
2023/10E E0001 5000
14
セルの置換例
LOAD 年月,
カテゴリ,
伝票NO,
F4
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is 置換, filters(
Replace(1, top, StrCnd(null)), //値無し 上の文字列に置換
Replace(2, top, StrCnd(equal, 'A')), //Aと等しい 上の文字列に置換
Replace(1, left, StrCnd(null)), //値無し 左隣の文字列に置換
Replace(1, right, StrCnd(null)), //値無し 右隣の文字列に置換
Replace(1, bottom, StrCnd(null)) //値無し 下の文字列に置換
));
15
改ページ
LOAD 年月日,
カテゴリ,
伝票No,
販売価格,
[45202.000000],
B,
B0002,
[2200.000000]
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is データ削除, filters(
Unwrap(Row, Pos(Bottom, 8)) //8行目から改ページ
));
1年月日
カテゴ
リ
伝票No
販売価
格
2 2023/10/1A A0001 1000
3 2023/10/1B B0001 2000
4 2023/10/1C C0001 3000
5 2023/10/2A A0002 1200
6 2023/10/2C C0002 3200
7 2023/10/3A A0003 1300
8 2023/10/3C C0003 3000
9 2023/10/3B B0002 2200
10 2023/10/3D D0001 4000
11 2023/10/4B B0003 2300
12 2023/10/4C C0004 3300
13 2023/10/4D D0002 4400
14 2023/10/4E E0001 5000
15合計 35900
年月日 カテゴリ 伝票No 販売価格 2023/10/3C C0003 3000
2023/10/1A A0001 1000 2023/10/3B B0002 2200
2023/10/1B B0001 2000 2023/10/3D D0001 4000
2023/10/1C C0001 3000 2023/10/4B B0003 2300
2023/10/2A A0002 1200 2023/10/4C C0004 3300
2023/10/2C C0002 3200 2023/10/4D D0002 4400
2023/10/3A A0003 1300 2023/10/4E E0001 5000
合計 11700
16
条件つき改行
LOAD 年月日,
カテゴリ,
伝票No,
販売価格,
[45200.000000],
B,
B0001,
[2000.000000]
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is データ削除, filters(
Unwrap(Row, RowCnd(CellValue, 2, StrCnd(equal, 'B'))) //2列目 Bと等しい時に改行
));
1年月日
カテゴ
リ
伝票No
販売価
格
2 2023/10/1A A0001 1000
3 2023/10/1B B0001 2000
4 2023/10/1C C0001 3000
5 2023/10/2A A0002 1200
6 2023/10/2C C0002 3200
7 2023/10/3A A0003 1300
8 2023/10/3C C0003 3000
9 2023/10/3B B0002 2200
10 2023/10/3D D0001 4000
11 2023/10/4B B0003 2300
12 2023/10/4C C0004 3300
13 2023/10/4D D0002 4400
14 2023/10/4E E0001 5000
15合計 35900
年月日 カテゴリ 伝票No 販売価格 2023/10/1B B0001 2000
2023/10/1 A A0001 1000 2023/10/1C C0001 3000
2023/10/2A A0002 1200
2023/10/2C C0002 3200
2023/10/3A A0003 1300
2023/10/3C C0003 3000
2023/10/3B B0002 2200
2023/10/3D D0001 4000
2023/10/4B B0003 2300
2023/10/4C C0004 3300
2023/10/4D D0002 4400
2023/10/4E E0001 5000
合計 1000
17
行列入れ替え
LOAD
F1,
F2,
No,
[1.000000],
[2.000000],
[3.000000],
[4.000000],
[5.000000],
[6.000000],
[7.000000],
[8.000000],
[9.000000]
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is 回転, filters(
Transpose() //行列入れ替え
));
C1 Q2
C1-Q1 C1-Q2 C1-Q3 C2-Q1 C2-Q2 C2-Q3
No Name A1 A2 A3 B1 B2 C1 C2 C3 D1 D2 E1 E2 F1 F2 F3
1Name1 1 1 1 1 1 1 1
2Name2 1 1 1 1 1 1 1
3Name3 1 1 1 1 1 1
4Name4 1 1 1 1 1 1 1
5Name5 1 1 1 1 1 1 1 1
6Name6 1 1 1 1 1 1 1
7Name7 1 1 1 1 1 1 1
8Name8 1 1 1 1 1 1
9Name9 1 1 1 1 1 1
F1 F2 No 1 2 3 4 5 6 7 8 9
Name Name1 Name2 Name3 Name4 Name5 Name6 Name7 Name8 Name9
C1 C1-Q1 A1 1 1 1
A2 1 1 1
A3 1 1 1
C1-Q2 B1 1 1 1 1 1
B2 1 1 1 1
C1-Q3 C1 1 1 1 1 1 1
C2 1 1 1 1 1 1 1
C3 1 1 1 1
Q2 C2-Q1 D1 1 1 1 1 1 1
D2 1 1 1
C2-Q2 E1 1 1 1 1 1
E2 1 1 1
C2-Q3 F1 1 1 1 1
F2 1 1 1
F3 1 1
埋め込み項目にし
て1列目の項目名
を使用。
18
左回転
LOAD
@1,
@2,
@3,
@4,
@5,
@6,
@7,
@8,
@9,
@10,
@11,
@12
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, no labels, table is 回転, filters(
Rotate(left) //左回転
));
@1 @2 @3 @4 @5 @6 @7 @8 @9 @10 @11 @12
F3 1 1
F2 1 1 1
C2-Q3 F1 1 1 1 1
E2 1 1 1
C2-Q2 E1 1 1 1 1 1
D2 1 1 1
Q2 C2-Q1 D1 1 1 1 1 1 1
C3 1 1 1 1
C2 1 1 1 1 1 1 1
C1-Q3 C1 1 1 1 1 1 1
B2 1 1 1 1
C1-Q2 B1 1 1 1 1 1
A3 1 1 1
A2 1 1 1
C1 C1-Q1 A1 1 1 1
Name Name1 Name2 Name3 Name4 Name5 Name6 Name7 Name8 Name9
No 1 2 3 4 5 6 7 8 9
C1 Q2
C1-Q1 C1-Q2 C1-Q3 C2-Q1 C2-Q2 C2-Q3
No Name A1 A2 A3 B1 B2 C1 C2 C3 D1 D2 E1 E2 F1 F2 F3
1Name1 1 1 1 1 1 1 1
2Name2 1 1 1 1 1 1 1
3Name3 1 1 1 1 1 1
4Name4 1 1 1 1 1 1 1
5Name5 1 1 1 1 1 1 1 1
6Name6 1 1 1 1 1 1 1
7Name7 1 1 1 1 1 1 1
8Name8 1 1 1 1 1 1
9Name9 1 1 1 1 1 1
ラベルなしにしてデータ行分
「@N」で項目名称とする
19
右回転
LOAD
@1,
@2,
@3,
@4,
@5,
@6,
@7,
@8,
@9,
@10,
@11,
@12
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, no labels, table is 回転, filters(
Rotate(right) //右回転
));
@1 @2 @3 @4 @5 @6 @7 @8 @9 @10 @11 @12
9 8 7 6 5 4 3 2 1 No
Name9 Name8 Name7 Name6 Name5 Name4 Name3 Name2 Name1 Name
1 1 1 A1 C1-Q1 C1
1 1 1 1 1 1 C1 C1-Q3
1 1 1 1 1 1 1 C2
1 1 1 D2
1 1 1 1 1 B1 C1-Q2
1 1 1 1 C3
1 1 F3
1 1 1 1 B2
1 1 1 1 1 E1 C2-Q2
1 1 1 1 F1 C2-Q3
1 1 1 A2
1 1 1 A3
1 1 1 1 1 1 D1 C2-Q1 Q2
1 1 1 E2
1 1 1 F2
C1 Q2
C1-Q1 C1-Q2 C1-Q3 C2-Q1 C2-Q2 C2-Q3
No Name A1 A2 A3 B1 B2 C1 C2 C3 D1 D2 E1 E2 F1 F2 F3
1Name1 1 1 1 1 1 1 1
2Name2 1 1 1 1 1 1 1
3Name3 1 1 1 1 1 1
4Name4 1 1 1 1 1 1 1
5Name5 1 1 1 1 1 1 1 1
6Name6 1 1 1 1 1 1 1
7Name7 1 1 1 1 1 1 1
8Name8 1 1 1 1 1 1
9Name9 1 1 1 1 1 1
ラベルなしにしてデータ行分
「@N」で項目名称とする
20
列の作成
LOAD 年月,
カテゴリ,
伝票NO,
販売価格,
カテゴリ1
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is 置換, filters(
ColXtr(2, RowCnd(Every), 0)//新規列作成 すべての行
));
※通常スクリプトで簡単に実現
年月 カテゴリ 伝票NO 販売価格 カテゴリ1
2023/10A A0001 1000A
A0002 1200
A0003 1300
B B0001 2000B
B0002 2200
B0003 2300
C C0001 3000C
C0002 3200
C0003 3000
C0004 3300
D D0001 4000D
D0002 4400
E E0001 5000E
21
列の作成
LOAD 年月,
カテゴリ,
伝票NO,
販売価格,
F5
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is 置換, filters(
ColXtr(4, RowCnd(CellValue, 3, StrCnd(contain, 'A')), 0)
//新規列作成 4列目 値比較 3列目 Aを含む
));
※通常スクリプトで簡単に実現
年月 カテゴリ 伝票NO 販売価格 F5
2023/10A A0001 1000 1000
A0002 1200 1200
A0003 1300 1300
B B0001 2000
B0002 2200
B0003 2300
C C0001 3000
C0002 3200
C0003 3000
C0004 3300
D D0001 4000
D0002 4400
E E0001 5000
22
列の置換
LOAD 年月日,
カテゴリ,
伝票No,
販売価格
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is データ削除, filters(
ColXtr(3, RowCnd(CellValue, 3, StrCnd(contain, 'A')), 4)
//列変換 3列目をソース 値の比較 3列目にAを含むセルを4列に置き換える
));
※通常スクリプトで簡単に実現
年月 カテゴリ 伝票NO 販売価格
2023/10A A0001 A0001
A0002 A0002
A0003 A0003
B B0001 2000
B0002 2200
B0003 2300
C C0001 3000
C0002 3200
C0003 3000
C0004 3300
D D0001 4000
D0002 4400
E E0001 5000
23
データ変換スクリプト実例
• アンケート調査のデータなどでマスタなどがそろっていない場合に
実データから設問マスターを生成するのに「行列の入れ替え」、
「置換」を使用できます。
LOAD
F1 as 設問カテゴリ,
F2 as 設問,
No as 回答
FROM
[lib://DataFiles/データ変換サンプルデータ.xlsx]
(ooxml, embedded labels, table is 回転, filters(
Transpose(),
Replace(1, top, StrCnd(null)),
Replace(2, top, StrCnd(null))
))
Where F1 <> '';
C1 Q2
C1-Q1 C1-Q2 C1-Q3 C2-Q1 C2-Q2
C2-
Q3
No Name A1 A2 A3 B1 B2 C1 C2 C3 D1 D2 E1 E2 F1 F2 F3
1 Name1 1 1 1 1 1 1 1
2 Name2 1 1 1 1 1 1 1
3 Name3 1 1 1 1 1 1
4 Name4 1 1 1 1 1 1 1
5 Name5 1 1 1 1 1 1 1 1
6 Name6 1 1 1 1 1 1 1
7 Name7 1 1 1 1 1 1 1
8 Name8 1 1 1 1 1 1
9 Name9 1 1 1 1 1 1
設問カテゴ
リ
設問 回答
C1 C1-Q1 A1
C1 C1-Q1 A2
C1 C1-Q1 A3
C1 C1-Q2 B1
C1 C1-Q2 B2
C1 C1-Q3 C1
C1 C1-Q3 C2
C1 C1-Q3 C3
C2 C2-Q1 D1
C2 C2-Q1 D2
C2 C2-Q2 E1
C2 C2-Q2 E2
C2 C2-Q3 F1
C2 C2-Q3 F2
C2 C2-Q3 F3
24
まとめ
• QlikViewのファイルウィザードのデータ変換処理は「セルの置換」、「行列の入れ替え」など
Qlik Senseでも利用できるものがいくつかあります。
• 複雑なスクリプトが必要な場合は使用するのもありです。
実は。。。
ヘルプ:Qlik Sense での使用が推奨されていないスクリプト ステートメント パラメータ
2023-10-24TECHTALデータ変換処理スクリプト

2023-10-24TECHTALデータ変換処理スクリプト