Я нахожусь в сценарии с таблицей, которая обновляется третьим приложением каждую неделю. Мне нужно продолжать накапливать все данные в Excel, используя соединение ODBC с базой данных.

мне интересно

Подход 1. Есть ли способ заставить Excel добавлять результаты для каждого обновления (это обновление будет запускаться в соответствии с параметром, указывающим неделю)? Я попытался определить таблицу, для которой загружается соединение, используя динамическую ссылку, но как только якорь первый раз, позиция таблицы никогда не переопределяется

Подход 2: Используйте ETL для накопления всех еженедельных результатов в промежуточной таблице, а затем подключите к ней Excel в режиме реального времени. Но мне нужен механизм для кэширования старых данных, так как я не могу расти в геометрической прогрессии при открытии Excel. Представьте, что через 10 лет Excel нужно будет обновить данные за 10 лет до их отображения. Есть ли способ хранить уже извлеченные данные и увеличивать их в реальном времени (при открытии книги), выбирая новые данные (с запросом / фильтром чего-либо)

Спасибо

РЕДАКТИРОВАТЬ: Может быть, лучше спросить об этом так: Какова оптимальная стратегия для таблицы, которая продолжает расти и должна быть прочитана в режиме реального времени в Excel? Я просто не хочу получать абсолютно все данные через несколько месяцев ...

2 ответа2

2

Я бы использовал Power Query Add-In для Excel, чтобы решить эту проблему. Он может обрабатывать добавление результатов из запроса SQL в существующую таблицу.

http://office.microsoft.com/en-au/excel-help/append-queries-HA104149760.aspx?CTT=5&origin=HA103993872

Если вы сохраняете данные в формате модели данных Excel (не в таблице Excel), данные сильно сжаты - есть отчеты о людях, хранящих 160 миллионов строк в этом формате (в 64-разрядной версии Excel). Затем вы можете получить доступ к данным обратно в Excel через сводные таблицы и / или формулы куба.

0

Мне не хватило выбранного ответа (но отличное начало :)

Используя последнюю версию PowerQuery (начиная с ноября 2014 года, вы можете загружать в рабочую книгу в дополнение к загрузке в модель данных)

Здесь исходные данные - это просто таблица в Excel, но вы можете извлекать их из любого места, включая базу данных SQL.

Первый шаг. Создайте начальную загрузку. Запрос называется FROM (имя наследуется от имени таблицы: FROM).

let
    //Load from Table FROM
    Source = Excel.CurrentWorkbook(){[Name="FROM"]}[Content],
    AddCustom = Table.AddColumn(Source, "Load Date", each DateTimeZone.UtcNow())
in
    AddCustom

Загрузите в модель данных И на рабочий лист. Таблица рабочего листа по умолчанию называется FROM_2 .

Обновите запрос FROM следующим образом:

let
    //Load from Table FROM
    Source = Excel.CurrentWorkbook(){[Name="FROM"]}[Content],
    AddCustom = Table.AddColumn(Source, "Load Date", each DateTimeZone.UtcNow()),
    //Load from Table FROM_2  (this is just a copy of what's in the DataModel)
    Custom1 = Excel.CurrentWorkbook(){[Name="FROM_2"]}[Content],
    ChangedType = Table.TransformColumnTypes(Custom1 ,{{"Load Date", type datetimezone}}),
    //Append the two Loads.  The New data and the existing loads in the DataModel
    Append = Table.Combine({ChangedType,AddCustom})
in
    Append

Итак, теперь вы можете просто, например, добавить сводную таблицу, указывающую на DataModel или на таблицу FROM_2. Если вам нужна другая таблица с данными в DataModel, куда вы можете добавить другие столбцы, вы можете просто создать еще один Query, указывающий на таблицу FROM_2.

Поскольку вы используете таблицу на рабочем листе в качестве промежуточного шага, я сомневаюсь, что она будет масштабироваться для большого количества данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .