Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

ソート順番

お世話になります.QlikView初心者です。

テーブルボックスオブジェクトの文字列のソートの結果について質問です。

20バイトの文字列属性の列(名前をコードとします)が下の順番でソートされます。

プロパティのソートタブでコードを一番上に配置して、テキストA - > Zで指定しています。

コード

0101999            1

0101999            3

010111960          1

010101005053       1

いずれも、右端の文字1 3 1 1が20バイト目です。間には半角スペースが

入っています。(等幅フォントでないので、位置がそろって見えないです)


希望する並び順は、左から判断してほしいのです。

左の文字から順に判断して

010101005053       1

010111960          1

0101999            1

0101999            3

上記の様に並んでほしいのですが、どのように指定すればよいのでしょうか?


左端から1文字ずつ判断するのが標準の考え方だと思っていました。

間に入っている空白の扱いも気になります。

よろしくお願いします。

1 Solution

Accepted Solutions
el_aprendiz111
Specialist
Specialist

Hi Koichi

TMP:
LOAD Text(código) AS código, SubField(código,' ',1) AS Order;
LOAD * Inline
[
código
0101999 1
0101999 3
010111960 1
010101005053 1
]
;

NoConcatenate
SUMARY:
LOAD * Resident TMP
Order BY Order desc
;

DROP Field Order;
DROP Table TMP;
EXIT Script;

View solution in original post

7 Replies
el_aprendiz111
Specialist
Specialist

Hi Koichi

TMP:
LOAD Text(código) AS código, SubField(código,' ',1) AS Order;
LOAD * Inline
[
código
0101999 1
0101999 3
010111960 1
010101005053 1
]
;

NoConcatenate
SUMARY:
LOAD * Resident TMP
Order BY Order desc
;

DROP Field Order;
DROP Table TMP;
EXIT Script;

Not applicable
Author

fer fer 様
返信ありがとうございます。
日本語で失礼します。


早速やってみました。

código
0101999 1
0101999 3
010111960 1
010101005053 1
の結果が得られました。質問の時と結果は変わりませんでした。

fer fer 様の書き込みをそのままコピー&ペーストして
実行したのですが...
なにか指定がおかしかったのでしょうか。

左から順に比較すると
código
010101005053 1
010111960 1
0101999 1
0101999 3
となってほしかったです。

Excelに出力して、código 昇順 でExcel上で並べ替えると
希望の並び順になるので、この方法での運用を検討してみます。

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

hka
Employee
Employee

プロパティのソートタブで数式にチェックを入れて

 text(列)

と入力して昇順にすれば対応できます。

Not applicable
Author

Hideki Kawahata 様
返信ありがとうございます。
教えていただいたとおり実行しました。結果は

コード
0101999 1
0101999 3
010111960 1
010101005053 1

となりました。

ソートタブで、数式 のみにチェックをつけて

式は Text(コード) で、昇順指定です。


ロードスクリプトは

TMP:

LOAD * Inline

[

コード

0101999 1

0101999 3

010111960 1

010101005053 1

];

です。一度、テープルボックスを削除してからload → テーブルボックス作成

を行いました。作成直後の表示順番と、

ソートタブに数式を設定した後の表示順番が変わりませんでした。

QlikViewバージョンは

12.0.20000.0 です。

ちなみにスクリプトを

[

コード

010101005053 1

010111960 1

0101999 1

0101999 3

];

として、データの記述順を変えて実行すると、

作成直後(ロードしただけですべてデフォルト)は

コード

0101999 1

0101999 3

010111960 1

010101005053 1

の順番(ソートタブは テキスト A->Z でした)でしたが、

ソートタブを数式のみ Text(コード) 昇順 で指定すると

コード

010101005053 1

010111960 1

0101999 1

0101999 3

となり、希望の順番になりました。

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

私の設定がどこかおかしいのでしょうか?

hka
Employee
Employee

データの前提条件は20バイトではないのでしょうか?

回答は最初の質問スレッドのデータの前提条件を基にしています。

ご質問に書かれたスクリプトは20バイトになっていないのでうまく行ってないかと思います。

Not applicable
Author

ご指摘いただきましたとおり先ほどのテストは20バイトではありませんでした。
大変失礼いたしました。

今回、20バイトで再度実行してみました。

結果は以下の通りでした。

コード                             len(コード)    mid(コード,20,1)

0101999            1            20                  1

0101999            3            20                  3

010111960          1          20                  1

010101005053       1       20                  1

文字の長さと、20バイト目の文字を追加で加えてみた結果です。

ロードスクリプトは

TMP:

LOAD

* ,

len(コード),

mid(コード,20,1)

Inline

[

コード

0101999            1

0101999            3

010111960          1

010101005053       1

];

です。

QlikView初心者なので解りませんが、

・インストールのやり方

・基本的な初期設定

などがおかしいのかもしれません。

もう少し、自分で調べてみます。

丁寧なご回答ありがとうございました。

hka
Employee
Employee

ソートタブの数式のところをferの指摘しているtext(項目)からsubfield(項目,' ',1)にして降順にすれば

今回のデータでは対応可能です。

最初のferの指摘が正しかったですね、すいません。

ferの方法はスクリプトでの対応で、ソートタブでやる方法と理論的には同じになります。