Skip to main content
Announcements
Accelerate Your Success: Fuel your data and AI journey with the right services, delivered by our experts. Learn More
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

【ロード】Group By時のHaving句についてです。

はじめましてdon donと申します。

Qlikview初心者ですがよろしくお願いします。

ロード時にGroup Byをした上で条件選択がしたく、Having等を使いたいのですがうまくいきません。

ヘルプにはHaving句がGroup By時には利用できるようなことが書いてあるかと思うのですが。

恐れ入りますがよろしくお願い申し上げます。

don don

1 Solution

Accepted Solutions
Not applicable
Author

QlikView の LOAD Script で集合関数を使った絞込を行う場合、preceding load を記載する格好になります。

例えば、社員名と売上実績の2列で構成される、営業の売上実績のファクトテーブルをエクセルから読み込むことを想定します。

同テーブルから、合計で1,000を超える実績を上げた営業だけに絞り込んで取り込む場合には、下記のようなLOAD Scriptを記載する格好となります。

売上実績:

LOAD *

where 売上>=1000;

LOAD 社員名,

    sum(売上) as 売上

FROM

売上成績.xlsx

(ooxml, embedded labels, table is 成績)

group by 社員名;

上記の中で「LOAD * Where 売上>=1000」がpreceding load の記載です。

記載の順序に少し違和感があるかも知れませんが、QlikViewの中での記載は上記のようになります。


英語の映像にはなりますが、You tubeに分かり易い説明が共有されているので、よろしければ下記もご参考になさってください。

The Having Clause in QlikView - YouTube

View solution in original post

6 Replies
hka
Employee
Employee

具体的にどのようなスクリプトを記述されているのですか?

Not applicable
Author

QlikView の LOAD Script で集合関数を使った絞込を行う場合、preceding load を記載する格好になります。

例えば、社員名と売上実績の2列で構成される、営業の売上実績のファクトテーブルをエクセルから読み込むことを想定します。

同テーブルから、合計で1,000を超える実績を上げた営業だけに絞り込んで取り込む場合には、下記のようなLOAD Scriptを記載する格好となります。

売上実績:

LOAD *

where 売上>=1000;

LOAD 社員名,

    sum(売上) as 売上

FROM

売上成績.xlsx

(ooxml, embedded labels, table is 成績)

group by 社員名;

上記の中で「LOAD * Where 売上>=1000」がpreceding load の記載です。

記載の順序に少し違和感があるかも知れませんが、QlikViewの中での記載は上記のようになります。


英語の映像にはなりますが、You tubeに分かり易い説明が共有されているので、よろしければ下記もご参考になさってください。

The Having Clause in QlikView - YouTube

Not applicable
Author

Hideki Kawahata

ご返信ありがとうございました。

具体的には

テーブル:

LOAD *

FROM

●●

(txt, codepage is 932, embedded labels, delimiter is ',', msq);

集約テーブル:

LOAD code,

  Count(codel) as codeCount

Resident

table

Group By code;

を記述しました。

例えばcodeが5個以上のレコードのみを抽出する際に、集約テーブルで5以上のcodeCountで絞りたいのですが、うまくいきませんでした。

Not applicable
Author

jfy


ご返信ありがとうございました。

無事できました!!

大変困っていたので助かりました。

■変更前

テーブル:

LOAD *

FROM

●●

(txt, codepage is 932, embedded labels, delimiter is ',', msq);

集約テーブル:

LOAD code,

  Count(codel) as codeCount

Resident

table

Group By code;

■変更後

テーブル:

LOAD *

Where codeCount = 6;

LOAD code,

  Count(codel) as codeCount

FROM

●●

(txt, codepage is 932, embedded labels, delimiter is ',', msq)

Group By code;

と変更し、無事できました。

恐縮ですが、本件についてもう一点ご教示いただけませんでしょうか。

上記の変更後の記述において、

テーブル:

LOAD *

Where codeCount = 6;

LOAD *,

  Count(codel) as codeCount

FROM

●●

(txt, codepage is 932, embedded labels, delimiter is ',', msq)

Group By code;

と、ロード文にアスタリスクを用いるとなぜかロードに失敗します。

本件だけではなく、joinやkeepにおいてもアスタリスクが使えない時があるのですが、ロード文における制約があるのでしょうか。

恐れ入りますが何卒よろしくお願い申し上げます。

Not applicable
Author

※注記

追加の質問に関しては、明確な答えを返すことが出来そうにありません。

多少私の個人的な考えが含まれることをご了承願います。

はじめに、エラーメッセージの内容は「Unknown Error」でしょうか。

処理の内容的には、なぜエラーが起きているのか、理論的に説明がつきづらいのかもしれませんが、アプリケーションの仕様的な理由ではないかと思います。

なお、Preceding Loadの内部処理に関して、分かり易い説明がされているサイトを見つけたので、こちらを是非ご確認ください。

下記の説明の中でも、Preceding loadの記載の中で、順番的に先に処理される処理行に関しては、フィールド名を明示しています。

http://community.qlik.com/blogs/qlikviewdesignblog/2013/03/04/preceding-load#start=25

今回の件は当てはまらないとは思いますが、「項目名はテーブル内で固有のものでなければなりません。」というエラーの場合は、同じ項目名を2度用いようとしている時です。

単純な間違いではありますが、しばしば起き得るものではあります。

Not applicable
Author

Junya Fujiyoshi


ご返信ありがとうございました。

また、答えにくい質問にもかかわらずお答え頂き大変感謝いたしております。

ご指摘の通り、Unknown Errorでした。

一度整理し、今まで以上に使いこなせるようにやってみます!

色々ありがとうございました。

今後ともよろしくお願い申し上げます。