2016-07-20 2 views
0

У меня есть MS SQL, работающий под Power Query, чтобы получить некоторые данные в Excel.power query loop from sql имя динамической таблицы

у нас есть несколько проектов, и код для них, которые поступают из другого запроса следующим образом:

let 
    Source = Projects[Code] 
in 
    Source 

Sample данные:

+------+ 
| code | 
+------+ 
| 2 | 
| 3 | 
| 6 | 
| 76 | 
| 77 | 
| 78 | 
| 79 | 
| 80 | 
| 81 | 
| 82 | 
| 83 | 
| 84 | 
| 85 | 
| 86 | 
| 87 | 
| 88 | 
| 89 | 
| 90 | 
| 91 | 
| 92 | 
| 93 | 
| 94 | 
| 95 | 
| 96 | 
| 97 | 
| 99 | 
| 100 | 
| 101 | 
| 102 | 
| 103 | 
+------+ 

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

let 
    Source = Sql.Database("server", "logo", [Query="select '92' as [santiye] , stockref, DATE_ , AMOUNT, PRICE, total from LG_092_01_STLINE where cancelled = 0 and TRCODE =1"]), 
    #"Merged Queries" = Table.NestedJoin(Source,{"stockref"},Query2,{"stockref"},"NewColumn",JoinKind.LeftOuter), 
    #"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"CODE", "NAME"}, {"NewColumn.CODE", "NewColumn.NAME"}), 
    #"Removed Columns" = Table.RemoveColumns(#"Expanded NewColumn",{"stockref"}), 
    #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"NewColumn.CODE", "NewColumn.NAME", "DATE_", "AMOUNT", "PRICE", "total"}), 
    #"Changed Type" = Table.TransformColumnTypes(#"Reordered Columns",{{"santiye", Int64.Type}}), 
    #"Merged Queries1" = Table.NestedJoin(#"Changed Type",{"santiye"},Projects,{"Code"},"NewColumn",JoinKind.LeftOuter), 
    #"Expanded NewColumn1" = Table.ExpandTableColumn(#"Merged Queries1", "NewColumn", {"Project Name"}, {"NewColumn.Project Name"}), 
    #"Renamed Columns" = Table.RenameColumns(#"Expanded NewColumn1",{{"NewColumn.Project Name", "Project Name"}}), 
    #"Reordered Columns1" = Table.ReorderColumns(#"Renamed Columns",{"santiye", "Project Name", "NewColumn.CODE", "NewColumn.NAME", "DATE_", "AMOUNT", "PRICE", "total"}) 
in 
    #"Reordered Columns1" 

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

LG_092_01_STLINE = LG_ {код} _01_STLINE

[Запрос = "выбрать '92', как = [Запрос =" выберите {код}, как

я сделал аналогично цикл в SQL запроса, но «exec()» не работает в режиме запроса unfort.

while @cnt <= @maxrow 

begin 

select @firma = nr from (SELECT ROW_NUMBER() over (order by logicalref asc) as NUM, NR FROM L_CAPIFIRM ) nn where NUM = @cnt 
select @santiye = name from L_CAPIFIRM where NR = @firma 

set @firma = RIGHT('000'+CAST(@firma AS VARCHAR(3)),3) 
set @items = 'LG_' + convert(nvarchar(3),@firma) + '_ITEMS' 
set @stline = 'LG_' + convert(nvarchar(3),@firma) + '_01_STLINE' 

ответ

0

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

Сначала я хотел бы подключиться к базе данных SQL на этом сервере и выбрать любую случайную таблицу и отредактировать сгенерированный запрос. Затем перейдите к шагу «Источник» и щелкните по строке для своей базы данных в столбце «Данные». Это даст вам список таблиц в этой базе данных.

Отфильтровать список, который вы хотите. Вы можете сделать это с помощью любого типа фильтра, или для вашего сценария вы можете достичь этого путем слияния с использованием типа Join: Inner Join.

Теперь нажмите кнопку «Развернуть» в заголовке столбца для столбца «Данные». Теперь у вас есть каждая строка из выбранных таблиц, добавленных вместе. Вы можете добавить в свои преобразования вниз по этому запросу.

Выполнено в 4 кликах без строки кода. Power Query - удивительно мощный инструмент для интеграции данных.

Power Query имеет удивительный допуск для вариантов схемы таблиц - я никогда не видел ничего подобного. Он обычно работает с результатами здравого смысла, такими как возврат нуля для таблиц с отсутствующими столбцами, сопоставление столбцов по имени (не столбцов, как в SQL UNION), и попытка создания столбцов с конфликтующими типами данных. Кажется, он генерирует список столбцов из первой таблицы. Как всегда, тщательно проверяйте.

+0

Благодарим вас за ответ, но таблицы в базе данных зависят от первого списка кодов. этот список может меняться время от времени около того таблиц, которые должен союзом также изменений ... имен примера таблицы в базе данных в зависимости от списка кодов проекта: '' LG_002_01_STLINE' LG_003_01_STLINE' '' LG_006_01_STLINE' LG_076_01_STLINE' и т.д ... , а также мне нужно объединить все эти таблицы в одну таблицу в запрос мощности –

+0

Этот сценарий уже рассмотрен в моем ответе выше, исправьте шаг фильтра в третьем параграфе. –

+0

Я угадываю свои пределы знаний, чтобы понять ваш ответ ... Я буду очень рад, если вы просто отредактируете файл с образцом, который я подключил ... [Пример файла] (https://drive.google .com/open? id = 0BxC6zZIYn1SzMjltbEhDRUFvMG8) –