Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Индексированные представления для регистра (число прочтений - 3708 )
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Индексированные представления для регистра
25. Июня 2008 :: 06:50
Печать  
Улыбка проблема слега нестандартная - даже можно сказать небольшое исследование

есть идея создать индексированную вьюху на SQL Server 2000
исходный запрос

Код
Выбрать все
select
   reg.sp12561 as id_nom, max(DATE_TIME_IDDOC) as DTI
from
   ra15247 as reg
GROUP BY
  reg.sp12561
 



но MAX индексированная вьюха не поддерживает, а очень хочется  Улыбка

то есть на выходе необходимо получить материализованное представление  типа

Код
Выбрать все
CREATE VIEW last_dti_of_nom WITH SCHEMABINDING as
select
   reg.sp12561 as id_nom, max(DATE_TIME_IDDOC) as DTI
from
    dbo.ra15247 as reg
GROUP BY
  reg.sp12561

GO
CREATE UNIQUE CLUSTERED INDEX ix_id
ON dbo.last_dti_of_nom(id)
ON
 [PRIMARY]
 



никто не исследовал вопрос замены функции MAX на аналогичную  Смущённый
« Последняя редакция: 25. Июня 2008 :: 08:06 - lustin »  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #1 - 25. Июня 2008 :: 07:03
Печать  
забыл сказать зачем всё это

в таблице ra15247 -  12 миллионов записей
создав такую вьюху нам не придется по большому количеству номенклатуры перебирать все записи

в общем случае пользователь может захотеть получить последнее DTI по ВСЁЙ номенклатуре
а подобный запрос с группировкой выполняется около 3 с половиной минут  Смущённый
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #2 - 25. Июня 2008 :: 07:13
Печать  
select top 1 .... from ... order by ?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #3 - 25. Июня 2008 :: 07:28
Печать  
А отбор движений по sp12561 не помогает?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #4 - 25. Июня 2008 :: 07:30
Печать  
berezdetsky писал(а) 25. Июня 2008 :: 07:28:
А быстрая обработка движений по sp12561 не помогает?


там как раз стоит Смущённый
забыл сказать что это регистр оборотов
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #5 - 25. Июня 2008 :: 07:41
Печать  
Можно сложить последние DATE_TIME_IDDOC где-то в отдельном поле/таблице. Или объяснить пользователю, что он не хочет получать последнее DTI по всей номенклатуре.  Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #6 - 25. Июня 2008 :: 08:05
Печать  
berezdetsky писал(а) 25. Июня 2008 :: 07:41:
Можно сложить последние DATE_TIME_IDDOC где-то в отдельном поле/таблице. Или объяснить пользователю, что он не хочет получать последнее DTI по всей номенклатуре.  Улыбка


скорее всего так и придется сделать
эх а идея была хорошая
но я тут поизучал http://www.olap.ru/desc/microsoft/index_view.asp
Цитата:
В SQL Server 2000 на синтаксис, применяемый при создании определений оператором CREATE VIEW, наложены и другие ограничения. Так, определение представления не должно содержать:

   * оборот ТОР;
   * ссылки на столбцы, относящиеся к типам text, ntext, image;
   * оборот DISTINCT;
   * функции MIN, MAX, COUNT(*), COUNT(<выражение>), STDEV, VARIANCE и AVG;
   * оператор SUM для суммирования выражений, допускающих неопределенные значения;
   * ссылки на производные таблицы;
   * функцию ROWSET;
   * ссылку на другое представление (ссылаться разрешено только на базовые таблицы);
   * оператор UNION;
   * подзапросы, внешние соединения (OUTER) и соединения таблицы с самой собой;
   * полнотекстовые предикаты (CONTAIN и FREETEXT)
   * команды COMPUTE и COMPUTE BY.

уж очень велики ограничения  Печаль

так что последую совету berezdetsky  Улыбка
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: заменить MAX на другую функцию
Ответ #7 - 25. Июня 2008 :: 08:33
Печать  
lustin писал(а) 25. Июня 2008 :: 07:03:
забыл сказать зачем всё это

в таблице ra15247 -  12 миллионов записей
создав такую вьюху нам не придется по большому количеству номенклатуры перебирать все записи

в общем случае пользователь может захотеть получить последнее DTI по ВСЁЙ номенклатуре
а подобный запрос с группировкой выполняется около 3 с половиной минут  Смущённый


Подзапрос по rg - определяешь товар и его последний период .
Потом левое соединение к ra по товару и дата в диапазоне вычисленного последнего периода.
По товару поставить индекс - отбор движений и можно отбор итогов.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #8 - 25. Июня 2008 :: 08:53
Печать  
kiruha писал(а) 25. Июня 2008 :: 08:33:
lustin писал(а) 25. Июня 2008 :: 07:03:
забыл сказать зачем всё это

в таблице ra15247 -  12 миллионов записей
создав такую вьюху нам не придется по большому количеству номенклатуры перебирать все записи

в общем случае пользователь может захотеть получить последнее DTI по ВСЁЙ номенклатуре
а подобный запрос с группировкой выполняется около 3 с половиной минут  Смущённый


Подзапрос по rg - определяешь товар и его последний период .
Потом левое соединение к ra по товару и дата в диапазоне вычисленного последнего периода.
По товару поставить индекс - отбор движений и можно отбор итогов.



это было бы самое правильное и быстрое
но кто-то (не будем показывать пальцем) - сделал этот регистр регистром оборотов -  и записей в RG нету  Смущённый

я вот сейчас отдельно думаю - а на что повилияет смена типа регистра с оборотов на остатки  Подмигивание
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: заменить MAX на другую функцию
Ответ #9 - 25. Июня 2008 :: 08:58
Печать  
lustin писал(а) 25. Июня 2008 :: 08:53:
kiruha писал(а) 25. Июня 2008 :: 08:33:
lustin писал(а) 25. Июня 2008 :: 07:03:
забыл сказать зачем всё это

в таблице ra15247 -  12 миллионов записей
создав такую вьюху нам не придется по большому количеству номенклатуры перебирать все записи

в общем случае пользователь может захотеть получить последнее DTI по ВСЁЙ номенклатуре
а подобный запрос с группировкой выполняется около 3 с половиной минут  Смущённый


Подзапрос по rg - определяешь товар и его последний период .
Потом левое соединение к ra по товару и дата в диапазоне вычисленного последнего периода.
По товару поставить индекс - отбор движений и можно отбор итогов.



это было бы самое правильное и быстрое
но кто-то (не будем показывать пальцем) - сделал этот регистр регистром оборотов -  и записей в RG нету  Смущённый

я вот сейчас отдельно думаю - а на что повилияет смена типа регистра с оборотов на остатки  Подмигивание


Как это нету???
Должны быть итоговые обороты за месяц(или какая там периодичность проставлена)
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #10 - 25. Июня 2008 :: 09:24
Печать  
kiruha писал(а) 25. Июня 2008 :: 08:58:
Как это нету???
Должны быть итоговые обороты за месяц(или какая там периодичность проставлена)


круто  Круглые глаза век живи как говорится
только что глянул в конфигураторе структуру и настройки регистра повнимательней

Измерения Товар, Подразделения
Ресурсы Цена, Поставщик

На Товаре стоит отбор движений, а вот отбор итогов не стоит (галка не активна)

если поставить Товар вторым измерением - тогда можно поставить галку отбор итогов

таким образом сейчас в таблице итогов 0 (ноль) записей

щас попробую поставить отбор итогов - спасибо Кирилл  Очень довольный
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: заменить MAX на другую функцию
Ответ #11 - 25. Июня 2008 :: 09:36
Печать  
lustin писал(а) 25. Июня 2008 :: 09:24:
kiruha писал(а) 25. Июня 2008 :: 08:58:
Как это нету???
Должны быть итоговые обороты за месяц(или какая там периодичность проставлена)


круто  Круглые глаза век живи как говорится
только что глянул в конфигураторе структуру и настройки регистра повнимательней

Измерения Товар, Подразделения
Ресурсы Цена, Поставщик

На Товаре стоит отбор движений, а вот отбор итогов не стоит (галка не активна)

если поставить Товар вторым измерением - тогда можно поставить галку отбор итогов

таким образом сейчас в таблице итогов 0 (ноль) записей

щас попробую поставить отбор итогов - спасибо Кирилл  Очень довольный


У меня нет отбора итогов. Регистр Продажи как в типовой.
Записи есть.
Не понял также как поставщик может быть ресурсом - числовой код?
Может это реквизиты, а ресурсов вообще нет - вот и пустая таблица.

P.S. Галка не стоит у первого измерения т.к. по умолчанию по нему уже сформирован индекс -
второй раз его создавать нет смысла
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: заменить MAX на другую функцию
Ответ #12 - 25. Июня 2008 :: 09:38
Печать  
kiruha писал(а) 25. Июня 2008 :: 09:36:
У меня нет отбора итогов. Регистр Продажи как в типовой.
Записи есть.
Не понял также как поставщик может быть ресурсом - числовой код?
Может это реквизиты, а ресурсов вообще нет - вот и пустая таблица.


точно реквизиты - извини ввёл в заблуждение
я хренею с Асторовцев  Ужас
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать