Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 17:09:14

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  PowerQuery, PowerPivot, PowerBI и запросы
| | |-+  Запрос Power Query для таблицы с динамическим количеством столбцов
Страниц: [1]   Вниз
Печать
Автор Тема: Запрос Power Query для таблицы с динамическим количеством столбцов  (Прочитано 13853 раз)
0 Пользователей и 1 Гость смотрят эту тему.
markiza
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 4


Просмотр профиля E-mail
« : 23.08.2017, 18:21:29 »

Здравствуйте! Я загружаю с помощью Power Query в Excel 2016 фин. данные с сайта, где по разным компаниям данные могут быть за разное количество лет. Запрос создавала для таблицы с максимальным количеством столбцов. При попытке загрузить данные по компании, имеющей данные за меньшее количество лет, получаю ошибку, что столбец такой-то не найден. Подскажите, пожалуйста, как переписать запрос, чтобы в запрос подставлялись только те столбцы, которые есть в исходной таблице?

Мой запрос сейчас следующий:
Код: (vb)
 let
    Источник = Web.Page(Web.Contents("https://www.gurufocus.com/financials/" & Excel.CurrentWorkbook(){[Name="ticker1"]}[Content]{0}[Тикер])),
    Data1 = Источник{1}[Data],
    #"Измененный тип" = Table.TransformColumnTypes(Data1,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}, {"Column12", type text}, {"Column13", type text}, {"Column14", type text}, {"Column15", type text}, {"Column16", type text}, {"Column17", type text}, {"Column18", type text}, {"Column19", type text}, {"Column20", type text}, {"Column21", type text}, {"Column22", type text}, {"Column23", type text}}),
    #"Пониженные заголовки" = Table.DemoteHeaders(#"Измененный тип"),
    #"Пониженные заголовки1" = Table.DemoteHeaders(#"Пониженные заголовки"),
    #"Удаленные верхние строки" = Table.Skip(#"Пониженные заголовки1",2),
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Удаленные верхние строки")
in
    #"Повышенные заголовки"
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 23.08.2017, 18:47:14 »

Писал я на эту тему статью где-то месяц назад еще: Собрать данные с таблиц с изменяющимися столбцами в PowerQuery
Как раз Ваш случай. Главное не ленитесь разобраться.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
markiza
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 4


Просмотр профиля E-mail
« Ответ #2 : 24.08.2017, 16:17:37 »

Спасибо за ссылку, я, собственно, и написала на форум после прочтения этой статьи. Подскажите, пожалуйста, как можно просто запросить у источника названия столбцов таблицы без создания дополнительного столбца? Вы создавали столбец, т.к. потом Вам нужно было с ним работать. У меня же очень простая задача - мне лишь нужно загрузить с сайта то количество столбцов с данными, которое имеется по запрашиваемому тикеру (компании). Помогите, пожалуйста. Я попыталась самостоятельно переписать запрос, но выдается ошибка Аргументы 2 были переданы функции, которая ожидает 1.
Код: (vb)
let
    Источник = Web.Page(Web.Contents("https://www.gurufocus.com/financials/" & Excel.CurrentWorkbook(){[Name="ticker1"]}[Content]{0}[Тикер])),
    Data1 = Источник{1}[Data],
    ColNames = Table.ColumnNames(Data1, type list),  
    #"Измененный тип" = Table.TransformColumnTypes(Data1,ColNames)
in
    #"Измененный тип
« Последнее редактирование: 24.08.2017, 16:54:50 от vikttur » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #3 : 24.08.2017, 18:01:25 »

Вы бы хоть чуточку объяснили чего хотите.
Ошибку явно выдает на строке:
#"Измененный тип" = Table.TransformColumnTypes(Data1,ColNames)
Вы понимаете что она делает? Она изменяет типы данных для столбцов. Как правило этот шаг PQ добавляет автоматом и не всегда вообще нужен. И выглядеть этот шаг должен не так, как указано у Вас - синтаксис хромает. Сравните хотя бы со своим кодом из первого сообщения.
Вам для получения заголовков достаточно этой строки:
ColNames = Table.ColumnNames(Data1, type list),
Она как раз и содержит все заголовки таблицы источника.
А далее её надо правильно применять в зависимости от действий. А вот что это за действия я не знаю, следовательно подсказать ничего не могу. В Вашем первом сообщении нет и намека на необходимость использования динамических заголовков, т.к. данные все равно текстовые создаются...
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
markiza
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 4


Просмотр профиля E-mail
« Ответ #4 : 24.08.2017, 18:32:33 »

Да, действительно, этот шаг создался автоматически. Еще раз опишу задачу. Я обращаюсь к одной определенной таблице на сайте, она содержит массу финансовых показателей за разные периоды времени. Каждый раз я запрашиваю данные по разным компаниям и количество столбцов может отличаться, т.к. у каких-то компаний данные могут быть за меньшее, чем у других, количество периодов. Названия столбцов тоже могут отличаться. Мне нужно запросить у источника перечень столбцов и загрузить в Excel данные по всем строкам всех столбцов таблицы. Список заголовков есть, а как мне обратиться к источнику, чтобы загрузить данные?

Если уж быть точной, то не все данные текстовые, большая часть из них числовые, но в целом это не критично, сейчас все загруженные данные имеют Общий формат и меня это устраивает, Excel нормально оперирует числовыми данными.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #5 : 24.08.2017, 18:59:11 »

Мне нужно запросить у источника перечень столбцов и загрузить в Excel данные по всем строкам всех столбцов таблицы
Для этого вообще необязательно получать список столбцов, т.к. Вам надо лишь получить данные и все. Есть подозрение, что вот такого запроса хватит:
Код: (vb)
 let  
    Источник = Web.Page(Web.Contents("https://www.gurufocus.com/financials/" & Excel.CurrentWorkbook(){[Name="ticker1"]}[Content]{0}[Тикер])), 
    Data1 = Источник{1}[Data], 
    #"Пониженные заголовки" = Table.DemoteHeaders(Data1), 
    #"Пониженные заголовки1" = Table.DemoteHeaders(#"Пониженные заголовки"), 
    #"Удаленные верхние строки" = Table.Skip(#"Пониженные заголовки1",2), 
    #"Повышенные заголовки" = Table.PromoteHeaders(#"Удаленные верхние строки") 
in 
    #"Повышенные заголовки"

Просто пропускаем шаг с изменением типа данных.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
markiza
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 4


Просмотр профиля E-mail
« Ответ #6 : 25.08.2017, 18:29:03 »

Огромное спасибо за помощь! Все загружается, как надо.
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru