|
Отключить оптимизацию\преобразование запроса в СКД | ☑ | ||
---|---|---|---|---|
0
ixilimuse
10.06.14
✎
10:31
|
Всем доброго времени суток.
Есть запрос. Запрос мегалитический)) В одном из подзапросов я намеренно создаю записи - "пустышки". В них присутствует только номер договора и ряд полей не влияющих на суммы. Именно к этим полям я цепляю данные другой подтаблицы. Я так делаю что бы не дублировались суммы прямого страхования из-за того что я цепляю к нему суммы исходящего перестрахования. Сразу скажу конфа - не типовая. И других вариантов - нет. Ибо реальной полноценной связки между прямым и исходом нет((( В общем, в консоли запрос отрабатывает идеально. Все сходится с любимым сотрудниками экселем. Стоит мне засунуть его в СКД - начинаются проблемы. Суммы увеличиваются в 8-9 раз, так как появляются дубли. Кароче СКД умная, и нейтрализует все мои пустышки. Я добрался до галочки "Игнорировать NULL", но и это хоть и изменило количество записей, дубли все равно остались. Уж очень хочет СКД прямое страхование сматчить с исходящим. В обход моих премудростей с пустышками и т.п. Может кто-то подскажет какие-то не банальные настройки СКД? Может есть возможность отключить преобразования и оптимизации? Я уж и с группировкой выводил, и детальные записи и отключал автозаполнение. Не помогло. Буду благодарен наводкам и советам)) |
|||
1
Kyon8
10.06.14
✎
10:43
|
Можно в СКД передать объект - таблицу значений, это в самом тяжелом случае. Также в консоли запросов посмотреть на преобразованный СКД запрос, попробовать ставить галочки "обязательное" для полей в ролях, преобразовать подзапрос во временную таблицу.
|
|||
2
Kyon8
10.06.14
✎
10:44
|
* в консоли СКД
|
|||
3
Ymryn
10.06.14
✎
10:46
|
(0) честно признаюсь, не понял процентов 50 из описания, но есть подозрение, что поможет установка галочки "Обязательное", там же где ты поставил "Игнорировать NULL". В идеале это по всем полям, которые ты хочешь, чтобы железно разделялись.
|
|||
4
agorbunov
10.06.14
✎
10:53
|
Попробуй снять галку "Автозаполнение". А выбираемые поля и отборы установить явно через закладку "Компоновка данных" в конструкторе.
|
|||
5
acsent
10.06.14
✎
10:56
|
вместо соединения таблиц юзай объединение
|
|||
6
ixilimuse
10.06.14
✎
11:28
|
(1) Над передачей объекта тоже думал. Но подозреваю не стоит того. Но как вариант.
С галочками "Обязательное" попробовал. Результат тот - же. Увы. Но все равно спасибо. (3) Да, с написанием есть немного. Ссори. (4) Уже делал. Ничего не поменялось. На самом деле под "подзапросом" я имел ввиду как раз временную таблицу. Их у меня в запросе по меньшей мере 54 штуки. Создаются, уничтожаются, в процессе достижения конечного результата со всеми расчетами. А то что я имел ввиду про пустышки вот этот кусок. ... ВЫБРАТЬ ДД.КлассСтрахования КАК КлассСтрахования, ДД.Страхователь КАК Страхователь, ДД.НомерДоговора КАК НомерДоговора, ДД.НомерОригинальногоДоговора КАК НомерОригинальногоДоговора, ДД.ДатаНачалаДействияСтраховойЗащиты КАК ДатаНачалаДействияСтраховойЗащиты, ДД.ДатаОкончанияДействияСтраховойЗащиты КАК ДатаОкончанияДействияСтраховойЗащиты, СУММА(ДД.СтраховаяСумма) КАК СтраховаяСумма, СУММА(ДД.СтраховаяПремия) КАК СтраховаяПремия, СУММА(ДД.ДоляПерестраховщиковРегл) КАК ДоляПерестраховщиковРегл, ДД.БрокерАгент КАК БрокерАгент, СУММА(ДД.КомиссионноеВознаграждение) КАК КомиссионноеВознаграждение, СУММА(ДД.РНП) КАК РНП, ДД.НаличиеДопСоглашений КАК НаличиеДопСоглашений, ДД.Рейтинг КАК Рейтинг, ДД.Агентство КАК Агентство, СУММА(ДД.КомиссияПерестрахователя) КАК КомиссияПерестрахователя, ДД.Документ.ВидПерестрахования КАК ВидПерестрахования, ДД.Тип КАК Тип, ДД.НомерСтроки, ДД.Процент КАК Процент, ДД.ПризнакРезидентства КАК ПризнакРезидентства, ДД.ПризнакНеПропорциональности КАК ПризнакНеПропорциональности, ЛОЖЬ КАК ПризнакПустышки ПОМЕСТИТЬ ВТ_ФинальнаяГруппировка_1 ИЗ ВТ_ЭтапРНП_Финал КАК ДД СГРУППИРОВАТЬ ПО ДД.КлассСтрахования, ДД.Страхователь, ДД.НомерДоговора, ДД.НомерОригинальногоДоговора, ДД.ДатаНачалаДействияСтраховойЗащиты, ДД.ДатаОкончанияДействияСтраховойЗащиты, ДД.БрокерАгент, ДД.НаличиеДопСоглашений, ДД.Рейтинг, ДД.Агентство, ДД.НомерСтроки, ДД.Процент, ДД.ПризнакРезидентства, ДД.ПризнакНеПропорциональности, ДД.Тип, ДД.Документ.ВидПерестрахования ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL, NULL, ДД.НомерДоговора, NULL, NULL, NULL, 0, 0, 0, NULL, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, ИСТИНА ИЗ ВТ_ГдеЕстьИсход КАК ДД ИНДЕКСИРОВАТЬ ПО НомерДоговора, КлассСтрахования, Тип ... Собственно в этом месте создаются пустышки... А потом дальше по тексту я делаю так: ВТ_ФинальнаяГруппировка КАК ДД ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДоговораПерестрахования КАК ДП ПО (ДП.НомерОригинальногоДоговора = ДД.НомерДоговора) И (ДД.ПризнакПустышки) Подтягиваю в таблицу исходящее перестрахование, при этом избегая дубляжей сумм по прямому. Пустышки пусть множатся - не жалко. Так как количество строк по прямому и исходу может быть разное, а четкой связи - нет. Собственно вот где-то на этом этапе СКД и накладывает свои руки на мои читтерские выдумки. В результате выборки через СКД - пустышек нет, а данные по исходу находятся в строках которые содержат данные по прямому страхованию. И как следствие где исхода больше чем прямого, я наблюдаю дублирование сумм по прямому. Походу придется пока временно создать "семерочный" отчетик, а потом будет время, полистаю умные книжки, может чего-то и наковыряю. Если найду решение - отпишусь. Если кто-то это сделает раньше меня - буду признателен :) Всем спасибо за отклик и попытку помочь) |
|||
7
agorbunov
10.06.14
✎
11:46
|
(6) Посмотри (допустим, консолью запросов СКД) какой результирующий запрос генерируется. Сразу будет понятно где копать.
В некоторых местах, вроде твоего объединения, у меня СКД выкидывала лишние таблицы или дублирующиеся поля. Я решил это поместив все эти объединения в подзапрос, и вынеся настройки выбираемых полей в запрос верхнего уровня. Криво, но работает. |
|||
8
Kyon8
10.06.14
✎
16:55
|
(6) Наверное в данном случае как раз проще ТЗ передавать, изменений совсем немного нужно, см. http://infostart.ru/public/285576/
|
|||
9
DS
10.06.14
✎
17:10
|
(6) Когда-то сталкивался с каким-то непонятным поведением СКД (подробнойтей не помню), которое решил заданием имен полей временных таблиц отличных от имен полей результирующих таблиц.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |