Я только начал погружать свои пальцы в мир М (я купил книгу и все такое!), Поэтому я надеюсь, что один из вас, замечательные люди, сможет мне помочь:)
Я использую Power Query для извлечения данных из таблиц на веб-сайте на нескольких страницах
К счастью для меня, URL для них заканчивается на “page=1”
и т. Д.
Я загрузил каждую страницу какотдельное соединение (только соединение) и иметь мастер-лист, в котором все они добавлены вместе.Каждое соединение имеет имя “Page 1”
, “Page 2”
и т. Д.
Исходный код:
let
Source = Table.Combine({#"Page 1", #"Page 2", #"Page 3", #"Page 4", #"Page 5", #"Page 6", #"Page 7", #"Page 8", #"Page 9", #"Page 10", #"Page 11", #"Page 12", #"Page 13"})
in
Source
Количество страниц, на которых имеются данные, изменяется во временивремя, и я хочу найти способ динамической загрузки только до количества доступных страниц
(Оказывается, этот сайт повторяет последнюю страницу, если вы поместите номер страницы выше, чем максимальное количество страниц, поэтомуон дублирует их в моей основной таблице, потому что я загружаю 30 страниц)
Итак, в примере, где есть только 8 страниц с данными, я хочу, чтобы они загружались:
let
Source = Table.Combine({#"Page 1", #"Page 2", #"Page 3", #"Page 4", #"Page 5", #"Page 6", #"Page 7", #"Page 8"})
in
Source
К счастью для меня, “Page 1 of 8”
находится на отдельной строке на веб-сайте, поэтому я могу легко разобрать «8» с помощью Power Query
Быстрый поиск вызвал эторешение
Это похоже на хороший план!Я могу выучить немного M!
Но я не хочу использовать отдельный файл, поэтому, ища больше, я нашел другое решение, включающее использование Excel.CurrentWorkbook(){[Name="TabelName"]}[Content]
, поэтому я объединил его свыше, чтобы получить:
Source = Excel.CurrentWorkbook(){[Name="TableName"]}[Content],
CombineTable = Table.Combine(Source[Column1])
in
CombineTable
И я создал таблицу с именем TableName
с ‘Page 1’
до ‘Page 30’
вниз, окружив ее оператором IF
, чтобы онбыть пустым в этой ячейке, если она превышает число страниц
Бросил это в расширенный редактор. Он увидел ‘Page 1’
, но не смог сделать из него таблицу
У меня естьВо всяком случае, есть более простой способ сделать это, но мой Google-Fu подводит меня здесь.Кажется, это должно быть действительно легкое решение, ха-ха
Я был бы бесконечно благодарен, если кто-нибудь может указать мне в направлении элегантного решения:)
-EDIT- Код для каждогосоединение (URL-адрес является внутренним служебным URL-адресом, поэтому я просто заменил его на URL
):
let
Source = Web.Page(Web.Contents("https://URL&page=1")),
Data0 = Source{0}[Data],
#"Changed Type" = Table.TransformColumnTypes(Data0,{{"", type text}, {"Policy number", type text}, {"Creation date and time", type text}, {"Deadline", type text}, {"Case Ref", type text}, {"Lock User", type text}}),
#"Removed Bottom Rows" = Table.RemoveLastN(#"Changed Type",2),
#"Changed Type1" = Table.TransformColumnTypes(#"Removed Bottom Rows",{{"Creation date and time", type datetime}, {"Deadline", type datetime}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{""})
in
#"Removed Columns"
И вот код для получения номера страницы:
let
Source = Web.Page(Web.Contents("https:URL&page=1")),
Data0 = Source{0}[Data],
#"Changed Type" = Table.TransformColumnTypes(Data0,{{"", type text}, {"Policy number", type text}, {"Creation date and time", type text}, {"Deadline", type text}, {"Case Ref", type text}, {"Lock User", type text}}),
#"Removed Top Rows" = Table.Skip(#"Changed Type",21),
#"Removed Other Columns" = Table.SelectColumns(#"Removed Top Rows",{"Creation date and time"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Other Columns", "Creation date and time", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Creation date and time.1", "Creation date and time.2", "Creation date and time.3", "Creation date and time.4"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Creation date and time.1", type text}, {"Creation date and time.2", Int64.Type}, {"Creation date and time.3", type text}, {"Creation date and time.4", Int64.Type}}),
#"Removed Other Columns1" = Table.SelectColumns(#"Changed Type1",{"Creation date and time.4"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns1",{{"Creation date and time.4", "I&W - Retail - Pages"}})
in
#"Renamed Columns"