Здравствуйте. Пож-та, подскажите, как должен будет выглядить запрос, если имена листов загружаемых в Power Query xlsx-файлов (на которых расположены данные) разные? Сейчас редактор выдаёт следующий синтаксис:
Код
(filepath)=>
let
Source = Excel.Workbook(File.Contents(filepath), null, true),
#07-06-17 11-58_Sheet" = Source{[Item="07-06-17 11-58",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(#"07-06-17 11-58_Sheet",{{"Column1", type text}, {"Column2", type any}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type any}, {"Column7", type text}, {"Column8", type text}, {"Column9", type any}, {"Column10", type text}, {"Column11", type text}, {"Column12", type text}, {"Column13", type text}, {"Column14", type any}, {"Column15", type any}, {"Column16", type any}, {"Column17", type text}, {"Column18", type text}, {"Column19", type text}, {"Column20", type any}, {"Column21", type text}, {"Column22", type text}, {"Column23", type any}, {"Column24", type text}, {"Column25", type any}, {"Column26", type any}, {"Column27", type text}, {"Column28", type text}, {"Column29", type text}, {"Column30", type text}, {"Column31", type text}, {"Column32", type any}, {"Column33", type any}, {"Column34", type any}, {"Column35", type any}, {"Column36", type text}, {"Column37", type any}, {"Column38", type any}, {"Column39", type text}, {"Column40", type any}, {"Column41", type any}, {"Column42", type any}, {"Column43", type any}, {"Column44", type text}, {"Column45", type any}, {"Column46", type any}, {"Column47", type any}, {"Column48", type text}, {"Column49", type text}, {"Column50", type any}, {"Column51", type any}, {"Column52", type any}, {"Column53", type any}, {"Column54", type any}, {"Column55", type any}, {"Column56", type any}, {"Column57", type any}, {"Column58", type any}, {"Column59", type text}, {"Column60", type any}, {"Column61", type any}, {"Column62", type any}, {"Column63", type any}, {"Column64", type any}, {"Column65", type any}, {"Column66", type text}, {"Column67", type text}, {"Column68", type text}, {"Column69", type any}, {"Column70", type text}, {"Column71", type text}, {"Column72", type any}, {"Column73", type text}, {"Column74", type text}})
in
#"Changed Type"
Имя листа на котором находятся данные "07-06-17 11-58" Заранее спасибо.
Тут всё зависит от того, можете ли вы предварительно отобрать нужные листы по какому-то признаку. Если после первого шага вы можете оставить в списке листов только нужные (например, по принципу "название содержит пробел"), то дальше проще, выполняете на столбце Data разворачивание (CombineBinaries) , он вам сам создаст функцию, которая обрабатывает каждый отдельный лист.
Совет - отключите автоматическое распознавание типов данных в настройках текущего файла.
Спасибо за ваш ответ. Скажиите, не упростит ли задачу то, что в файлах всего ОДИН лист? Но имя этого листа не предсказуемо. Подскажите, а где отключается автоматическое распознавание типа данных?
Учтите, лист должен быть действительно только один. Если есть скрытые листы, то вот эту часть [Kind="Sheet"] нужно записать как [Kind="Sheet", Hidden=false]
(filename)=>
let
Source = Excel.Workbook(File.Contents(filename), null, true) {[Kind="Sheet"]}[Data],
#"07-06-17 11-58_Sheet" = Source{[Item="07-06-17 11-58",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(#"07-06-17 11-58_Sheet",{{"Column1", type text}, {"Column2", type any}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type any}, {"Column7", type text}, {"Column8", type text}, {"Column9", type any}, {"Column10", type text}, {"Column11", type text}, {"Column12", type text}, {"Column13", type text}, {"Column14", type any}, {"Column15", type any}, {"Column16", type any}, {"Column17", type text}, {"Column18", type text}, {"Column19", type text}, {"Column20", type any}, {"Column21", type text}, {"Column22", type text}, {"Column23", type any}, {"Column24", type text}, {"Column25", type any}, {"Column26", type any}, {"Column27", type text}, {"Column28", type text}, {"Column29", type text}, {"Column30", type text}, {"Column31", type text}, {"Column32", type any}, {"Column33", type any}, {"Column34", type any}, {"Column35", type any}, {"Column36", type text}, {"Column37", type any}, {"Column38", type any}, {"Column39", type text}, {"Column40", type any}, {"Column41", type any}, {"Column42", type any}, {"Column43", type any}, {"Column44", type text}, {"Column45", type any}, {"Column46", type any}, {"Column47", type any}, {"Column48", type text}, {"Column49", type text}, {"Column50", type any}, {"Column51", type any}, {"Column52", type any}, {"Column53", type any}, {"Column54", type any}, {"Column55", type any}, {"Column56", type any}, {"Column57", type any}, {"Column58", type any}, {"Column59", type text}, {"Column60", type any}, {"Column61", type any}, {"Column62", type any}, {"Column63", type any}, {"Column64", type any}, {"Column65", type any}, {"Column66", type text}, {"Column67", type text}, {"Column68", type text}, {"Column69", type any}, {"Column70", type text}, {"Column71", type text}, {"Column72", type any}, {"Column73", type text}, {"Column74", type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Column2", "Column4", "Column6", "Column17", "Column18", "Column19", "Column20", "Column21", "Column23", "Column28", "Column29", "Column30", "Column32", "Column33", "Column34", "Column35", "Column37", "Column38", "Column40", "Column41", "Column42", "Column43", "Column44", "Column45", "Column49", "Column50", "Column52", "Column53", "Column54", "Column55", "Column56", "Column57", "Column58", "Column59", "Column60", "Column61", "Column62", "Column63", "Column64", "Column65", "Column66", "Column67", "Column68", "Column69", "Column71", "Column73", "Column74"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column1", "Дата"}, {"Column3", "Канал"}, {"Column5", "Договор"}, {"Column7", "Класс товара"}, {"Column8", "Рекламодатель"}, {"Column9", "ID Бренда"}, {"Column10", "Бренд"}, {"Column11", "Заказ"}, {"Column12", "Медиаплан"}, {"Column13", "Ролик"}, {"Column14", "Хр-ж"}, {"Column15", "Стоимомть без НДС"}, {"Column16", "Стоимомть с НДС"}, {"Column22", "Программа"}, {"Column24", "Тип РМ"}, {"Column25", "№ блока"}, {"Column26", "Позиция спота"}, {"Column27", "Тип блока"}, {"Column31", "Факт.время"}, {"Column36", "Тип размещения"}, {"Column39", "Целевая группа"}, {"Column46", "ID спота"}, {"Column47", "ID блока"}, {"Column48", "Точка продаж"}, {"Column51", "ID ролика"}, {"Column70", "Фин.бренд"}, {"Column72", "ID спота ТНС"}}),
#"Removed Top Rows" = Table.Skip(#"Renamed Columns",3),
#"Removed Bottom Rows" = Table.RemoveLastN(#"Removed Top Rows",1),
#"Duplicated Column" = Table.DuplicateColumn(#"Removed Bottom Rows", "Дата", "Дата - Copy"),
#"Reordered Columns" = Table.ReorderColumns(#"Duplicated Column",{"Дата", "Дата - Copy", "Канал", "Договор", "Класс товара", "Рекламодатель", "ID Бренда", "Бренд", "Заказ", "Медиаплан", "Ролик", "Хр-ж", "Стоимомть без НДС", "Стоимомть с НДС", "Программа", "Тип РМ", "№ блока", "Позиция спота", "Тип блока", "Факт.время", "Тип размещения", "Целевая группа", "ID спота", "ID блока", "Точка продаж", "ID ролика", "Фин.бренд", "ID спота ТНС"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Reordered Columns",{{"Дата - Copy", type date}}),
#"Extracted Month Name" = Table.TransformColumns(#"Changed Type1", {{"Дата - Copy", each Date.MonthName(_), type text}}),
#"Renamed Columns1" = Table.RenameColumns(#"Extracted Month Name",{{"Дата - Copy", "Месяц"}}),
#"Reordered Columns1" = Table.ReorderColumns(#"Renamed Columns1",{"Дата", "Месяц", "Канал", "Рекламодатель", "Договор", "Медиаплан", "Бренд", "Фин.бренд", "Класс товара", "Заказ", "Ролик", "Хр-ж", "Стоимомть без НДС", "Стоимомть с НДС", "Программа", "Тип РМ", "№ блока", "Позиция спота", "Тип блока", "Факт.время", "Тип размещения", "Целевая группа", "ID спота", "ID блока", "Точка продаж", "ID Бренда", "ID ролика", "ID спота ТНС"}),
#"Replaced Value" = Table.ReplaceValue(#"Reordered Columns1","пл","плав",Replacer.ReplaceText,{"Заказ"}),
#"Replaced Value1" = Table.ReplaceValue(#"Replaced Value","плавав","плав",Replacer.ReplaceText,{"Заказ"})
in
#"Replaced Value1"
Подозреваю, что нужно в let-секции заменить строки 07-06-17 11-58_Sheet, они упоминаются в трёх местах. Однако, заменяя эти строки на {[Kind="Sheet"]}[Data], получаю ошибку : "Token Identifier expected" в 4-ой строке запроса.
Всё же оставлю с использовением функции, как у Николая в описании, cпасибо! P.S. Максим, вы не сталкивались с Replace-ом в Power Query используя символы подстановки "*" и "?". Что-то не могу добиться результата....
Максим, про wildcard-символы понял, спасибо. Не подскажите : как изменить ситаксис запроса, чтобы файл "Book1.xlsx" (см. код ниже) открывался из той же папки откуда грузится файл с запросом PowerQuery? В редакторе сейчас это выглядит следующим образом :
На данный момент получается, что для того, чтобы отлаженный файл-запроса работал на других РС, то и папка на этих РС должна быть обязательно такой же (c:\WORK\2017\Exp-PowerQuery\NextQuery\) как и на РС на котором этот запрос сейчас работает. Можно ли этого избежать? Заранее спасибо!