Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA9 Опримизация кода из FAQ / 4 сообщений из 4, страница 1 из 1
22.07.2005, 12:58
    #33180001
Юрий Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9 Опримизация кода из FAQ
SYBASE ASA9

Привожу код процедуры для ABC рассчёта. Код рассчёта нарастаюшим итогом
через временную таблицу подсмотрел в FAQ. Групировка продаж по коду запчасти за год выполняется за 0,01 сек, а вот рассчёт нарастающим итогом во временной таблице ( update всего 2500 записей ) занимает 12 сек.
Может можно его пооптимальнее сделать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
ALTER PROCEDURE "DBA"."ABC"( start_date DATE  )

BEGIN
	
declare total double;

// Временная таблица для рассчёта ABC 
create table #ABC(number integer, sum double,procent double, procrost double, gr varchar( 10 ));

//  Выборка данных из истории продаж table-salelist, групировка по коду товара , сортировка по сумме продажи
insert into #ABC(number, sum)  select number, sum(price*partkol) as s // number-код товара ,partkol -количество ,price - цена
    from salelist where saleno>(select first saleno from sales where saledate>start_date order by saleno)/*начальный период рассчета*/ 
    and  state= 0  group by number order by s  desc;

// общая сумма продажи
set total= (select  sum(sum) from #ABC) ; 

// рассчёт % доли каждой позиции в общей сумме продажи 
update #ABC set procent=sum/total* 100 . 0 ; 

// рассчёт доли нарастающим итогом
update #ABC a set procrost = (select sum (b.procent) from #ABC b where b.procent>=a.procent);

// Группы ABC по условию A=70% оборота, В=20% оборота и С=10% оставшихся.
update #ABC set gr='A' where procrost < 70 . 0 ;
update #ABC set gr='B' where procrost >= 70 . 0  and procrost < 90 . 0 ;
update #ABC set gr='C' where procrost >= 90 . 0 ;

// Возврат диференцированого по методу ABC списка
select number,gr from #ABC
END
...
Рейтинг: 0 / 0
22.07.2005, 13:05
    #33180017
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9 Опримизация кода из FAQ
Для ASA9 все это по идее можно сделать одним запросом, с использованием OLAP Window функций. Прочитать про них можно в BOL.
...
Рейтинг: 0 / 0
22.07.2005, 14:19
    #33180192
Юрий Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9 Опримизация кода из FAQ
ASCRUS ! - вот огромное спасибо Вам. OLAP - вещь. Тот же расчет но с
использованием PERCENT_RANK () выполняется за 0.25 сек для списка из 75000 продаж!
...
Рейтинг: 0 / 0
16.08.2005, 09:22
    #33216793
Марсель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA9 Опримизация кода из FAQ
Привет
Интересно посмотреть на выборку по ABC с использованием PERCENT_RANK()
дай примерчик пожалуйста ;)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA9 Опримизация кода из FAQ / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]