Qlik Trainingブログ

  • データ準備
2021.10.19

元データを別の値に置き換えて分析しよう!

元データの値を別の値に置き換えて分析したいということはありませんか?
例えば以下のような場合です。

・目標の点数に達した場合”達成”・達しなかった場合”未達成”に置き換えたい
・年齢を10歳ごとにグループ化して分析したい
・”未対応”・”準備中”・”対応中”...の進捗状況を数値の1,2,3...に置き換えたい

Qlik Senseには、値を別の値に置き換えるための様々な関数が用意されています。
今回はそれらの関数を使用して、スクリプト(データ ロード エディタ)で値を置き換える方法をご紹介します。

目次

※本記事は バージョン「2021年10月時点の[SaaS]」で作成しています。

条件によって値を別の値に置き換える方法(If関数)


例えば、目標の点数に達した場合”達成”、達しなかった場合”未達成”に置き換えたい
というように、条件によって値を別の値に置き換えたい時はIf関数を使用します。
If関数はチャートの数式でも使用できますが、If関数の条件が複雑な場合、
チャートの演算負荷が高くなるため、スクリプト(データ ロード エディタ)で
予め項目を作成しておくと良いです。

If関数の基本

If関数の基本 If関数は、条件に当てはまるかどうかにより値を置き換える関数です。
以下のように記述します。
----------------------------------------------------------------------
If(条件式, 条件に当てはまる時の値 , 条件に当てはまらない時の値)
----------------------------------------------------------------------
「条件に当てはまらない時の値」を省略すると、条件に当てはまらない場合は
Null値が返ります。

If関数の記述例(1)

単一の条件で、国語の点数が目標点以上の場合“達成”、それ以外の場合“未達成”に
置き換えたい場合の記述例です。

▼データ例

ユーザー 国語 国語目標
ユーザーA 60 60
ユーザーB 75 70
ユーザーC 68 70

▼記述例
--------------------------------------------------------------
LOAD
ユーザー,
[国語],
[国語目標],
If([国語]>=[国語目標],'達成','未達成') as [国語結果]
FROM [lib://DataFiles/点数データ.xlsx]
(ooxml, embedded labels, table is Sheet1);
--------------------------------------------------------------

以下のデータが取り込まれます。

ユーザー 国語 国語目標 国語結果
ユーザーA 60 60 達成
ユーザーB 75 70 達成
ユーザーC 68 70 未達成

If関数の記述例(2)

複数の条件を元に値を置き換えたい場合の記述例です。

▼データ例

ユーザー 国語 国語目標 数学 数学目標
ユーザーA 60 60 80 60
ユーザーB 75 70 55 80
ユーザーC 55 60 65 80
ユーザーD 82 90 90 80

■and演算子を使用して、国語・数学両方の点数が目標の点数以上の場合“達成”、
それ以外の場合“未達成”に置き換えたい時

▼記述例
--------------------------------------------------------------
LOAD
ユーザー,
[国語],
[国語目標],
[数学],
[数学目標],
If([国語]>=[国語目標] and [数学]>=[数学目標],'達成','未達成') as [国語数学結果]
FROM [lib://DataFiles/点数データ.xlsx]
(ooxml, embedded labels, table is Sheet2);
--------------------------------------------------------------

以下のデータが取り込まれます。

ユーザー 国語 国語目標 数学 数学目標 国語数学結果
ユーザーA 60 60 80 60 達成
ユーザーB 75 70 55 80 未達成
ユーザーC 55 60 65 80 未達成
ユーザーD 82 90 90 80 未達成

■or演算子を使用して、国語・数学どちらかの点数が目標の点数以上の場合“達成”、
それ以外の場合“未達成”に置き換えたい時

▼記述例
-------------------------------------------------------------------------------------
LOAD
ユーザー,
[国語],
[国語目標],
[数学],
[数学目標],
If([国語]>=[国語目標] or [数学]>=[数学目標],'達成','未達成') as [国語数学結果]
FROM [lib://DataFiles/点数データ.xlsx]
(ooxml, embedded labels, table is Sheet2);
-------------------------------------------------------------------------------------

以下のデータが取り込まれます。

ユーザー 国語 国語目標 数学 数学目標 国語数学結果
ユーザーA 60 60 80 60 達成
ユーザーB 75 70 55 80 達成
ユーザーC 55 60 65 80 未達成
ユーザーD 82 90 90 80 達成

■入れ子の条件式を使用して、国語のみ目標の点数以上の場合は“国語達成”、数学のみ目標の点数以上の場合は“数学達成”、両方目標の点数以上の場合は“両方達成”、両方目標の点数より低い場合は“両方未達成”に置き換えたい時

▼記述例
-------------------------------------------------------------------------------------------
LOAD
ユーザー,
[国語],
[国語目標],
[数学],
[数学目標],
If([国語]>=[国語目標],
If([数学]>=[数学目標],'両方達成','国語達成'),
If([数学]>=[数学目標],'数学達成','両方未達成'))
as [国語数学結果]
FROM [lib://DataFiles/点数データ.xlsx]
(ooxml, embedded labels, table is Sheet2);
-------------------------------------------------------------------------------------------

上記の記述では以下の条件指定を行っています。

条件1:国語が目標の点数以上であるか判定する
条件2:条件1に当てはまる場合、数学が目標の点数以上であるか判定する
条件3:条件1に当てはまらない場合、数学が目標の点数以上であるか判定する

以下のデータが取り込まれます。

ユーザー 国語 国語目標 数学 数学目標 国語数学結果
ユーザーA 60 60 80 60 両方達成
ユーザーB 75 70 55 80 国語達成
ユーザーC 55 60 65 80 両方未達成
ユーザーD 82 90 90 80 数学達成

If関数の記述例(3)

メニューの末尾が“ケーキ”の場合“ケーキ類”、末尾が”パフェ”の場合”パフェ類”、
それ以外の場合”その他”のように、あいまい検索で置き換えたい場合の記述例です。

▼データ例

メニュー
チーズケーキ
いちごパフェ
みたらし団子
いちご大福

以下のようにワイルドカード文字とlike演算子を使用します。
ワイルドカード文字は「*」(文字数を問わず任意の文字列)の他に「?」(任意の1文字)を
使用できます。

▼記述例
-------------------------------------------------------------------------
LOAD
メニュー,
If(メニュー like '*ケーキ','ケーキ類',
If(メニュー like '*パフェ','パフェ類','その他'))
as [メニュー分類]
FROM [lib://DataFiles/メニューデータ.xlsx]
(ooxml, embedded labels, table is Sheet1);
-------------------------------------------------------------------------

以下のデータが取り込まれます。

メニュー メニュー分類
チーズケーキ ケーキ類
いちごパフェ パフェ類
みたらし団子 その他
いちご大福 その他

数値を一定の間隔でグループ化する方法(Class関数)

例えば、年齢を10歳ごとにグループ化して分析したいというように、数値を一定の間隔で
グループ化したい時はClass関数を使用します。
※一定ではない間隔で数値をグループ化したい場合は、Class関数ではなくIf関数を使用
する必要があります。

Class関数の基本

Class関数は、数値を指定した間隔でグループ化します。

以下のように記述します。
------------------------------------------------------------------
Class(項目,グループ化の間隔,ラベル,グループ化の開始値)
------------------------------------------------------------------
※「ラベル」は、Class関数の結果が「10 <= x < 20」のような形で取得されるため
 「x」の部分の値を指定します。省略時は「x」で表示されます。
※「グループ化の開始値」を省略した時の値は0です。

Class関数の記述例

年齢を10歳ごとにグループ化したい場合の記述例です。

▼データ例

年齢(歳)
15
28
30
35

■年齢を、15歳を開始値として10歳ごとにグループ化したい時

▼記述例
-----------------------------------------------------
LOAD
[年齢(歳)],
Class([年齢(歳)],10,'年齢',15) as [年代]
FROM [lib://DataFiles/年齢データ.xlsx]
(ooxml, embedded labels, table is Sheet1);
-----------------------------------------------------

以下のデータが取り込まれます。

年齢(歳) 年代
15 15 <= 年齢 < 25
28 25 <= 年齢 < 35
30 25 <= 年齢 < 35
35 35 <= 年齢 < 45

■年齢を10歳ごとにグループ化して”10代”のような値に置き換えたい時

Num関数は数値の書式を変更する関数です。
以下のように記述します。

▼記述例
-----------------------------------------------------
LOAD
[年齢(歳)],
Num(Class([年齢(歳)],10),'0代') as [年代]
FROM [lib://DataFiles/年齢データ.xlsx]
(ooxml, embedded labels, table is Sheet1);
-----------------------------------------------------

以下のデータが取り込まれます。

年齢(歳) 年代
15 10代
28 20代
30 30代
35 30代

値を数値の連番に置き換える方法(Match関数)

例えば、”未対応”・”準備中”・”対応中”...の進捗状況を数値の1,2,3...に置き換えたい
というように、任意の値を数値の連番に置き換えたい時はMatch関数を使用します。

Match関数の基本

Match関数は、指定した値を数値の連番に置き換えます。
以下のように記述します。
---------------------------------------------
Match(項目, 値1, 値2,...,値n)
---------------------------------------------
※項目の値が”値1”の場合に”1”、”値2”の場合に”2”が返ります。

Match関数の記述例

”未対応”・”準備中”・”対応中”...の進捗状況を数値の1,2,3...に置き換えたい場合の記述例です。

▼データ例

進行状況
未対応
準備中
対応中
対応
中止

▼記述例
-------------------------------------------------------------
LOAD
[進捗状況],
Match([進捗状況],'未対応','準備中','対応中','完了','中止') as [進捗番号]
FROM [lib://DataFiles/進捗データ.xlsx]
(ooxml, embedded labels, table is Sheet1);
-------------------------------------------------------------

以下のデータが取り込まれます。

進行状況 進捗番号
未対応 1
準備中 2
対応中 3
対応 4
中止 5

※Match関数とは逆に、数値の1,2,3...を”未対応”・”準備中”・”対応中”...の進捗状況に
置き換えたいというように、数値の連番を任意の値に置き換えたい場合はPick関数を
使用します。
「Pick(項目, 値1, 値2,...,値n)」のように記述し、項目の値が”1”の場合は”値1”、
”2”の場合は”値2”が返ります。

さいごに

If関数とMatch関数は、弊社サポート担当者が動画コンテンツ「BI学校」で分かりやすく解説しています。
(動画タイトル:If関数とMonth関数、Match関数とWildMatch関数)
気になる方はぜひチェックしてください!
AWSCアカウント登録方法はこちら
BI学校(動画コンテンツ)の一覧や視聴方法はこちら

また、Qlik製品を活用したい方がスピーディに情報を入手できるサイト
Qlik hotspot」もありますので、ぜひご活用ください。

・アプリ開発のヒントを得たい
・Qlik製品を利用し始めたばかりで自己学習したい
・サポートやコミュニティに聞きたい
・バージョンアップを実施したい
・最新情報を取得したい

など、「Qlik製品に関わる全ての方」が利用できるサイトです。

関連している記事

  • データ準備
2021.11.30

数値の先頭に「0」がつくデータを取り込む方法

今回は、元の書式のまま取り込む方法についてご紹介します!

  • データ準備
2021.11.09

アプリ内にデータを埋め込む!インラインロードで簡単データ作成

Qlik SenseはExcelやCSV等の外部データをロードする方法が一般的ですが、少量データなのに外部データとして準備することに煩わしさを感じたことはありませんか?Qlikはスクリプト内に直接データを埋め込めるのでちょっとしたデータが必要な時には「インラインロード」を知っておくと便利です。

  • データ準備
2021.08.12

Null(値がないデータ)を選択するには?

皆さんはQlik Senseのチャートの値に「-」が入っているのを、見つけたことはありませんか?

ページの先頭へ戻る