Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
snumric7
Contributor III
Contributor III

Как сделать сделать сквозную нумерация с прерыванием по полю в load

Подскажите пожалуйста.

Как пронумеровать на этапе загрузки записи.

Например

Load *, RowNo() as [Номер строки] ....

дает просто сквозную нумерацию, а нужна с отдельной по филиалу.

типа как в oracle

row_number() OVER (PARTITION BY filial ORDER BY ......) asc

1 Solution

Accepted Solutions
Sergey_Polekhin
Employee
Employee

Если количество записей существенное (от нескольких млн.) и хочется, чтобы "не тормозило", то про циклы лучше забывать, как и про любые операции ветвления, влияющие на последовательность исполнения команд.

Подобные по-определению "медленные конструкции" ветвления лучше заменять табличными операциями. Табличные операции работают на порядки быстрее.

Итого, если список записей приходящий в оператор Load является сгруппированным по филиалам, то разметка легко делается путем сравнения значения филиала текущей записи со значением филиала из предыдущей записи.

Пример см. ниже. Поле RowIDbyBranch - искомое. Поле RowID - оставил для того, чтобы можно было отследить первоначальный порядок записей.

Load

    RowNo() as RowID,

    If( IsNull( Peek(RowIDbyBranch)) or BranchName <> Peek(BranchName), 1, RangeSum( Peek(RowIDbyBranch), 1))

          as RowIDbyBranch,

    BranchName,

    BranchData;

Load * Inline [

BranchName, BranchData

A, 10

A, 11

A, 9

B, 21

B, 22

B, 23

B, 24

B, 25

C, 33

C, 32

C, 31

C, 30

];

Результат - на картинке ниже:

Pict1.png

View solution in original post

4 Replies
Zhandos_Shotan
Partner - Creator II
Partner - Creator II

Как-то так (возможно не лучший вариант, первое что пришло в голову):

Tab0:

load

     *

from TABLE;

For Each varFilial in FieldValueList('Filial')

TAB:

load

*,

'$(varFilial)' & '-' & RecNo() as SubFilialID

resident Tab0

where Filial='$(varFilial)';

NEXT varFilial;

drop Table Tab0;


https://help.qlik.com/ru-RU/qlikview/November2017/Subsystems/Client/Content/Scripting/ScriptControlS...


Не забудь пометить если помогло )


Sergey_Polekhin
Employee
Employee

Если количество записей существенное (от нескольких млн.) и хочется, чтобы "не тормозило", то про циклы лучше забывать, как и про любые операции ветвления, влияющие на последовательность исполнения команд.

Подобные по-определению "медленные конструкции" ветвления лучше заменять табличными операциями. Табличные операции работают на порядки быстрее.

Итого, если список записей приходящий в оператор Load является сгруппированным по филиалам, то разметка легко делается путем сравнения значения филиала текущей записи со значением филиала из предыдущей записи.

Пример см. ниже. Поле RowIDbyBranch - искомое. Поле RowID - оставил для того, чтобы можно было отследить первоначальный порядок записей.

Load

    RowNo() as RowID,

    If( IsNull( Peek(RowIDbyBranch)) or BranchName <> Peek(BranchName), 1, RangeSum( Peek(RowIDbyBranch), 1))

          as RowIDbyBranch,

    BranchName,

    BranchData;

Load * Inline [

BranchName, BranchData

A, 10

A, 11

A, 9

B, 21

B, 22

B, 23

B, 24

B, 25

C, 33

C, 32

C, 31

C, 30

];

Результат - на картинке ниже:

Pict1.png

snumric7
Contributor III
Contributor III
Author

в конце load обязательно должно быть

order by BranchName

Sergey_Polekhin
Employee
Employee

Выше в описании указано "Итого, если список записей приходящий в оператор Load является сгруппированным по филиалам,"