Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
お世話になります。最近QlikViewを触る機会が増えてきたので、またテクニックを教えて頂きたくお願いします。下記のような監査ログなのですが、IDをどんどん抽出して別ファイルを作りたいのです。IDの定義は Yから始まる6桁の文字列(英数字)です。必ず6桁必要で、空白区切りで横に羅列されている場合もあります。それらをどんどんサーチして引き抜き、別ファイルにしたいのですが、どのような関数で可能でしょうか。TextBetween? subfield?を使うなど考えてみたのですが横方向にどうやって順次抜き出していくのか、さっぱりです。横方向にいくつ並んでいるかは決まっていません。
監査ログ(例)
Search : Yas02q Yas0p6 Yas0yg Yas0yo Yas10p Yas13p Yas13t Yas14x Yas162 Document\YB136
Search : * Document\YB136
Search : Yid02t
Clear AYY
Search : Yi
サンプルXLSも下記に添付しました。ロードスクリプト内の処理でもチャート?などのQV画面からでも構いません。お手数ですが、お時間あるときご教示お願い致します。
下記のように、SubField関数を利用してスペース単位でデータを分割し、その後’6桁'と'左がY'という2種類の条件で絞り込めば可能です。
TEMP:
LOAD SubField(AU_Message,' ') as Id
// ,RecNo() as レコードNo //テスト用に用意していますが、確認後削除して下さい
FROM
AUDIT.xlsx
(ooxml, embedded labels, table is Sheet1);
NoConcatenate
IdList:
LOAD Distinct Id
// ,レコードNo //テスト用に用意していますが、確認後削除して下さい
Resident TEMP
Where len(Id)=6
and left(Id,1)='Y';
DROP Table TEMP;
コメントアウトしている「 レコードNo」を有効にすると、該当レコード行内のIdが抜き出されているのが確認可能です。
下記のように、SubField関数を利用してスペース単位でデータを分割し、その後’6桁'と'左がY'という2種類の条件で絞り込めば可能です。
TEMP:
LOAD SubField(AU_Message,' ') as Id
// ,RecNo() as レコードNo //テスト用に用意していますが、確認後削除して下さい
FROM
AUDIT.xlsx
(ooxml, embedded labels, table is Sheet1);
NoConcatenate
IdList:
LOAD Distinct Id
// ,レコードNo //テスト用に用意していますが、確認後削除して下さい
Resident TEMP
Where len(Id)=6
and left(Id,1)='Y';
DROP Table TEMP;
コメントアウトしている「 レコードNo」を有効にすると、該当レコード行内のIdが抜き出されているのが確認可能です。
すごい!有難うございます。
皆さんには普通なのかも知れませんが、こういう発想が全然出てきません。
subfieldは自分もよく使っていましたが、明示的に位置指定した「1つ」しか抜き出せないと思っていました(汗)
目から鱗です。有難うございました。
上記Subfieldの使い方は、ロードスクリプト内のみ有効ですのでご注意下さい。
通常のドキュメント内のチャートで使用する際は、位置情報を省くと、一つ目だけが返ってきます。