今回は、Qlik Sense Saasにおいて発生した以下の事象の解決策についてご紹介したいと思います。
<発生事象>
Qlik Sense SaasでGoogle Driveからファイルをロードする際にファイルパスを指定
したところ、フォルダ名にワイルドカード(*)が使用できない。
Qlik Sense Saas環境のアプリへ、Googleドライブにある[フォルダA]内のサブフォルダのうち、
以下の2つの条件を満たすファイルをロードします。(階層は以下画像参照)
①フォルダ名が[list]から始まるフォルダ内のファイル
( [list]がつくフォルダの数は流動的です)
②ファイル名の先頭に「プレフィックス」が付き、かつ、拡張子が「.xlsx」のファイル
Qlik Sense Saas環境でGoogle Driveからファイルをロードする際のパスの指定方法として、
以下の2つがあります。
①フォルダIDを記入して該当フォルダのファイルをすべて取り込む
・From [lib://スペース名:接続名/フォルダID(or root)]
②フォルダIDとファイル名までを指定して特定のファイルのみを取り込む
・From [lib://スペース名:接続名/フォルダID(or root)/ファイル名]
Google Driveからファイルをロードする場合はフォルダ名が使用できないため、フォルダIDを
記入する必要があります。
また、対象のフォルダIDは「ファイルが配置されているフォルダのID」を使用しなければ
なりません。(フォルダの階層構造の表現ができないため)
Google Driveとスプレッドシートコネクタを利用して、Google Driveのメタデータを取得することができます。
また、接続を作成すると下図のようにテーブルのデータを利用することも可能となります。
[ListFiles]テーブルには、ドライブのフォルダおよびファイルの各種データが入っています。
この中には、フォルダ/ファイル名(title)、親フォルダのid(parents_id)、データ形式(mimeType)
などの情報があり、これらを使用してフォルダやファイル名からidを特定することができます。
[ListFiles]テーブルより、以下の条件を満たすフォルダのIDを後述するコードを記載することで
取得が可能となります。
①id が「1WC*******」のフォルダ内のサブフォルダ
(セキュリティ保護の観点から一部マスクを行っています)
②名前が [list] から始まるフォルダ
LIB CONNECT TO 'Google_Drive';
Meta:
LOAD
title as [ListFiles.title],
id as [ListFiles.id]
where title like 'list*';
SELECT title,
id
FROM ListFiles
WITH PROPERTIES (
driveId='',
query='mimeType = "application/vnd.google-apps.folder" and parents in "1WC*******"'
);
※条件については [WITH PROPERTIES]内の [query= ] 部分で記載しています。
◆補足:各コードについて
・where title like 'list*':フォルダ名が[list]から始まるフォルダのデータを取得します。
・'mimeType = "application/vnd.google-apps.folder":フォルダのデータを取得します。
・parents in "フォルダID":指定フォルダ内のフォルダ/ファイルのデータを取得します。
上記コードを実行することでフォルダIDが取得できるため、各フォルダ内を検索してファイル名が
「プレフィックス」から始まる[.xlsx]ファイルを取得することで、最初に記載した前提条件を実現
することができるようになります。
今回ご紹介した id や title の他にも、所有者/ファイルサイズなど色々なデータが利用できるため、
ご自身のGoogle Drive利用状況をQlik Senseで可視化し、管理/活用することも可能ですので
試してみてはいかがでしょうか。
<参考リンク>
◆ワイルドカード「*」が使えない!?Qlik Sense SaaSでデータを
まとめて取り込む方法(アシストより)
◆Google Drive & Spreadsheets(Qlik Helpより)