|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
Здравствуйте! Есть excel-ий файл с подключением к OLAP с помощью MDX-запроса. То есть ListObject c подключением. Выгружаем отгрузки по городам (по строкам) и по месяцам (по колонкам) за Апрель - Май 2017 г. См. вложенный файл. Но если в MDX-запросе изменить период, скажем, Март - Май 2017 и обновить, то по идее колонка "Март 2017" должна быть между колонками "Город" и "Апрель 2017". Но после обновления находится в конце. Почему так происходит? Как сделать так, чтобы при добавлении новых колонок - колонки находились в той порядке как в MDX-запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2017, 13:36 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
То же самое если запускать локальный SQL-запрос к excel-им листам. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2017, 13:39 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikk, Вам нужно убрать галочку, которая сохраняет изначальный порядок как на рисунке. Код стоило бы переписать, хотя бы так. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2017, 14:41 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
iMrTidy, О, супер! Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2017, 14:54 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
Заметил один нюанс. В конечной таблице отображаются такие поля как "Город", "Март 2017", "Апрель 2017" и "Май 2017". Далее нужно сделать обновление при измененном локальном SQL-запросе. Если в локальном SQL-запросе удалить поле "Май 2017", то в результате это поле якобы удаляется, но вместо него стоит какое то "левое" поле "Апрель 2018". А если вернуть эту галочку, то это не нужное поле не отображается. Или так. Если в локальном SQL-запросе удалить поле "Май 2017" и добавить "Февраль 2017", то поля в нужном порядке. Если снять галочку, то поля не по порядку. Во вложенном файле результаты представлены в четырех вариантах. Как надо правильно макрос написать с учетом таких нюансов, то есть чтобы порядок сохранялся и без всяких "левых" полей? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 08:38 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkКак надо правильно макрос написать с учетом таких нюансов, то есть чтобы порядок сохранялся и без всяких "левых" полей? Или как правильно настроить? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 08:42 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
Еще один нюанс. Если в исходнике в какой то колонке в первых строках присутствуют пусто, то колонка определяется как текстовая. Для этого приходилось в запросе добавлять специальные обрабатываемые записи. Обсуждалось тут и тут . Но проблема в том, что если мер очень много, то для каждой меры нужно делать соответствующую запись. Очень не удобно, приходиться писать длинные локальные SQL-запросы, усложняется код, трудно читать, есть вероятность сделать ошибку, и добавлять вложенный запрос, где находятся эти обрабатываемые записи. И причем часто приходится писать такие длинные локальные SQL запросы. Как можно тут обойти, чтобы не приходилось использовать такие длинные обрабатываемые записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 11:11 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkЗаметил один нюанс. В конечной таблице отображаются такие поля как "Город", "Март 2017", "Апрель 2017" и "Май 2017". Далее нужно сделать обновление при измененном локальном SQL-запросе. Если в локальном SQL-запросе удалить поле "Май 2017", то в результате это поле якобы удаляется, но вместо него стоит какое то "левое" поле "Апрель 2018". А если вернуть эту галочку, то это не нужное поле не отображается. Или так. Если в локальном SQL-запросе удалить поле "Май 2017" и добавить "Февраль 2017", то поля в нужном порядке. Если снять галочку, то поля не по порядку. Во вложенном файле результаты представлены в четырех вариантах. Как надо правильно макрос написать с учетом таких нюансов, то есть чтобы порядок сохранялся и без всяких "левых" полей? Так происходит, потому что таблица стала на одну колонку короче. "Лишнюю" колонку можно просто удалять. Либо можно запоминать размер таблицы и удалять содержимое перед обновлением. А почему Вы используете именно QueryTable? Может быть проще простым SQL запросом? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 12:21 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkЕще один нюанс. Если в исходнике в какой то колонке в первых строках присутствуют пусто, то колонка определяется как текстовая. Для этого приходилось в запросе добавлять специальные обрабатываемые записи. Обсуждалось тут и тут . Но проблема в том, что если мер очень много, то для каждой меры нужно делать соответствующую запись. Очень не удобно, приходиться писать длинные локальные SQL-запросы, усложняется код, трудно читать, есть вероятность сделать ошибку, и добавлять вложенный запрос, где находятся эти обрабатываемые записи. И причем часто приходится писать такие длинные локальные SQL запросы. Как можно тут обойти, чтобы не приходилось использовать такие длинные обрабатываемые записи? Например, можно генерировать запрос динамически. P.S.: А вообще лучше сначала решить одну задачу, а потом уже думать о следующей. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 13:36 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
iMrTidyА почему Вы используете именно QueryTable? Может быть проще простым SQL запросом?Конечно проще SQL-запрос. Но не разрешают использовать в нашей компании, так как это сильно влияет на производительность системы. Поэтому выгружаем данные из OLAP c помощью сводных таблиц или MDX-запросов. Со временем в куб добавляются новые меры и атрибуты. Но все в порядке длинной очереди. В нашей компании аналитика очень сложная. Но лишние и не часто используемые поля добавлять не нужно. Это все влияет на производительность. MDX это не SQL. MDX это не реляционные таблицы, а многомерные. MDX не соединяет таблицы как SQL. При выгрузке данных с помощью MDX-запросов с заданными многими полями (в том числе вычисляемыми) бывает долго выгружает, а иногда вообще не выгружает. И при текущих задач компании одним MDX-запросом не всегда удается получить нужную аналитику. Поэтому получаем несколько таблиц с помощью MDX-запросов на каждый excel-ий лист. На других листах дополнительные справочные таблицы. Потом обращаемся к этим excel-им листам с помощью локального SQL запроса. Есть не мало новых отчетов, структура которая формируется в процессе. То есть для какого-то отчета каждый пользователь отчета оставляет заявку на какие то поля с определенной логикой. Пишется сложный макрос, который получает несколько таблиц от OLAP, потом запускает этот локальный SQL-запрос. Что интересное, приходится промежуточные таблицы сохранять на отдельных вкладках типа как темповые и по причине ограничения памяти 2Г. В принципе можно это делать все и в Access. Со временем корректируется MDX-запросы, корректируется локальные SQL-запросы, дорабатывается макрос, получается отчет с более четкой структурой и оформлением. После того как структура отчета утверждается, делается заявка на добавление в кубе необходимых полей с определенной сложной логикой. То есть отчет в какое время был как экспериментальным. Если отдавать заявку минуя разработку как экспериментального отчета, то можно потерять очень много времени. А также приходится выгружать данные из разных кубов. Вот несколько причин почему используется QueryTable. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 15:08 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
iMrTidyНапример, можно генерировать запрос динамически.Это как? С параметрами? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 15:10 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkiMrTidyА почему Вы используете именно QueryTable? Может быть проще простым SQL запросом?Конечно проще SQL-запрос. Но не разрешают использовать в нашей компании... , так как это сильно влияет на производительность системы. Поэтому выгружаем данные из OLAP c помощью сводных таблиц или MDX-запросов. Со временем в куб добавляются новые меры и атрибуты. Но все в порядке длинной очереди. В нашей компании аналитика очень сложная. Но лишние и не часто используемые поля добавлять не нужно. Это все влияет на производительность. MDX это не SQL. MDX это не реляционные таблицы, а многомерные. MDX не соединяет таблицы как SQL. При выгрузке данных с помощью MDX-запросов с заданными многими полями (в том числе вычисляемыми) бывает долго выгружает, а иногда вообще не выгружает. И при текущих задач компании одним MDX-запросом не всегда удается получить нужную аналитику. Поэтому получаем несколько таблиц с помощью MDX-запросов на каждый excel-ий лист. На других листах дополнительные справочные таблицы. Потом обращаемся к этим excel-им листам с помощью локального SQL запроса. Есть не мало новых отчетов, структура которая формируется в процессе. То есть для какого-то отчета каждый пользователь отчета оставляет заявку на какие то поля с определенной логикой. Пишется сложный макрос, который получает несколько таблиц от OLAP, потом запускает этот локальный SQL-запрос. Что интересное, приходится промежуточные таблицы сохранять на отдельных вкладках типа как темповые и по причине ограничения памяти 2Г. В принципе можно это делать все и в Access. Со временем корректируется MDX-запросы, корректируется локальные SQL-запросы, дорабатывается макрос, получается отчет с более четкой структурой и оформлением. После того как структура отчета утверждается, делается заявка на добавление в кубе необходимых полей с определенной сложной логикой. То есть отчет в какое время был как экспериментальным. Если отдавать заявку минуя разработку как экспериментального отчета, то можно потерять очень много времени. А также приходится выгружать данные из разных кубов. ...Вот несколько причин почему используется QueryTable. Я имел в виду внутренний SQL запрос без QueryTable. Вы все равно используете VBA, тогда можно было бы "выбросить лишнее". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 17:59 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkiMrTidyНапример, можно генерировать запрос динамически.Это как? С параметрами? strQuery имеет тип данных string и вполне может генерироваться динамически. На сколько я могу судить, логика построения запросов весьма простая в Вашем случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 18:01 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikk, Я не работал с OLAP, но судя по Вашим описаниям, выгружаемые таблицы можно было бы обрабатывать, например, при помощи MS SQL. Смотря для чего и как данные используются дальше, можно написать надстройку для Excel, например, на C#, или даже приложение, которое позволит гибче получать данные из промежуточных таблиц. Да тут, в принципе, все определяется полетом фантазии, средствами компании и целями. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 18:09 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
iMrTidyЯ имел в виду внутренний SQL запрос без QueryTable. Вы все равно используете VBA, тогда можно было бы "выбросить лишнее".Можно пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 20:42 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
iMrTidystrQuery имеет тип данных string и вполне может генерироваться динамически. На сколько я могу судить, логика построения запросов весьма простая в Вашем случае.Во вложенном примере выше указан простой SQL-запрос чтобы обозначить суть проблемы. В рабочих файлах они очень длинные и от 1 до 10 шт. Так как с каждым разом были заявки на доработки от разных пользователей отчетов, что понимаешь потом что надо было в Access делать и не мучать Excel. В Excel обычно SQL-запросы храню на надписях, для удобства чтения делаю отступы, если есть вложенные запросы. То есть для одного SQL-запроса два объекта-надписи: слева с параметрами, а справа со значениями параметрами, чтобы убедиться, что значения вместо параметров правильные вставились. Аналогично для остальных SQL-запросов. Макрос вытаскивает из надписи SQL-запрос с параметрами, вставляет значения вместо параметров (тут работает строковая функция Replace), отдельно выкладывает сгенерированный запрос на отдельную надпись и запускает этот запрос. Но если SQL-запрос получился очень длинным, то бывает в объект-надпись не помещается. Приходилось этот длинный запрос делить на два запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 20:59 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
iMrTidyЯ не работал с OLAP, но судя по Вашим описаниям, выгружаемые таблицы можно было бы обрабатывать, например, при помощи MS SQL.Не разрешают использовать Microsoft SQL Server можно написать надстройку для Excel, например, на C#,Не приходилось еще делать надстройки. C# недавно начал изучать потихонечку. или даже приложение, которое позволит гибче получать данные из промежуточных таблиц.Мне бы это увидеть бы, чтобы понятнее было. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2017, 21:07 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkiMrTidyЯ имел в виду внутренний SQL запрос без QueryTable. Вы все равно используете VBA, тогда можно было бы "выбросить лишнее".Можно пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 00:51 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkiMrTidystrQuery имеет тип данных string и вполне может генерироваться динамически. На сколько я могу судить, логика построения запросов весьма простая в Вашем случае.Во вложенном примере выше указан простой SQL-запрос чтобы обозначить суть проблемы. В рабочих файлах они очень длинные и от 1 до 10 шт. Так как с каждым разом были заявки на доработки от разных пользователей отчетов, что понимаешь потом что надо было в Access делать и не мучать Excel. В Excel обычно SQL-запросы храню на надписях, для удобства чтения делаю отступы, если есть вложенные запросы. То есть для одного SQL-запроса два объекта-надписи: слева с параметрами, а справа со значениями параметрами, чтобы убедиться, что значения вместо параметров правильные вставились. Аналогично для остальных SQL-запросов. Макрос вытаскивает из надписи SQL-запрос с параметрами, вставляет значения вместо параметров (тут работает строковая функция Replace), отдельно выкладывает сгенерированный запрос на отдельную надпись и запускает этот запрос. Но если SQL-запрос получился очень длинным, то бывает в объект-надпись не помещается. Приходилось этот длинный запрос делить на два запроса. Мы с Вами о разном. Довольно легко можно распарсить конечный запрос, выделив из него все, что между select и from, с дальнейшей заменой на if(isnull(..., заранее задав tocken для числовых полей. Впрочем, пример, что я приложил, этого не требует. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 00:53 |
|
Колонки не по порядку
|
|||
---|---|---|---|
#18+
ferzmikkiMrTidyЯ не работал с OLAP, но судя по Вашим описаниям, выгружаемые таблицы можно было бы обрабатывать, например, при помощи MS SQL.Не разрешают использовать Microsoft SQL Server можно написать надстройку для Excel, например, на C#,Не приходилось еще делать надстройки. C# недавно начал изучать потихонечку. или даже приложение, которое позволит гибче получать данные из промежуточных таблиц.Мне бы это увидеть бы, чтобы понятнее было. MySQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:04 |
|
|
start [/forum/topic.php?fid=61&fpage=24&tid=2172631]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 138ms |
0 / 0 |