Qlik Community

Japan

Announcements
QlikWorld 2022, LIVE in Denver CO., May 16-19, 2022. REGISTER NOW TO RECEIVE EARLY BIRD PRICING
cancel
Showing results for 
Search instead for 
Did you mean: 
tsuyoshi
Partner
Partner

wildmatchについて

いつもお世話になります

ロードスクリプトでデータ処理をしています。

コメント内に「特定のキーワード」が含まれる行だけを選別したいのですが

キーワードがそもそも1万個もあって

where コメント like '*キーワード*' で書いていられる数ではありません

wildmach(コメントフィールド,'*キーワード1*','*キーワード2*','*キーワード3*')での判別も

キーワードを横に書かないといけないようです

完全一致ならapplymap や inner joinなどで絞れるのですが

ワイルドカードでの一致の場合、みなさんはどのようになさってるでしょうか?

1 Solution

Accepted Solutions
tsuyoshi
Partner
Partner
Author

みなさん、ありがとうございます

自己レスです

(1)以下のキーワードテーブルをMapping LOAD

MAP_キーワード集: という名称で

キーワード項目,
'これはキーワードです’ as ヒットフラグ


(2)比較したいテーブルをロード

この時、MapSubString('MAP_キーワード集',比較部分) as 比較部分2,

とすると、キーワードがヒットした箇所が”これはキーワードです”という文字列で置換される

キーワードの大文字小文字も見てくれるので便利でした


(3)上記を再ロードするときに

where 比較部分2 like '*これはキーワードです*'

で絞れば、キーワードが含まれる文章のみを取り出すことができました。

本当は 素直に likeで キーワードを羅列出来れば、ロードスクリプトが認識しやすくて
保守性もいいんですが、likeの条件が100個くらいを超えたあたりで、正しく動かなくなる
というか無視されるようでした・・・・

View solution in original post

4 Replies
Not applicable

このような感じでいかがでしょうか?

CriteriaTable:

LOAD * INLINE [

    Criteria

    *a*

    *f*

];

TextTable:

LOAD * INLINE [

    Text

    abc

    dhejk

    sjkdi

    hwujk

    oiuep

    nufjk

];

Outer Join LOAD Criteria Resident Criteria;

Result:

LOAD Text as SearchedText Resident Text Where Text like Criteria;

Not applicable

キーワードのテーブルを読み込んで、その内容をfor文で回して文字列変数に組み込んで

leikeの文のところかwildmatchに入れれば良いのでは?

例えば、

LOAD キーワード FROM キーワードテーブル;

for i=0 to fieldnumber(キーワード,キーワードテーブル)

let Keywaord = Keyword & chr(39) &'*' & キーワード & '*' & chr(39);

next i;

LOAD A FROM table where wildmatch($(Keyword));

頭の中で考えて、例文を記述したので書式や関数が間違ってるかもしれませんが

大体言おうとしていることは理解していただけるのでは?

tsuyoshi
Partner
Partner
Author

アドバイスありがとうございます。確かにこのサンプルで出来ますね・・・ 何故出来るのか、ちょっと不思議ですが、すごいテクニックですね・・・・

ただ今回の場合、キーワードx元のデータが10兆レコードなんていう馬鹿でかいものになってしまい、outer join出来ませんでした。せっかくなのにすみません

tsuyoshi
Partner
Partner
Author

みなさん、ありがとうございます

自己レスです

(1)以下のキーワードテーブルをMapping LOAD

MAP_キーワード集: という名称で

キーワード項目,
'これはキーワードです’ as ヒットフラグ


(2)比較したいテーブルをロード

この時、MapSubString('MAP_キーワード集',比較部分) as 比較部分2,

とすると、キーワードがヒットした箇所が”これはキーワードです”という文字列で置換される

キーワードの大文字小文字も見てくれるので便利でした


(3)上記を再ロードするときに

where 比較部分2 like '*これはキーワードです*'

で絞れば、キーワードが含まれる文章のみを取り出すことができました。

本当は 素直に likeで キーワードを羅列出来れば、ロードスクリプトが認識しやすくて
保守性もいいんですが、likeの条件が100個くらいを超えたあたりで、正しく動かなくなる
というか無視されるようでした・・・・

View solution in original post