Страницы: 1
RSS
Сводная таблица из двух таблиц. Возможно ли?
 
Добрый день. Банальная ситуация. пример примитивно: есть 2 таблицы (например на соседних листах одной книги)  
столбцы первой: "название отделения", "план отделения".  
столбцы вотрой: "название отделения", "факт отделения".  
"названия отделения" - общее поле первой и второй таблицы.  
Раньше, чтобы получить отчет вида: "отделение - план - факт", приходилось руками из двух таблиц делать одну, из которой потом формировать сводную таблицу.  
А возможно ли сделать сводную таблицу сразу напрямую из двух (трех...)таблиц, не объединяя их?  
Спасибо.
 
Возможно. Вешайте небольшой (см. правила) пример с данными.
KL
 
{quote}{login=AAAAAAAmidi}{date=25.08.2010 05:55}{thema=Сводная таблица из двух таблиц. Возможно ли?}{post}Добрый день. Банальная ситуация. пример примитивно: есть 2 таблицы (например на соседних листах одной книги)  
столбцы первой: "название отделения", "план отделения".  
столбцы вотрой: "название отделения", "факт отделения".  
"названия отделения" - общее поле первой и второй таблицы.  
Раньше, чтобы получить отчет вида: "отделение - план - факт", приходилось руками из двух таблиц делать одну, из которой потом формировать сводную таблицу.  
А возможно ли сделать сводную таблицу сразу напрямую из двух (трех...)таблиц, не объединяя их?  
Спасибо.{/post}{/quote}  
Возможно - на третьем листе создается 2 сводные таблицы, на 4-ом создается сводная таблица, которая вешается на предыдущие 2 сводных таблицы.  
 
Либо формулами или макросом создавать сводную таблицу на третьем листе, но при этом, она будет в фиксированной форме.
 
Пардон, показалось, что пример примитивный будет.  
Вот, например, такой повседневный пример (вложение)
 
Вот такой пример из недавнего. Сводная не в фиксированной форме, т.е. обновляется как "нормальная" сводная. Единственное - макросы должны быть разрешены, или нужно будет вручную обновлять путь к файлу в подсоединении при изменении имени или директории файла.  
Сами сможете адаптировать код?
KL
 
Думаю, смогу. сейчас буду разбираться.  
А вообще думал, может есть традиционные методы, до которых я не доковырялся))  
Большое спасибо за участие.
 
Вот это - "приходилось руками из двух таблиц делать одну" делается одним кликом:  
 
Файл http://hugo.nxt.ru/CompareFiles.Find.rar  
 
Настройки:  
Файл - приёмник: c:\Temp\AAAAAAAmidi\post_149359.xls  
Файл - источник: c:\Temp\AAAAAAAmidi\post_149359.xls  
Столбцы сравнения в приёмнике: a,b  
Столбцы сравнения в источнике: b,c  
Лист - приёмник (№): 3  
Лист - источник (№): 4  
Столбцы - приёмники данных копирования: d  
Столбцы - источники данных копирования: d  
 
Получаем в плане рядом факт (можно взять копию плана).  
Далее что хотите, то и делаете.  
15 пробных запусков.
 
Молчу :)
 
{quote}{login=}{date=25.08.2010 06:51}{thema=}{post}Думаю, смогу. сейчас буду разбираться.  
А вообще думал, может есть традиционные методы, до которых я не доковырялся))  
Большое спасибо за участие.{/post}{/quote}  
Проанализировал ваш пример данных и думаю что, меня сбило с толку начальное описание задачи. Здесь нет связи по "foreign key", а нужно простое объединение двух таблиц. Для этого нужно слегка изменить структуру данных:  
 
1) Полям "План" и "Факт" в обеих таблицах дать единое название, например "Расход"  
 
2) Добавить поле "Тип" со значениями План/Факт  
 
Теперь можно использовать следующую строку SQL:  
 
   strSQL = _  
       "SELECT [Отделение],[Статья расходов],[Расход],[Тип] " & _
       "FROM [" & strSheet1 & "$] UNION ALL " & _
       "SELECT [Отделение],[Статья расходов],[Расход],[Тип] FROM [" & strSheet2 & "$] "
 
Последнее сообщение - мое :-)
KL
 
Еще такой вариант с добавлением недостающего поля в обеих таблицах (поле не должно быть пустым)
KL
 
{quote}{login=KL}{date=25.08.2010 10:02}{thema=}{post}Еще такой вариант с добавлением недостающего поля в обеих таблицах (поле не должно быть пустым){/post}{/quote}  
 
замечательный пример. А как Вы это делаете?  
Я пытаюсь посмотреть источник данных Вашей сводной таблицы (СТ) и не могу (выдает сообщение "Сбой подключения к драйверу ODBC Excel").  
Как вставлять SQL-запрос в источник данных для СТ, если данные - просто на другом листе той же книги?
 
{quote}{login=гость}{date=26.08.2010 10:42}{thema=Re: }{post}  
замечательный пример. А как Вы это делаете?  
Я пытаюсь посмотреть источник данных Вашей сводной таблицы (СТ) и не могу (выдает сообщение "Сбой подключения к драйверу ODBC Excel").  
Как вставлять SQL-запрос в источник данных для СТ, если данные - просто на другом листе той же книги?{/post}{/quote}  
Трюк заключается во временном использовании другого файла:  
1) копируем листы в другой файл и сохраняем его  
2) устанавливаем соединение с этим файлом (внешние данные)  
3) изменяем строку SQL на то, что нам нужно  
4) в тексте соединения меняем путь удаленной книги на путь текущей книги
KL
 
Там в макросе все прописано. Распакуйте файл и запустите процедуру "ConnectSheets"
KL
 
{quote}{login=KL}{date=26.08.2010 02:25}{thema=}{post}Там в макросе все прописано. Распакуйте файл и запустите процедуру "ConnectSheets"{/post}{/quote}  
 
Спасибо!!!  
Век живи - век учись и дураком помрёшь...
 
Лучше заменить номер драйвера (DriverId) с 1046 на 790 в следующих строках, чтобы не было проблем с ручным обновлением данных в XL2003 или XL2007:  
 
   strCon = _  
       "ODBC;" & _  
       "DSN=Excel Files;" & _  
       "DBQ=" & strFileTemp & ";" & _  
       "DefaultDir=" & strPath & ";" & _  
       "DriverId=790;" & _  
       "MaxBufferSize=2048;" & _  
       "PageTimeout=5"  
 
   strCon = _  
       "ODBC;" & _  
       "DSN=Excel Files;" & _  
       "DBQ=" & strFile & ";" & _  
       "DefaultDir=" & strPath & ";" & _  
       "DriverId=790;" & _  
       "MaxBufferSize=2048;" & _  
       "PageTimeout=5"
KL
 
Пришлось поломать голову над тем, как сделать SQL запрос, ничего не меняя в исходных таблицах. Проблема в ограниченном наборе команд SQL доступных при использовании ODBC и OLEDB для соединений с Excel. С помощью Даниэля Мартин, испанского MVP Windows Desktop Experience, совместно родили строку SQL для ODBC (см. вложение). Кстати, она работает и для более нового (и более быстрого) OLEDB.
KL
 
Пардон, предыдущий пример содержал несколько ляпов (сказывается то, что уже 5 часов утра, а я еще не ложился). Вот исправленный вариант.
KL
 
Ээээ... Выспались? ( :D )  
Как кто-то сказал, "Красота - это высшая целесообразность".  
Красиво получилось! Респект! :)  
Я бы это вообще выложил в копилку.
 
{quote}{login=гость}{date=30.08.2010 07:54}{thema=}{post}Ээээ... Выспались? ( :D )  
Как кто-то сказал, "Красота - это высшая целесообразность".  
Красиво получилось! Респект! :)  
Я бы это вообще выложил в копилку.{/post}{/quote}  
Спасибо на добром слове. На этой неделе должна выйти статья в блоге Дебры Далглейш как раз на основе нескольких моих примеров подобных этому. А спать, я чувствую, сегодня уже не судьба, как ни как 7:20 AM, ложиться - только хуже :-)
KL
Страницы: 1
Читают тему
Наверх