Excel Использование модели данных для дополнения моего листа отслеживания - PullRequest
0 голосов
/ 11 марта 2020

У меня есть лист отслеживания, который я хотел бы обновить, используя внешнюю базу данных. Лист отслеживания - это просто таблица в Excel с несколькими столбцами. Некоторые столбцы - это ручные записи, заметки и прочее. Некоторые столбцы связаны со значениями из нашей базы данных на основе значения индекса для каждой строки.

Мне нужно создать строку поиска для всех уникальных значений индекса в моей таблице, выполнить поиск в моей базе данных, экспортировать эти результаты в файл csv, поместите его в отдельный лист и затем свяжите его с моей таблицей отслеживания. Я бы не хотел делать этот дамп данных каждые несколько дней и просто извлекать нужные мне данные из базы данных.

Столбцы моей таблицы выглядят примерно так, как показано ниже, и имеют несколько сотен строк. Я отслеживаю проекты и веду некоторые заметки, чтобы делать элементы или просто общие ссылки.

Index | Manual Entry 1 | Manual Entry 2 | Database Param 1 (DB1) | Database Param 2(DB2)

Моя таблица данных выглядит следующим образом.

Index | DB1 | DB2

Я могу загрузить свою базу данных в Excel как модель данных уже. В зависимости от того, что я извлекаю, у некоторых из них есть несколько миллионов строк, поэтому я не могу просто загрузить их непосредственно в таблицу. Я не могу понять, как запросить модель данных для определенного параметра c на основе значения индекса. Сегодня я использовал макрос для извлечения значений DB1 и DB2 из моих данных, которые я экспортировал из базы данных.

Все, что я искал в моделях данных и превзошло их результаты - сводные таблицы или отчеты о числовых данных c , Я нашел функции cubemember и cubevalue, но не смог получить выражения, которые бы давали мне необработанное значение на основе индекса. Это всегда был просто подсчет значений.

Мой код sudo сегодня выглядит следующим образом.

'loop through rows of indexes
   If DataIndex = TrackingIndex then
     'loop through columns of DB1,DB2,DB3...
       if DataDB# = TrackingDB# Then
        TrackingValue = DataValue
       end if
     next
   end if
 next

Мне просто нужно знать, какая формула может index(match()) в модели базы данных? или какая функция VBA позволяет мне загружать модель данных в массив, который я могу l oop через?

Или есть лучший способ выполнить sh все это вместе?

1 Ответ

0 голосов
/ 02 апреля 2020

Хорошо, я наконец понял это. Я не прошел 1016 * истинный маршрут SQL. Я объединил помощь этих двух статей.

https://radacad.com/dynamic-sql-using-power-query

https://eriksvensen.wordpress.com/2017/12/12/powerquery-filter-a-table-based-on-another-table-column-or-list-and-some-filter-ahas/

По сути, возьмите ваш стол в нем есть все нужные вам значения поиска. Добавьте эту таблицу в вашу модель данных. Отредактируйте его в запросе мощности в первой половине первой статьи выше, чтобы уменьшить его до 1 списка уникальных значений. Я сделал это как соединение только потому, что мне не нужно, чтобы этот список действительно существовал где-либо.

Затем загрузите ваше соединение с вашей базой данных. Используйте кнопку преобразования данных после того, как вы выбрали свой набор данных. Следуйте второй статье, чтобы отфильтровать ее в мощном запросе на основе первой таблицы уникальных значений. Для любого случайного значения требуется использовать команды фильтра GUI. Затем с помощью расширенного редактора измените команду фильтра, чтобы использовать вашу первую таблицу значений в качестве фильтра. Затем загрузите его в таблицу и выполните любую обработку индекса / соответствия, vlookup или макроса, которую вы хотите!

...