Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 7 ОтправитьПечать
Очень популярная тема (более 25 ответов) Запросы для OLAP (число прочтений - 42673 )
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #15 - 28. Ноября 2006 :: 07:21
Печать  
JohnyDeath писал(а) 28. Ноября 2006 :: 06:37:
У меня есть вот такая мысля. Выгрузить результаты запроса с ИИФами, ДжОЙНАМИ по таблице движения регистра во временный файл

"По взрослому" так и делается. Эта промежуточная база называется DataMart (витрина данных).
Данные в витрину сливаются по ночам, процессинг кубов делается также по ночам.
При таком подходе можно агрегировать в одной базе данные из нескольких OLTP систем.
При переходе на новую OLTP-систему или при свертке баз данные в витрине сохраняются.
Если очень хочется брать данные из базы напрямую - сделай таблицу фактов в виде View.
З.Ы.: Для DBF базы Indexed View сделать не получится, а так как при процессинге куба запросов к таблице фактов выполняется множество, то будут потери производительности при построении куба.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #16 - 28. Ноября 2006 :: 07:23
Печать  
И почитай букварь прежде чем принимать решение как организовать OLAP-отчетность.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #17 - 28. Ноября 2006 :: 13:12
Печать  
steban писал(а) 28. Ноября 2006 :: 07:23:
И почитай букварь прежде чем принимать решение как организовать OLAP-отчетность.

Был я там: пока для меня этот сайт - дебри какие-то. думаю, что надо сначала книжку умную поситать, а потом уже туда...
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #18 - 28. Ноября 2006 :: 13:23
Печать  
А вообще анализ продаж я практически добил таким вот способом:
1. Создаём эленмент справочника "Контрагенты" с наименованием "<неопределён>":
Код
Выбрать все
	Спр = СоздатьОбъект("Справочник.Контрагенты");
	Если Спр.НайтиПоНаименованию("<неопределён>")=0 Тогда
		Спр.Новый();
		Спр.Наименование = "<неопределён>";
		Спр.ЮрФизЛицо = "<неопределён>";
		Спр.Записать();
		НеопрКонтр = Спр.ТекущийЭлемент();
	Иначе
		НеопрКонтр = Спр.ТекущийЭлемент();
	КонецЕсли;
	//получим его ИД и ИД его родителя
	МетаДата = СоздатьОбъект("MetaDataWork");
	НеопрИД = МетаДата.ЗначениеВСтрокуБД(НеопрКонтр);
	НеопрИДРодителя = МетаДата.ЗначениеВСтрокуБД(НеопрКонтр.Родитель);
	Сообщить("Неопр ИД = "+НеопрИД+", Неопр ИД родителя = "+НеопрИДРодителя);  




2. Подключаюсь по OLEDBData, выгружаю всё во временную табл. таким вот запросом:
Код
Выбрать все
	ТекстЗапроса="
	|	SELECT Фирмы.descr as Фирма,
	|		Пок.id as ПокИД, Пок.parentid as ПокРод, CAST(Пок.descr as Character(50)) as ПокИмя,
	|		CAST(IIF($Прод.АдресДоставки = '     0   ','<не выбран>',Адр.descr) as Character(50)) as АдрДост,
	|		IIF($Прод.Поставщик = '     0   ','"+НеопрИД+"',Пост.id) as ПостИД, IIF($Прод.Поставщик = '     0   ','"+НеопрИДРодителя+"',Пост.parentid) as ПостРод, IIF($Прод.Поставщик = '     0   ','<неопределён>',Пост.descr) as ПостИмя,
	|		Ном.id as НомИД,Ном.parentid as НомРод, CAST(Ном.descr as Character(50)) as НомИмя,
	|		IIF(Мен.id = '     0   ','"+НеопрИД_ФЛ+"',Мен.id) as МенИД, IIF(Мен.id = '     0   ','"+НеопрИДРодителя_ФЛ+"',Мен.parentid) as МенРод, IIF(Мен.id = '     0   ','<неопределён>',Мен.descr) as МенИмя,
	|		Прод.date as Дата1,Прод.date as Дата2,
	|		Прод.IDDOC as ДокИД, Прод.IDDOCDEF as ДокВид,
	|		$Прод.ПродСтоимость as ПрСт, $Прод.Себестоимость as Себ, $Прод.Количество as Кол
//	|		CAST($Прод.ПродСтоимость as NUMERIC(10,2)) as ПрСт, CAST($Прод.Себестоимость as NUMERIC(10,2)) as Себ, CAST($Прод.Количество as NUMERIC(10,2)) as Кол
	|	FROM $Регистр.Продажи AS Прод
	|	LEFT JOIN $Справочник.Фирмы AS Фирмы ON Фирмы.ID = $Прод.Фирма
	|	LEFT JOIN $Справочник.Контрагенты AS Пок ON Пок.ID = $Прод.Покупатель
	|	LEFT JOIN $Справочник.Контрагенты AS Пост ON Пост.ID = $Прод.Поставщик
	|	LEFT JOIN $Справочник.Номенклатура AS Ном ON Ном.ID = $Прод.Номенклатура
	|	LEFT JOIN $Справочник.АдресаДоставки AS Адр ON Адр.ID = $Прод.АдресДоставки
	|	LEFT JOIN $Справочник.Договоры AS Дог ON Дог.ID=$Прод.Договор
	|	LEFT JOIN $Справочник.ФизЛица AS Мен ON Мен.ID=$Дог.Менеджер
	| into table tolap" 




А потом уже для построение куба сую ему эту таблицу.
Т.о. решилась проблема пустых полей в таблице движения регистра!  

Степан, спасибо тебе огромное за помощь и  обработку!
« Последняя редакция: 28. Ноября 2006 :: 15:11 - JohnyDeath »  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #19 - 29. Ноября 2006 :: 09:40
Печать  
Степан, ты уж извини, но у меня к тебе опять вопросы.  Круглые глаза
Объясни, пожалуйста, технологию получения родителя. Чего-то не вкуриваю пока. В твоей обработке ИМЯ родителя откуда берётся и в какой момент?
Как сделать группировки у меня?  Смущённый
Как уже писалось выше, я выгружаю всё во временный файл tolap, а потом уже из него и формирую куб:

Код
Выбрать все
|INSERTINTO=INSERT INTO Продажи(
	|	[Фирма].[Фирма],
	|   [Покупатель].KEY,[Покупатель].PARENT,[Покупатель].NAME,
	|	[Торговые точки].[Торговые точки],
	|   [Поставщик].KEY,[Поставщик].PARENT,[Поставщик].NAME,
	|	[Номенклатура].KEY,[Номенклатура].PARENT,[Номенклатура].NAME,
	|	[Менеджер].KEY,[Менеджер].PARENT,[Менеджер].NAME,
	|	[Время по месяцам],[Время по неделям],
	|	[Документ].KEY, [Документ].NAME,
	|	Measures.[Продажа],Measures.[Себестоимость],Measures.[Количество])
	//*******************************************************************|
	|	SELECT tolap.Фирма,
//*******ИД покупателя, ИД родителя покупателя, Имя покупателя
	|		tolap.ПокИД, tolap.ПокРод, tolap.ПокИмя,
	|		tolap.АдрДост,
	|		tolap.ПостИД, tolap.ПостРод, tolap.ПостИмя,
	|		tolap.НомИД, tolap.НомРод, tolap.НомИмя,
	|		tolap.МенИД, tolap.МенРод, tolap.МенИмя,
	|		tolap.Дата1, tolap.Дата2,
	|		tolap.ДокИД, tolap.ДокВид,
	|		tolap.ПрСт, tolap.Себ, tolap.Кол
	|	FROM tolap" 



В кубе нет группировок, есть только отдельные элементы.
В общем помоги в очередной раз...
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #20 - 29. Ноября 2006 :: 10:06
Печать  
Ахринеть  Ужас
Зачем тебе в промежуточной таблице наименования измерений?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #21 - 29. Ноября 2006 :: 10:18
Печать  
Создай в справочниках измерений элементы, соответствующие пустым ссылкам ("неопределен", "не указан" и т.п.)
В промежуточную таблицу слей таблицу движений регистра с замененными пустыми ссылками.
Для наполнения куба используй тот-же запрос просто заменив в нем таблицу движений на твою таблицу.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #22 - 29. Ноября 2006 :: 13:15
Печать  
steban писал(а) 29. Ноября 2006 :: 10:06:
Ахринеть  Ужас
Зачем тебе в промежуточной таблице наименования измерений?

Мне почем-то казалось, что построение куба запросом из одной таблицы будет выполнятся быстрее, чем анологичное по четырём-пяти
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #23 - 29. Ноября 2006 :: 13:22
Печать  
steban писал(а) 29. Ноября 2006 :: 10:18:
Для наполнения куба используй тот-же запрос просто заменив в нем таблицу движений на твою таблицу.

Сейчас пишу так:
Код
Выбрать все
	ТекстМетаЗапроса="
	|	SELECT t.Фирма,
	|		Пок.id, Пок.parentid, Пок.descr,
	|		t.АдрДост,
	|		Пост.id, Пост.parentid, Пост.descr,
	|		Ном.id, Ном.parentid, Ном.descr,
	|		Мен.ID, Мен.parentid, Мен.descr,
	|		t.Дата1, t.Дата2,
	|		t.ДокИД, t.ДокВид,
	|		t.ПрСт, t.Себ, t.Кол
	|	WHERE
	|		(t.ПокИД  = Пок.id) AND
	|		(t.ПостИД = Пост.ID) AND
	|		(t.НомИД  = Ном.id) AND
	|		(t.МенИД  = Мен.id)
	|	FROM tolap as t,
	|		$Справочник.Контрагенты AS Пок,
	|		$Справочник.Контрагенты AS Пост,
	|		$Справочник.Номенклатура AS Ном,
	|		$Справочник.ФизЛица as Мен" 



Теперь он, непонятно для меня "почему", вообще не работает... Нерешительный
Ругается вот так:
Microsoft® OLE DB Provider for Analysis Services: Syntax error in column definition, near:  AND
           (t.НомИД  = Ном.id) AND
           (t.МенИД  = Мен.id)
     FROM tolap as t,
           sc172 AS Пок,
           sc172 AS Пост,
           sc84 AS Ном,
           sc503 as Мен

Я помню, что, если он проходит в QA, то не факт, что он пройдён здесь, но всё же проверил в QA - проходит...
Степан, взываю, помоги...   Плачущий
Уж близок конец!
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #24 - 29. Ноября 2006 :: 13:42
Печать  
полный текст в студию.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #25 - 29. Ноября 2006 :: 14:33
Печать  
     ТекстЗапроса="PROVIDER=MSOLAP.2;DATA SOURCE="+КаталогИБ()+"\Продажи.cub;SOURCE_DSN=trade;
     |
     |CREATECUBE=CREATE CUBE Продажи(
     |    DIMENSION [Фирма],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Фирма],
     |
     |    DIMENSION [Покупатель] DIMENSION_STRUCTURE PARENT_CHILD OPTIONS(UNIQUE_KEY,ALLOWSIBLINGSWITHSAMENAME,NOTRELATEDTOFACTTABLE),
     |    HIERARCHY [По группам],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Покупатель *] ROOT_MEMBER_IF ROOT_IF_PARENT_IS_BLANK_OR_SELF_OR_MISSING,
     |       HIERARCHY [Все],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Покупатель],
     |
     |       DIMENSION [Торговые точки],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Торговые точки],
     |
     |    DIMENSION [Поставщик] DIMENSION_STRUCTURE PARENT_CHILD OPTIONS(UNIQUE_KEY,ALLOWSIBLINGSWITHSAMENAME,NOTRELATEDTOFACTTABLE),
     |    HIERARCHY [По группам],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Поставщик *] ROOT_MEMBER_IF ROOT_IF_PARENT_IS_BLANK_OR_SELF_OR_MISSING,
     |       HIERARCHY [Все],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Поставщик],
     |
     |       DIMENSION [Номенклатура] DIMENSION_STRUCTURE PARENT_CHILD OPTIONS(UNIQUE_KEY,ALLOWSIBLINGSWITHSAMENAME,NOTRELATEDTOFACTTABLE),
     |       HIERARCHY [По группам],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Номенклатура *] ROOT_MEMBER_IF ROOT_IF_PARENT_IS_BLANK_OR_SELF_OR_MISSING,
     |       HIERARCHY [Вся],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Номенклатура],
     |
     |       DIMENSION [Менеджер] DIMENSION_STRUCTURE PARENT_CHILD OPTIONS(UNIQUE_KEY,ALLOWSIBLINGSWITHSAMENAME,NOTRELATEDTOFACTTABLE),
     |       HIERARCHY [По группам],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Менеджер *] ROOT_MEMBER_IF ROOT_IF_PARENT_IS_BLANK_OR_SELF_OR_MISSING,
     |       HIERARCHY [Все],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Менеджер],
     |
     |    DIMENSION [Время по месяцам] TYPE TIME,
     |        LEVEL [Все]  TYPE ALL,
     |        LEVEL [Год]  TYPE YEAR,
     |        LEVEL [Квартал]  TYPE QUARTER,
     |        LEVEL [Месяц]  TYPE MONTH,
     |        LEVEL [День]  TYPE DAY,
     |
     |    DIMENSION [Время по неделям] TYPE TIME,
     |        LEVEL [Все]  TYPE ALL,
     |        LEVEL [Год]  TYPE YEAR,
     |        LEVEL [Неделя]  TYPE WEEK,
     |        LEVEL [День]  TYPE DAY,
     |
     |    DIMENSION [Документ],
     |        LEVEL [Все] TYPE ALL,
     |        LEVEL [Документ],
     |
     |    MEASURE [Продажа]
     |        Function Sum
     |        Format '#.#',
     |
     |    MEASURE [Себестоимость]
     |        Function Sum
     |        Format '#.#',
     |
     |    MEASURE [Количество]
     |        Function Sum
     |        Format '#.#',
     |
     |      COMMAND (CREATE MEMBER [Продажи].[Measures].[Прибыль] AS '[Продажа]-[Себестоимость]'),
     |      COMMAND (CREATE MEMBER [Продажи].[Measures].[Прибыль %] AS '[Прибыль]/[Себестоимость]')
     |);
     |
     |INSERTINTO=INSERT INTO Продажи(
     |      [Фирма].[Фирма],
     |   [Покупатель].KEY,[Покупатель].PARENT,[Покупатель].NAME,
     |      [Торговые точки].[Торговые точки],
     |   [Поставщик].KEY,[Поставщик].PARENT,[Поставщик].NAME,
     |      [Номенклатура].KEY,[Номенклатура].PARENT,[Номенклатура].NAME,
     |      [Менеджер].KEY,[Менеджер].PARENT,[Менеджер].NAME,
     |      [Время по месяцам],[Время по неделям],
     |      [Документ].KEY, [Документ].NAME,
     |      Measures.[Продажа],Measures.[Себестоимость],Measures.[Количество])
     |";
                                      
     Если СоздатьВременнуюТаблицу()=0 Тогда
           Возврат;
     КонецЕсли;                     
     
     ТекстМетаЗапроса="
     |      SELECT t.Фирма,
     |            Пок.id, Пок.parentid, Пок.descr,
     |            t.АдрДост,         
     |            Пост.id, Пост.parentid, Пост.descr,
     |            Ном.id, Ном.parentid, Ном.descr,
     |            Мен.ID, Мен.parentid, Мен.descr,
     |            t.Дата1, t.Дата2,
     |            t.ДокИД, t.ДокВид,
     |            t.ПрСт, t.Себ, t.Кол
     |      WHERE            
     |            (t.ПокИД  = Пок.id) AND
     |            (t.ПостИД = Пост.ID) AND
     |            (t.НомИД  = Ном.id) AND
     |            (t.МенИД  = Мен.id)
     |      FROM tolap as t,
     |            $Справочник.Контрагенты AS Пок,
     |            $Справочник.Контрагенты AS Пост,
     |            $Справочник.Номенклатура AS Ном,
     |            $Справочник.ФизЛица as Мен"
     ;
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #26 - 29. Ноября 2006 :: 14:34
Печать  
Запрос в ф-ии СоздатьВременнуюТаблицу:
           ТекстЗапроса="
     |      SELECT Фирмы.descr as Фирма,
     |            Пок.id as ПокИД,
     |            CAST(IIF($Прод.АдресДоставки = '     0   ','<не выбран>',Адр.descr) as Character(50)) as АдрДост,
     |            IIF($Прод.Поставщик = '     0   ','"+НеопрИД+"',Пост.id) as ПостИД,
     |            Ном.id as НомИД,
     |            IIF(Мен.id = '     0   ','"+НеопрИД_ФЛ+"',Мен.id) as МенИД,
     |            Прод.date as Дата1,Прод.date as Дата2,
     |            Прод.IDDOC as ДокИД, Прод.IDDOCDEF as ДокВид,
     |            CAST(($Прод.ПродСтоимость-$Прод.ПродСтоимостьВ) as NUMERIC(10,2)) as ПрСт, CAST(($Прод.Себестоимость-$Прод.СебестоимостьВ) as NUMERIC(10,2)) as Себ, CAST(($Прод.Количество-$Прод.КоличествоВ) as NUMERIC(10,2)) as Кол
     |      FROM $Регистр.Продажи AS Прод
     |      LEFT JOIN $Справочник.Фирмы AS Фирмы ON Фирмы.ID = $Прод.Фирма
     |      LEFT JOIN $Справочник.Контрагенты AS Пок ON Пок.ID = $Прод.Покупатель
     |      LEFT JOIN $Справочник.Контрагенты AS Пост ON Пост.ID = $Прод.Поставщик
     |      LEFT JOIN $Справочник.Номенклатура AS Ном ON Ном.ID = $Прод.Номенклатура
     |      LEFT JOIN $Справочник.АдресаДоставки AS Адр ON Адр.ID = $Прод.АдресДоставки
     |      LEFT JOIN $Справочник.Договоры AS Дог ON Дог.ID=$Прод.Договор
     |      LEFT JOIN $Справочник.ФизЛица AS Мен ON Мен.ID=$Дог.Менеджер
     |where (Прод.Date = {d '2006-09-21'})
     | into table tolap"
     ;
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #27 - 29. Ноября 2006 :: 14:52
Печать  
Код
Выбрать все
	     ТекстЗапроса="
     |	SELECT $Прод.Фирма as ФирмаИД,
     |		IIF($Прод.АдресДоставки = '     0   ','"+ПустойАдресИД +"',Адр.id) as АдресИД,
     |		IIF($Прод.Поставщик = '     0   ','"+ПустойКонтрагентИД +"',Пост.id) as ПостИД,
     |		Ном.id as НомИД,
     |		IIF(Мен.id = '     0   ','"+ПустойМенеджерИД+"',Мен.id) as МенИД,
     |		Прод.date as Дата,
     |		CAST(($Прод.ПродСтоимость-$Прод.ПродСтоимостьВ) as NUMERIC(10,2)) as ПрСт,
     |		CAST(($Прод.Себестоимость-$Прод.СебестоимостьВ) as NUMERIC(10,2)) as Себ,
     |		CAST(($Прод.Количество-$Прод.КоличествоВ) as NUMERIC(10,2)) as Кол
     |	FROM $Регистр.Продажи AS Прод
     | into table tolap"
     ; 


Код
Выбрать все
ПустойАдресИД = МетаДата.ЗначениеВСтрокуБД(ПустойАдрес);
ПустойКонтрагентИД = МетаДата.ЗначениеВСтрокуБД(ПустойКонтрагент);
ПустойМенеджерИД = МетаДата.ЗначениеВСтрокуБД(ПустойМенеджер); 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #28 - 29. Ноября 2006 :: 15:04
Печать  
Код
Выбрать все
     |INSERTINTO=INSERT INTO Продажи(
     |	[Фирма].[Фирма],
     |   [Покупатель].KEY,[Покупатель].PARENT,[Покупатель].NAME,
     |	[Торговые точки].[Торговые точки],
     |   [Поставщик].KEY,[Поставщик].PARENT,[Поставщик].NAME,
     |	[Номенклатура].KEY,[Номенклатура].PARENT,[Номенклатура].NAME,
     |	[Менеджер].KEY,[Менеджер].PARENT,[Менеджер].NAME,
     |	[Время по месяцам],[Время по неделям],
     |	Measures.[Продажа],Measures.[Себестоимость],Measures.[Количество])
     |";  


Код
Выбрать все
     ТекстМетаЗапроса="
     |	SELECT Фирмы.descr,
     |		Пок.id, Пок.parentid, Пок.descr,
     |		Адреса.descr,
     |		Пост.id, Пост.parentid, Пост.descr,
     |		Ном.id, Ном.parentid, Ном.descr,
     |		Мен.ID, Мен.parentid, Мен.descr,
     |		t.Дата, t.Дата,
     |		t.ПрСт, t.Себ, t.Кол
     |	FROM tolap as t,
     |		$Справочник.Фирмы AS Фирмы,
     |		$Справочник.Контрагенты AS Пок,
     |		$Справочник.АдресаДоставки AS Адреса,
     |		$Справочник.Контрагенты AS Пост,
     |		$Справочник.Номенклатура AS Ном,
     |		$Справочник.ФизЛица as Мен"
     |	WHERE
     |		(t.ФирмаИД  = Фирмы.id) AND
     |		(t.АдресИД  = Адреса.id) AND
     |		(t.ПокИД  = Пок.id) AND
     |		(t.ПостИД = Пост.ID) AND
     |		(t.НомИД  = Ном.id) AND
     |		(t.МенИД  = Мен.id)
     ; 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы для OLAP
Ответ #29 - 29. Ноября 2006 :: 15:05
Печать  
IDDOC и IDDOCDEF пихать в измерения куба - эта пять  Смех
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 7
ОтправитьПечать