Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
Masaki_Hamano
Employee
Employee

 

はじめに

検証のためにアプリやチャートを試しに作ってみたりするに当たって、テストデータ作成は手間がかかる場合が多いのですが、Qlik Senseではロードスクリプトを利用して内部的にテストデータを作成することが可能です。ここではテストデータ作成の幾つかの手法についてご紹介します。

 

Load .. Inlineを使ったインラインテーブルの作成

まずは、テーブル形式のデータを直接入力してデータを作成する方法です。件数の少ないデータを手早く入力してテーブルを作成し、チャートを試しに作ってみるといった場合によく利用される方法です。

ロードスクリプトに以下を入力してロードを実行します。

売上データ:
Load * Inline [
国,売上,売上原価
US,100,80
UK,200,180
JP,300,250
];

 

ここで、「国,売上,売上原価」はデータのヘッダー、それ以下の「US,100・・」はデータのレコードに当たります。この処理を実行すると、以下の様なテーブルが作成されます。

image-38.png

 

また、「Load * Inline 」の「*」はその下の部分で入力した全項目(国,売上,売上原価)をロードするということを示していますが、例えば以下の様な形でこの部分に変換処理を加えることも出来ます。

売上データ:
Load
 RowNo() AS NO, //RowNo関数で連番を追加
 *, //Inline内で入力した全項目
 (売上-売上原価) AS 利益 //利益の項目を追加
Inline [
国,売上,売上原価
US,100,80
UK,200,180
JP,300,250
];

 

そうすると、以下の様なデータが生成されます。

image-39.png

Load .. Autogenerateを利用したデータ生成

Autogenerateでは生成するレコード件数を指定することができ、件数の多いデータを利用する場合などに利用されます。

テストデータ:
Load 
	RowNo() AS NO,
	'AAAAA' AS Char
Autogenerate(10);

 

上記のスクリプトを実行すると、Autogenerateに指定された件数分の10件のデータが生成されます。ただ、先ほどの「Load .. Inline 」とは違ってレコードは手入力を行わず、どの様なレコードを生成するかをLoadの後に項目定義を入力する必要あり、上記の例ではRowNoによる連番と固定の文字列をレコードの値として定義しています。

また、文字列、数値、日付などのデータのランダムな値を生成する便利な方法が以下のサイトに掲載されており、ここでご紹介します。

まず、文字、数値、日付などのランダムな値を生成するための以下の変数を定義します。(文字、上段文字、下段文字については文字列を生成できる様、上記サイトのサンプルにRepeat関数を追加しています。)

SET vRandChar = Repeat(Chr(Floor(Rand() * 94 ) + 33), $1); //文字
SET vRandCharU = Repeat(Chr(Floor(Rand() * 26 ) + 65), $1); //上段文字
SET vRandCharL = Repeat(Chr(Floor(Rand() * 26 ) + 97), $1); //下段文字
SET vRandNo = Round(Rand() * ($2 - $1)) + $1; //$1 ~ $2の数値
SET vRandDt = Date(Floor(Rand() * (YearEnd(MakeDate($2)) - MakeDate($1))) + Num(MakeDate($1)), 'YYYY-MM-DD'); // $1 ~ $2の日付
SET vRandTime = MakeTime(Floor(Rand() * ($2 - $1) + $1), Floor(Rand() * 60), Floor(Rand() * 60)); //$1 ~ $2の時間
SET vRandND = Round(NormInv(Rand(), $1, $2), $3); //平均 $1, 標準偏差 $2, 精度 $3の正規分布の値

 

そして、以下の形でロード文を定義します。

テストデータ:
Load 
    $(vRandChar(1)) AS 文字,
    $(vRandCharU(5)) AS 上段文字,
    $(vRandCharL(10)) AS 下段文字,
    $(vRandNo(0,100)) AS 数値,
    $(vRandDt(2010,2015)) AS 日付,
    $(vRandTime(0,24)) AS 時間,
    $(vRandND(0,1,.1)) AS 正規分布
Autogenerate (1000);

 

そうすると、以下の様なデータを作成することができます。

image-40.png

 

また、同じく上記のサイトで紹介されている方法として、Mokarooというサイトで名前、email、性別などの項目を選択して1,000件までのデータを作成することができ、そのデータを活用することもできます。例えば「顧客マスタ」のテストデータ作成をイメージして、以下の様な定義のデータを作成します。

mockaroo.png

 

そして、以下の形でMockarooで作成した「顧客マスタ」データを取り込み、ファクト/トランザクションのデータに当たる売上データを先ほどの手順で作成します。

image-42.png

 

そうすると、以下の様な形でデータモデルが作成され、より実践に近いデータを利用することができます。

image-43.png

 

まとめ

ここでは、Load .. Inline および Load … Autogenerateを利用したテストデータ作成の方法についてご紹介させて頂きました。