Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
はじめましてdon donと申します。
Qlikview初心者ですがよろしくお願いします。
ロード時にGroup Byをした上で条件選択がしたく、Having等を使いたいのですがうまくいきません。
ヘルプにはHaving句がGroup By時には利用できるようなことが書いてあるかと思うのですが。
恐れ入りますがよろしくお願い申し上げます。
don don
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に分かり易い説明が共有されているので、よろしければ下記もご参考になさってください。
具体的にどのようなスクリプトを記述されているのですか?
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に分かり易い説明が共有されているので、よろしければ下記もご参考になさってください。
ご返信ありがとうございました。
具体的には
テーブル:
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で絞りたいのですが、うまくいきませんでした。
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においてもアスタリスクが使えない時があるのですが、ロード文における制約があるのでしょうか。
恐れ入りますが何卒よろしくお願い申し上げます。
※注記
追加の質問に関しては、明確な答えを返すことが出来そうにありません。
多少私の個人的な考えが含まれることをご了承願います。
はじめに、エラーメッセージの内容は「Unknown Error」でしょうか。
処理の内容的には、なぜエラーが起きているのか、理論的に説明がつきづらいのかもしれませんが、アプリケーションの仕様的な理由ではないかと思います。
なお、Preceding Loadの内部処理に関して、分かり易い説明がされているサイトを見つけたので、こちらを是非ご確認ください。
下記の説明の中でも、Preceding loadの記載の中で、順番的に先に処理される処理行に関しては、フィールド名を明示しています。
http://community.qlik.com/blogs/qlikviewdesignblog/2013/03/04/preceding-load#start=25
今回の件は当てはまらないとは思いますが、「項目名はテーブル内で固有のものでなければなりません。」というエラーの場合は、同じ項目名を2度用いようとしている時です。
単純な間違いではありますが、しばしば起き得るものではあります。
ご返信ありがとうございました。
また、答えにくい質問にもかかわらずお答え頂き大変感謝いたしております。
ご指摘の通り、Unknown Errorでした。
一度整理し、今まで以上に使いこなせるようにやってみます!
色々ありがとうございました。
今後ともよろしくお願い申し上げます。