Страницы: 1
RSS
Изменение даты на предыдущую в запросе PQ на курс валют ЦБР если нет данных
 
Добрый день!
Собираю данные по курсам редких валют с ЦБР.
По этим валютам отсутствуют данные на определенные даты. Как правило, это выходные. От выходных я избавился.
Однако, оказалось, что нет данных в период с 30 марта по 05 апреля. И, возможно, такое может повториться в будущем.
Подскажите, пожалуйста, как изменить запрос, что бы при отсутствии данных на определенную дату, запрос искал первую раннюю дату с  данными.
 
Вам нужно, чтобы функция правильно обрабатывала ошибку отсутствия таблицы в исходнике. Зависит от того, что возвращает сайт ЦБ к отсутствующей дате. В общем, функцию надо переписать так, чтобы если нет таблицы, возвращался null или пустая таблица с теми же столбцами. Если при запросе ошибка типа 404, погуглите использование параметра ManualStatusHandling внутри функции Web.Contents
F1 творит чудеса
 
Здесь помогал в решении подобной задачи. Может быть вам чем-то поможет?
Вот горшок пустой, он предмет простой...
 
Andrey_S,как вариант, закачивать курсы за период. Запрос для доллара. В запросе проблема: сортировка странно работает. Этот момент надо обыграть
Код
// Таблица1 (2)
let
    Источник = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"Дата", type date}}),
    Custom1 = Xml.Tables(Web.Contents("http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1="&Date.ToText(Date.From(
    List.Min(Источник[Дата])))&"&date_req2="&Date.ToText(Date.From(List.Max(Источник[Дата])))&"&VAL_NM_RQ=R01235"))[Record]{0},
    Merge = Table.TransformColumnTypes(Table.RenameColumns(Custom1,{{"Attribute:Date", "Дата"}}),{{"Дата", type date}})&Источник,
    Sort = Table.FillDown(Table.Sort(Merge,{{"Дата",Order.Ascending}}),{"Value"}),
    Filter = Table.SelectRows(Sort, each ([Nominal] = null))[[Дата],[Value]]
in
    Filter
 
Спасибо всем за предложенные варианты. Буду пробовать.
 
Готово, 2 варинта.
Пробуйте.
вариант 1 - собираем данные за весь период из него выбираем даты
вариант 2 - собираем данные за 10 дней перед нужной датой, затем выбираем дату,  максимально близкую к дате запроса

Я бы посоветовал вариантом 1 создать таблицу общую с курсами, если пользуетесь этим постоянно, и из таблицы уже из своей брать курсы на нужную дату.
Вариант 2 - если нужно пользоваться время от времени.

Вариант 2 собран через List.Generate К сожалению не знаю как прервать счетчик, если кто-то из более опытных коллег знает как прерывать счетчик, можно было бы сократить количество запросов до нужного числа.
Изменено: lostandleft - 30.06.2020 16:31:45
 
lostandleft,Спасибо!  
 
lostandleft, вот тут я предлагал условные циклы обращения к ресурсу, и если нет, то обращаемся к предыдущей дате. Как  рекурсией, так и при помощи List.Generate. Можете попробовать адаптировать под ваши нужды.
Вот горшок пустой, он предмет простой...
 
Цитата
Михаил Л написал:
Table.Sort(Merge,{{"Дата",Order.Ascending}}),
Все таки не дает покоя :)
По какой закономерности, в данном случае и вообще, сортируются строки при одинаковых значениях?
Раньше думал что по очередности строк, то есть если в сортируемом столбце, например, такая растановка - 5,4,1,3,1,6 , то сортировка по возрастанию будет такой: 1,1,3,4,5,6, первой единицей будет третье значение, второй - пятое.
В запросе я не увидел закономерности отбора первого и второго
 
Цитата
Михаил Л написал:
в данном случае и вообще, сортируются строки при одинаковых значениях?
а смотря в каком порядке они попадут в сортировщик, я так думаю. Если таблица большая, порядок х.з. какой. Если небольшая - скорее всего в том же порядке, как они расположены друг относительно друга
F1 творит чудеса
 
Михаил Л, ух как интересно. На этом много разных алгоритмов завязано, а тут такое.
Это что же теперь еще и таблицы перед комбайном нумеровать и сортировать по двум полям надо. Кстати, раньше вроде нормально работало. Такой ерунды не замечал.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Кстати, раньше вроде нормально работало
Вот и мне так помнится
Может, основатели с каким то обновлением что то крутанули не так и не знают об этом :)
Может, у кого есть Power Query без обновлений, проверили бы - результат одинаков или нет
Изменено: Михаил Л - 02.07.2020 14:25:45
 
да как мне кажется, не было никогда обещания, что при сортировке как-то влияет порядок строк... И практически на 100% уверен, что уже не раз здесь на планете встречались такие кейсы. В данном случае достаточно половины таблетки:
Код
= Table.Sort(Merge,{{"Дата", Order.Ascending}, {"Value", Order.Descending}})
F1 творит чудеса
 
Максим Зеленский, здесь то понятно, но для интервального просмотра часто использую бутерброд типа
Код
= Справочник & Факты & Справочник

а дальше сортировка и FillDown/Up. И ведь тестировал, все отлично работало. А тут такое. В общем придется теперь озаботиться доп. полями для сортировки. И лопатить старые решения.  :cry:
Вот горшок пустой, он предмет простой...
 
PooHkrd, уточните на всякий на течнете. Может и правда там есть особенности, которых раньше не было. Но почти уверен, что получите ответ "due to streaming semantics of tables,..."
F1 творит чудеса
 
Фильтр в выгруженной таблице сортирует как надо
Изменено: Михаил Л - 02.07.2020 22:05:03
 
Спасибо большое Михаил Л,. При таком подходе котировки загружаются быстрее. Для фильтрации данных использовал рекомендации Максим Зеленский,
Страницы: 1
Наверх