Qlik SenseでEXCELのセル結合されたデータを取り込む
こんにちは。Deckです。
今回もデータ分析でハマりがちな「あるある」な問題に対処しましょう。
使用するのはこのようなデータです。
年度と教科ごとにテストの成績をまとめたデータですね。
一見、何の問題もないデータですが……
このデータをQlik Senseで取り込もうとするとこうなります。
セルが結合された部分が歯抜けになってしまっていることがわかりますね。
このまま取り込みを行うと国語以外の教科が年度なしのデータが出来上がってしまいます。
この問題に対応するため、データを取り込む際に少し工夫をしましょう。
セル結合されたデータの取り込み
新規アプリを作成し、ドラッグ&ドロップでデータを取り込みます。
元データのプレビューですが、先ほど説明した通り年度が歯抜けになっています。
一度、そのまま「データをロードして終了」をクリックしてデータをロードします。
左上のメニューから「データ ロード エディタ」の編集画面に入ります。
この画面にはデータをロードする際の条件が記入されています。
先ほどドラッグ&ドロップでデータを取り込むよう指定した条件は「自動生成セクション」にあります。
ここでは自動生成されたスクリプトに続ける形でデータを編集しましょう。
「セクションの追加」ボタンをクリックしてください。
次のスクリプトを入力します。
成績:
Noconcatenate LOAD
IF([年度]='',Peek([年度],-1),[年度]) as [年度],
[科目],
[成績]
Resident Sheet1
;
Drop Table Sheet1;
ここで入力したスクリプトの解説をします。
成績:
- これから取り込む予定のテーブルに名前をつけます。
テーブル名のあとに:(コロン)をつけます。
Noconcatenate LOAD
IF([年度]='',Peek([年度],-1),[年度]) as [年度],
[科目],
[成績]
Resident Sheet1
- Nonconcatenate
Noconcatenateは以前読み込んだテーブル(=「自動生成セクション」で読み込んだテーブル)とは別のテーブルを作成するという意味です。
項目がすべて同じテーブルを2つ作成するとき、これをつけないと1つのテーブルとしてまとめられて(結合されて)しまいます。
「自動生成セクション」で読み込んだテーブルは後で削除するので別のテーブルとすることを明示しておきましょう。
- LOAD ... ;
LOADはデータをロードする際の構文です。
LOAD に続いて取り込む項目をカンマ区切りで記述します。
- IF(条件,条件に当てはまるとき[,条件に当てはまらないとき])
IFは条件分岐の関数です。
条件として指定したのはlen([年度])=0です。
len()は文字数をカウントする関数です。len([年度])=0は年度が空白(文字が1つもない)ことを意味するので、この条件で年度が空白かどうか判定しています。
- 年度が空白のときの数式はPeek([年度],-1)です。
Peek(項目名[,テーブル内の順序])
Peek関数は今までに取り込んだデータを参照することができる関数です。
ここでは項目名に[年度]を指定しています。テーブル内の順序に-1を指定すると、今まで取り込んだデータの最後を見ます。
つまり、今までに取り込んだ中で一番最後の年度をロードすることができます。
- 年度が空白でなかった(=年度がある)ときの数式は[年度]です。
年度があるのでそのまま取り込むことができます。
- ここまでの流れを図にするとこうなります。
- 最後に、不要になったテーブルを削除します。
- Sheet1は「自動生成セクション」で取り込んだ年度が歯抜けになっているテーブルです。
- Resident テーブル名 は以前取り込んだテーブルを参照するときに使います。
Drop Table Sheet1;
データをリロードして確認
以上の入力ができたら画面右上の「データのロード」をクリックしてリロードしましょう。
「アプリ概要」から、データの歯抜けが解消されているかどうか確かめてみましょう。
テーブル ボックスを作成して、軸に年度、教科、成績を追加します。
データの歯抜けが解消されていることが確認できました。
以上でセル結合されたデータの取り込みの解説は終わりです。