Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сводная таблица на основе двумерного массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сводная таблица на основе двумерного массива (Макросы Sub)
Сводная таблица на основе двумерного массива
SLAVICK Дата: Понедельник, 30.09.2013, 16:53 | Сообщение № 1
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Есть большой массив данных, который не влазит на лист, - masiv(i,7) т.е. 7 столбцов и очень много строк...
как из него сделать кэш для сводной
у меня есть мысль

[vba]
Код
Dim objPivotCache As PivotCache
    Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal)

' А вот как передать  masiv(i,7) в objPivotCache???
' Строим сводную на лист1
    With wsPivot
      objPivotCache.CreatePivotTable TableDestination:=sheets("Лист1").Range("a1")
    End With
[/vba]

Может кто знает как это сделать??? без выгрузки в промежуточные файлы типа (txt) ?


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 30.09.2013, 16:54
 
Ответить
СообщениеЕсть большой массив данных, который не влазит на лист, - masiv(i,7) т.е. 7 столбцов и очень много строк...
как из него сделать кэш для сводной
у меня есть мысль

[vba]
Код
Dim objPivotCache As PivotCache
    Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal)

' А вот как передать  masiv(i,7) в objPivotCache???
' Строим сводную на лист1
    With wsPivot
      objPivotCache.CreatePivotTable TableDestination:=sheets("Лист1").Range("a1")
    End With
[/vba]

Может кто знает как это сделать??? без выгрузки в промежуточные файлы типа (txt) ?

Автор - SLAVICK
Дата добавления - 30.09.2013 в 16:53
Матраскин Дата: Понедельник, 30.09.2013, 17:36 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
SLAVICK, у Вас больше 1 048 577 строк? Если не больше - просто используйте версию 2007+
а если больше, то это капец ^_^


в интернете опять кто-то не прав
 
Ответить
СообщениеSLAVICK, у Вас больше 1 048 577 строк? Если не больше - просто используйте версию 2007+
а если больше, то это капец ^_^

Автор - Матраскин
Дата добавления - 30.09.2013 в 17:36
SLAVICK Дата: Понедельник, 30.09.2013, 18:09 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Больше, намного... %)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеБольше, намного... %)

Автор - SLAVICK
Дата добавления - 30.09.2013 в 18:09
SLAVICK Дата: Понедельник, 30.09.2013, 22:27 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
до 10 млн. ... но хотелось бы обойтись без aсcess.
думаю создать из массива внешнее подключение и считать с него через рекордсет в pivot cash.
это поартикульные парные продажи... т.е. как продается товар с другими товарами.
а далее из этой кучи строю сводную(получается своего рода рейтинг товаров для каждого товара). на самом деле это могут быть любые данные обработанные в массиве...
основной вопрос как из массива сделать внешнее подключение в книге,на основании которого можно построить сводную таблицу.


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 30.09.2013, 22:33
 
Ответить
Сообщениедо 10 млн. ... но хотелось бы обойтись без aсcess.
думаю создать из массива внешнее подключение и считать с него через рекордсет в pivot cash.
это поартикульные парные продажи... т.е. как продается товар с другими товарами.
а далее из этой кучи строю сводную(получается своего рода рейтинг товаров для каждого товара). на самом деле это могут быть любые данные обработанные в массиве...
основной вопрос как из массива сделать внешнее подключение в книге,на основании которого можно построить сводную таблицу.

Автор - SLAVICK
Дата добавления - 30.09.2013 в 22:27
doober Дата: Понедельник, 30.09.2013, 22:41 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Поделюсь опытом
Стояла задача из 8 млн строк получить сводные данные.
Аccess не подойдет для такого объема данных.пробовал, 30 минут ждал и не получил результата
Попробовал в Mysql,он через 5 минут упал.
Попробовал все это проделать в MSSQL2008, получилось, затрачено было 4 минуты на обработку.
Есть одно НО,запрос надо отрабатывать в Management Studio и потом экспортировать результат в файл.


 
Ответить
СообщениеПоделюсь опытом
Стояла задача из 8 млн строк получить сводные данные.
Аccess не подойдет для такого объема данных.пробовал, 30 минут ждал и не получил результата
Попробовал в Mysql,он через 5 минут упал.
Попробовал все это проделать в MSSQL2008, получилось, затрачено было 4 минуты на обработку.
Есть одно НО,запрос надо отрабатывать в Management Studio и потом экспортировать результат в файл.

Автор - doober
Дата добавления - 30.09.2013 в 22:41
SLAVICK Дата: Понедельник, 30.09.2013, 23:05 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
а как передать эти данные в Management Studio?(и нужно ли мне это)
У меня уже есть сформированный массив, мне нужно передать его во внешнее подключение.
В моем файле запрос уже отработан через innerJoin... я его передал в массив, добавил одну колонку... а вот как запихнуть этот самый массив обратно в внешнее подключение???


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениеа как передать эти данные в Management Studio?(и нужно ли мне это)
У меня уже есть сформированный массив, мне нужно передать его во внешнее подключение.
В моем файле запрос уже отработан через innerJoin... я его передал в массив, добавил одну колонку... а вот как запихнуть этот самый массив обратно в внешнее подключение???

Автор - SLAVICK
Дата добавления - 30.09.2013 в 23:05
doober Дата: Вторник, 01.10.2013, 00:16 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Разговор идет пока в темную.
Данные где находятся?
Текст запроса каков?
Возможно есть смысл на стороне сервера создать временную таблицу и с нее получить свод.
Быстрее будет выполняться все на стороне сервера.


 
Ответить
СообщениеРазговор идет пока в темную.
Данные где находятся?
Текст запроса каков?
Возможно есть смысл на стороне сервера создать временную таблицу и с нее получить свод.
Быстрее будет выполняться все на стороне сервера.

Автор - doober
Дата добавления - 01.10.2013 в 00:16
SLAVICK Дата: Вторник, 01.10.2013, 00:26 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
[vba]
Код
sSQL = "Select T4.Main,T4.WithIt,T4.Rate,T4.OneGroup,T4.SecondGroup,Sum(T5.Amount) As MainSum From"
     sSQL = sSQL & " (Select T1.Article As Main, T3.Article As WithIt,T3.AGroup As OneGroup,T1.AGroup As SecondGroup, Count(*) As Rate"
     sSQL = sSQL & " From ([Articles$] As T1"
     sSQL = sSQL & " Inner Join [Sales$] As T2 On (T1.Article=T2.Article))"
     sSQL = sSQL & " Inner Join [Sales$] As T3 On (T2.Check=T3.Check)"
     sSQL = sSQL & " Where (T3.Article<>T1.Article)"
     sSQL = sSQL & " Group By T1.Article, T3.Article, T1.AGroup, T3.AGroup) As T4,[Sales$] As T5,[Sales$] As T6"
     sSQL = sSQL & " Where ((T4.Main=T5.Article) And (T4.WithIt=T6.Article) And (T5.Check=T6.Check))"
     sSQL = sSQL & " And (T4.OneGroup=T6.AGroup) And (T4.SecondGroup=T5.AGroup) Group By T4.Main,T4.WithIt,T4.OneGroup,T4.SecondGroup,T4.Rate"
     sSQL = sSQL & " Order By T4.Rate Desc,T4.Main,T4.OneGroup,T4.SecondGroup"
[/vba]
этот выполненный запрос передаю в массив, и добавляю один столбец, затем хочу на основе нового массива - создать новое подключение


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение[vba]
Код
sSQL = "Select T4.Main,T4.WithIt,T4.Rate,T4.OneGroup,T4.SecondGroup,Sum(T5.Amount) As MainSum From"
     sSQL = sSQL & " (Select T1.Article As Main, T3.Article As WithIt,T3.AGroup As OneGroup,T1.AGroup As SecondGroup, Count(*) As Rate"
     sSQL = sSQL & " From ([Articles$] As T1"
     sSQL = sSQL & " Inner Join [Sales$] As T2 On (T1.Article=T2.Article))"
     sSQL = sSQL & " Inner Join [Sales$] As T3 On (T2.Check=T3.Check)"
     sSQL = sSQL & " Where (T3.Article<>T1.Article)"
     sSQL = sSQL & " Group By T1.Article, T3.Article, T1.AGroup, T3.AGroup) As T4,[Sales$] As T5,[Sales$] As T6"
     sSQL = sSQL & " Where ((T4.Main=T5.Article) And (T4.WithIt=T6.Article) And (T5.Check=T6.Check))"
     sSQL = sSQL & " And (T4.OneGroup=T6.AGroup) And (T4.SecondGroup=T5.AGroup) Group By T4.Main,T4.WithIt,T4.OneGroup,T4.SecondGroup,T4.Rate"
     sSQL = sSQL & " Order By T4.Rate Desc,T4.Main,T4.OneGroup,T4.SecondGroup"
[/vba]
этот выполненный запрос передаю в массив, и добавляю один столбец, затем хочу на основе нового массива - создать новое подключение

Автор - SLAVICK
Дата добавления - 01.10.2013 в 00:26
doober Дата: Вторник, 01.10.2013, 02:00 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Могу предложить хранимую процедуру для MSSQL,если вы с ним работаете.
Создает временную таблицу с допстолбцом+заполняет данными на основе вашего запроса.
Типы полей сами подправите
Запрос на выполнение в коментах в скрипте.Вам осталось заполнить допстолбец и получить сводную
К сообщению приложен файл: 2795238.sql (1.5 Kb)


 
Ответить
СообщениеМогу предложить хранимую процедуру для MSSQL,если вы с ним работаете.
Создает временную таблицу с допстолбцом+заполняет данными на основе вашего запроса.
Типы полей сами подправите
Запрос на выполнение в коментах в скрипте.Вам осталось заполнить допстолбец и получить сводную

Автор - doober
Дата добавления - 01.10.2013 в 02:00
SLAVICK Дата: Вторник, 01.10.2013, 02:23 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Спасибо... пока не приходилось работать с MSSQL. попробую. ^_^
А все таки не пойму неужели нельзя никак передать массив в sql запрос в книге и создать из него кэш для сводной таблицы?


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеСпасибо... пока не приходилось работать с MSSQL. попробую. ^_^
А все таки не пойму неужели нельзя никак передать массив в sql запрос в книге и создать из него кэш для сводной таблицы?

Автор - SLAVICK
Дата добавления - 01.10.2013 в 02:23
AndreTM Дата: Среда, 02.10.2013, 11:45 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А все таки не пойму неужели нельзя никак передать массив в sql запрос в книге и создать из него кэш для сводной таблицы?
Вам же и объясняют, что это делать незачем...
Ведь вы всё равно сначала выполняете запрос на стороне сервера (чтобы получить "массив данных"), затем нагружаете сеть передачей этого немаленького массива, а затем ещё и нагружаете ресурсы ПК обработкой этого массива. Вместо того, чтобы сразу же первым запросом на сервере получить только необходимые данные, только их переслать на станцию, и, соответственно, сразу же по ним получить результат.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
А все таки не пойму неужели нельзя никак передать массив в sql запрос в книге и создать из него кэш для сводной таблицы?
Вам же и объясняют, что это делать незачем...
Ведь вы всё равно сначала выполняете запрос на стороне сервера (чтобы получить "массив данных"), затем нагружаете сеть передачей этого немаленького массива, а затем ещё и нагружаете ресурсы ПК обработкой этого массива. Вместо того, чтобы сразу же первым запросом на сервере получить только необходимые данные, только их переслать на станцию, и, соответственно, сразу же по ним получить результат.

Автор - AndreTM
Дата добавления - 02.10.2013 в 11:45
SLAVICK Дата: Четверг, 03.10.2013, 17:15 | Сообщение № 12
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Всем спасибо... нашлось решение hands
http://www.planetaexcel.ru/forum....D=51546
Цитата
Вам же и объясняют, что это делать незачем...

Есть зачем:) не обязательно для этого примера, а, например, происходит действие в массиве, и его нужно сохранить в книге, а на лист не влазит... или влазит, но не хочется выгружать эти данные ну и т.д. yes


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 03.10.2013, 17:20
 
Ответить
СообщениеВсем спасибо... нашлось решение hands
http://www.planetaexcel.ru/forum....D=51546
Цитата
Вам же и объясняют, что это делать незачем...

Есть зачем:) не обязательно для этого примера, а, например, происходит действие в массиве, и его нужно сохранить в книге, а на лист не влазит... или влазит, но не хочется выгружать эти данные ну и т.д. yes

Автор - SLAVICK
Дата добавления - 03.10.2013 в 17:15
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сводная таблица на основе двумерного массива (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!