2016-11-29 4 views
3

Недавно я переключился на PowerQuery для извлечения данных из разных источников. Я загрузил свои существующие данные в таблицу под названием «masterEntries».Запрос на добавление в существующую таблицу

В запросе у меня есть функция проверки последней записи для каждого источника в «masterEntries» и выборки только новых записей.

let 
    Source = Excel.CurrentWorkbook(){[Name="formsMaster"]}[Content], 
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"FormName", type text}, {"Form", type text}, {"LastEntry", Int64.Type}}), 
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each formEntries([FormName],[LastEntry])), 
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"EntryId", "Field1", "Field2", "Field3", "Field5", "DateCreated"}, {"EntryId", "Field1", "Field2", "Field3", "Field5", "DateCreated"}), 
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Form", "LastEntry"}), 
in 
    #"Removed Columns" 

Этот запрос загружает данные в новую таблицу. Вместо этого я хочу добавить данные в «masterEntries».

Я пытаюсь сделать это с помощью PowerQuery, а не VBA. В PowerQuery есть функция добавления предложений, где два или более запросов/результатов могут быть объединены в новую таблицу.

Даже новый запрос для добавления результирующей таблицы из вышеприведенного запроса ("latestEntries") к существующей таблице ("masterEntries") будет выполняться.

Любые идеи о том, как это можно сделать с помощью PowerQuery?

EDIT

  1. Мои исходные данные ("masterEntries") был загружен вручную. Это большой стол с 400K + записями. Я могу загрузить его с помощью запроса, если это поможет.
  2. Каждый запуск «latestEntries» проверяет, какие записи уже находятся в «masterEntries», и извлекает только новые записи из разных источников.
  3. Метод Append Query в Power Query - это просто соединение. Он не добавляет записи навсегда. То есть, когда «latestEntries» приносит новый набор записей, «masterEntries» теряет записи, которые были в раннем запуске «latestEntries».
+0

Вы должны создать соединение с 1-го источника данных и загрузки Это. После этого вы должны создать второе соединение, и когда вы закончите редактирование, просто перейдите в «Append Queries» с ленты «Home» и выберите 1-е соединение. Тогда вам, скорее всего, придется сортировать данные. Очень простой процесс, они отлично справились с этим. – zipa

+0

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

+0

Он делает, но затем вы применяете 'Append Queries', и он делает то же самое, что и имя, и дает вам добавленное решение. – zipa

ответ

0

Вы должны добавить что-то вроде этого, просто изменить название Your_Table в таблицу вы хотите использовать:

#"Append Query" = Table.Combine({#"Removed Columns", Your_Table}) 
in 
    #"Append Query" 
+0

Это загружает объединенные данные в новую таблицу. Моя потребность состоит в том, чтобы объединить данные в том, что вы называете Your_Table. – eshwar

+0

Вы 'Close & Load'? – zipa

+0

Запрос, который я разместил, загружает данные в новую таблицу под названием «latestEntries». Ваше предложение приводит только к таблице «latestEntries» с полным набором данных. – eshwar

1

Это звучит немного как запрос на «дополнительных нагрузок». В настоящее время это не поддерживается Power Query в Excel. Чтобы обойти эту проблему, чтобы идти через «LinkBack» -стол, как описано здесь: http://ms-olap.blogspot.de/2015/05/incremental-data-loads-in-microsoft.html

Если LinkBack-таблица превышает 1,1 Мио строки, вы можете использовать JSON-сжатие, как описано здесь: http://www.thebiccountant.com/2016/12/06/how-to-store-tables-longer-than-11-mio-rows-in-excel/ Но надо знать, что это снижает издержки.

Оба метода «стоят», поэтому этот метод имеет смысл, если вы «сохраняете» повторяющееся выполнение действительно тяжелых преобразований (или длинных нагрузок из Интернета).

0

Если у вас есть какие-то ID, и это целое число, вот запрос для masterEntries таблицы (это важно!):

let 
    Source = Excel.CurrentWorkbook(){[Name="masterEntries"]}[Content], 
    Types = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Value", type number}}), 

    //Assuming you have integer-type IDs. 
    //Otherwise you have to order and index records in a view, and query that view. 
    MaxID = List.Max(Types[ID]), 
    //if you have ordered index, List.Max() can be substituted with Table.LastN(Types, 1)[ID]{0} 
    //it may perform better. 

    TableFromDB = Excel.CurrentWorkbook(){[Name="source"]}[Content], //Replace with database table 
    GetNewRows = Table.SelectRows(TableFromDB, each [ID] > MaxID), 
    MergeTables = Table.Combine({Types, GetNewRows}) 
in 
    MergeTables