Qlikデータフロー入門_プロセッサー
- SENSUKE KURIYAMA
- 2月8日
- 読了時間: 10分
更新日:6月21日
2025年1月に公開されたQlikのデータフローでどんな加工処理ができるか試してみました
※2025年2月時点のQlik Cloudを利用しています。
■Qlik データフローの基本操作
データフローの基本操作は「データフロー入門」をご確認ください。
■プロセッサーの基本操作
フィルター:不要なレコードを省略、複合条件も設定できデータマネージャより便利
▼「⊕」アイコンから条件式を追加します
▼条件式の設定
処理する項目:先行処理のデータ項目から選択できます
関数を適用:項目値に関数を適用できます
[絶対値に]:FAbs([項目])
[小文字に]:Lower([項目])
[大文字に]:Upper([項目])
[最初の文字を小文字に]:Lower(Left([項目],1))
[最初の文字を大文字に]:Upper(Left([項目],1))
[長さ]:Len([項目])
演算子:各種演算子が設定できます
次を使用:条件式の値を指定します
※「⊕」アイコンで複数の条件式を設定できます
▼一致する行を選択
複数の条件式を設定した際の複合ロジックを設定します
すべてのフィルター:条件式A and 条件式B
あらゆるフィルター:条件式A or 条件式B
どのフィルターでもない:Not 条件式A or 条件式B
項目を選択:一部項目のみロードしたり、重複行を削除するようなときに便利
▼個別値:オンにすると「Load Distinct」が設定されます

結合:2つのテーブルを結合。データマネージャの結合よりフローが残って便利
▼結合タイプ
・左外部結合:LEFT JOIN
・内部結合:INNER JOIN
・右外部結合:RIGHT JOIN
・完全外部結合:OUTER JOIN

集合
フォーク:フローを2つに分離できます

集計:GROUP BYの集計を定義できます
▼グループ基準ー項目:集計軸となる項目を指定します。「⊕」で複数項目の追加が可能です。
▼操作ー項目:集計対象の項目を指定します。「⊕」で複数項目の追加が可能です。
▼演算 ⇒ 参考)データ分析の基本~「集計関数の使い方」
・合計:Sum()
・個数:Count()
・個別値:Count(distinct )
・最大:Max()
・最小:Min()
・平均:Avg()
・連結:Concat()

ソート:ORDER BYで明示的にソートしてロードします
項目とソート順を指定します

項目を削除:一部項目を削除します
チェックを入れた項目を削除します。

項目を分割:Subfield関数を定義できます
SubField関数を定義することができます

項目を連結:対象項目と文字列や別項目を連結することができます。プレフィックス、区切り文字、サフィックスの指定も可能です。

Qlikスクリプト:フロー途中にQlikのロードスクリプトを組み込めます
スクリプトを組み込めるので最終手段はこれを使えそうです。

ピボット解除:ピボットデータ(横持ちデータ)を行列入れ替えし出力します

■プロセッサーの基本操作(文字列)
様々な文字列関数を利用した加工ができます
大文字に変換:Upper関数を定義できます
※生成される数式
Upper([処理する項目])
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

小文字に変換:Lower関数を定義できます
※生成される数式
Lower([処理する項目])
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

単語の先頭文字を大文字に変換:Capitalize関数を定義できます
※生成される数式
Capitalize([処理する項目])
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

検索と置換:Match関数とIF分で文字列を置換できます
※生成される数式
IF(Match([pageTitle], 'Before'), 'After', [pageTitle])

テキストの一部を削除:所定の文字列の一部を削除できます
・演算子「等しい」
※生成される数式
IF(Match([処理する項目], '対象文字列'), '', [処理する項目])
・演算子「含む」
※生成される数式
Replace([処理する項目], '対象文字列', '')
・演算子「次で始まる」
※生成される数式
IF(Match(Left([処理する項目], Len('対象文字列')), '対象文字列'), ''
& Right([処理する項目], Len([処理する項目]) - Len('対象文字列')), [処理する項目])
・演算子「次で終わる」
※生成される数式の例
IF(Match(Right([pageTitle], Len('対象文字列')), '対象文字列'),
Left([pageTitle], Len([pageTitle]) - Len('対象文字列')) & '', [pageTitle])
※「次で終わる」の設定

テキストを含む:所定の文字列を含むかどうかTRUE/FALSEで判定できます
※生成される数式
IF(Index([処理する項目], '*対象文字列*'), Dual('TRUE', -1), Dual('FALSE', 0))
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

類似のテキストに一致: 所定の文字列とのファジー度(一致しない文字数)でTRUE/FALSE判定できます
※生成される数式の例
IF(LevenshteinDist([pageTitle], 'Qlik Sense') <= 3, Dual('TRUE', -1), Dual('FALSE', 0))
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

インデックスで値を抽出:Mid関数を定義できます
・開始/終了位置をインデックス指定する例
※生成される数式の例
Mid([pageTitle], 2, 4)
※「開始インデックス」を 1 にすると2文字目から開始されます

・開始/終了位置を「最初から」「最初まで」で指定する例
※生成される数式の例
Mid([pageTitle], 1, Len([pageTitle]))
※「最初から」にすると1文字目から開始されます
※「最後まで」にすると項目の長さが終了位置になります

・開始/終了位置を「最後の前のNから」「最後の前のNまで」で指定する例
※生成される数式の例
Mid([pageTitle], Len([pageTitle]) -0, -4)
※「最後の前の1から」にすると最後の文字が開始位置になります
(値は返ってこないので通常はこんな設定はしません)

★参考
Mid( '87654321' , Len( '87654321' ) - 3, 2) は「43」を返します
英数字以外の文字を削除:英数字以外の文字を削除できます
※生成される数式
KeepChar([処理する項目], '$(ALPHA_NUM_CHARS)')
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です
'$(ALPHA_NUM_CHARS)' がどのように設定されているのかは・・・

数字以外の文字を削除:KeepChar関数を定義できます
※生成される数式
KeepChar([処理する項目], '$(NUM_CHARS)')
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です
'$(NUM_CHARS)' がどのように設定されているのかは・・・

末尾文字と先頭文字を削除:Trim関数を定義できます
※生成される数式
Trim([処理する項目])
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です 削除する文字は「空白」か「その他」を選択できます

パディングを追加:所定の文字を追加することができます
コードの0埋めなどに使えます
※生成される数式の例
Repeat('0', 15 - Len([date])) & [date]
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

文字列に変換:Text関数を定義できます
※生成される数式の例
Text([処理する項目])
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

長さを計算:Len関数を定義できます
※生成される数式の例
Len([処理する項目])
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

パターンに一致:CountRegEx関数を定義できます
※生成される数式
IF(CountRegEx([処理する項目], '[0-9]+'), Dual('TRUE', -1), Dual('FALSE', 0))
※[処理する項目]のプルダウンの右にあるアイコンで複数の項目を選択可能です

連続する文字を削除:ReplaceRegEx関数を定義できます

■プロセッサーの基本操作(日付)
様々な日付に関する加工ができます
日付に変換:Date#関数を定義できます
※生成される数式の例
Date(Floor(Date#([処理する項目], 'YYYYMMDD')))

時間に変換:Time#関数を定義できます
※生成される数式の例
Time(Time#([処理する項目], 'hh:mm:ss'))

部分からタイムスタンプを作成:個別の時系列項目からタイムスタンプを作成できます
※生成される数式の例
Timestamp(MakeDate(Year(Date#([年], 'YYYY')),Month(Date#([月], 'MM')),Day(Date#([日], 'DD'))) + time(MakeTime(Hour(time#([時間],'hh')),Minute(time#([分],'mm')),Second(time#([秒],'ss'))) + time#([ミリ秒],'fff'), 'hh:mm:ss.fff')) AS [タイムスタンプ]

部分から日付を作成:個別の時系列項目から年月日を作成できます
※生成される数式の例
MakeDate(Year(Date#([年], 'YYYY')),Month(Date#([月], 'MM')),Day(Date#([日], 'DD'))) AS [年月日]

部分から時間を作成:個別の時系列項目から時刻を作成できます
※生成される数式の例
time(MakeTime(Hour(time#([時間],'hh')),Minute(time#([分],'mm')),Second(time#([秒],'ss'))) + time#([ミリ秒],'fff'), 'hh:mm:ss.fff')) AS [時刻]

日付の書式設定:Date関数を定義できます
※生成される数式の例
Date([date], 'YYYY-MM-DD')

日付の差を計算:2つのタイムスタンプの差異を計算できます
・[日付または時間の部分]にて日付の差を返す単位を指定します。「日」にすると日数で返されます。
・[終了]にて比較する日付を指定します。「現在」「具体的な日付」「他の項目」が設定できます。
※生成される数式の例
▼日付または時間の部分「日」、終了「現在」
Floor(Now()) - Floor([タイムスタンプ])
▼日付または時間の部分「月」、終了「現在」
(Year(Now()) - Year([タイムスタンプ]))*12 + Month(Now()) - Month([タイムスタンプ])

期間を追加:指定の期間を追加できます
・[日付または時間の部分]にて追加する期間の単位を指定します。「月」にすると月数が追加されます。
・[次を使用]にて追加する期間数を指定します。「値」と「項目」で指定できます。
※生成される数式の例
▼日付または時間の部分「月」、次を使用「値:3」
AddMonths([タイムスタンプ], 3)
▼日付または時間の部分「年」、次を使用「値:3」
AddYears([タイムスタンプ], 3)
▼日付または時間の部分「年」、次を使用「値:3」
Date([タイムスタンプ] + 3)
日付を比較:日付を比較して「TRUE」「FALSE」を返します
※生成される数式の例
▼比較モード「等しい」、次を使用「他の項目:date2」
IF([date] = [date2], Dual('TRUE', -1), Dual('FALSE', 0))
▼比較モード「この日以前」、次を使用「他の項目:date2」
IF([date] <= [date2], Dual('TRUE', -1), Dual('FALSE', 0))

日付部分を抽出:タイムスタンプデータから各種の日付項目が作成できて便利です
元になるタイムスタンプと生成したい日付項目のスイッチをONするだけです。指定スイッチは下記のとおりです。
年、四半期、四半期番号、月番号、月名、週番号、年の日、月の日、曜日、曜日名、時(12H)、時(24H)、AM/PM、分、秒、年‐四半期、年‐月、年‐週

■プロセッサーの基本操作(数字)
様々な数字に関する加工ができます
四捨五入モードを使って値を丸める
※生成される数式
Round([処理する項目], 0.1)
引数の0.1は有効桁数で指定できます

シールモードを使って値を丸める
※生成される数式
Ceil([処理する項目], 0.1)
引数の0.1は有効桁数で指定できます

フロアモードを使って値を丸める
※生成される数式
Floor([処理する項目], 0.1)
引数の0.1は有効桁数で指定できます

切り捨てモードを使って値を丸める
※生成される数式
If([処理する項目] > 0,Floor([処理する項目], 0.1), Ceil([処理する項目], 0.1))
引数の0.1は有効桁数で指定できます

端数部分を削除
※生成される数式
If([処理する項目] > 0,Floor([処理する項目]), Ceil([処理する項目]))

数値を比較
※生成される数式
IF([処理する項目] >= 50, Dual('TRUE', -1), Dual('FALSE', 0))
処理する項目と指定した値/項目を比較してTRUE or FALSEを返します
▼比較タイプ:使用される演算子
・等しい:=
・等しくない:<>
・超:>
・以上:>=
・未満:<
・以下:<=
・引数の0.1は有効桁数で指定できます

負の値を削除
※生成される数式
IF([処理する項目] < 0, Null(), [処理する項目])
負の値はNullで返します

以上
Comments