Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
tsuyoshi
Partner - Creator
Partner - Creator

特定の文字列抽出のやり方について

 

 

お世話になります。最近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画面からでも構いません。お手数ですが、お時間あるときご教示お願い致します。

 

 

1 Solution

Accepted Solutions
kentaroWakamatsu
Creator II
Creator II

下記のように、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が抜き出されているのが確認可能です。

View solution in original post

3 Replies
kentaroWakamatsu
Creator II
Creator II

下記のように、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が抜き出されているのが確認可能です。

tsuyoshi
Partner - Creator
Partner - Creator
Author

すごい!有難うございます。

皆さんには普通なのかも知れませんが、こういう発想が全然出てきません。
subfieldは自分もよく使っていましたが、明示的に位置指定した「1つ」しか抜き出せないと思っていました(汗)

目から鱗です。有難うございました。

kentaroWakamatsu
Creator II
Creator II

上記Subfieldの使い方は、ロードスクリプト内のみ有効ですのでご注意下さい。

通常のドキュメント内のチャートで使用する際は、位置情報を省くと、一つ目だけが返ってきます。