Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: 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の方法はスクリプトでの対応で、ソートタブでやる方法と理論的には同じになります。