Страницы: 1
RSS
Динамическая ссылка в названии источника. PQ
 
Всем привет!
Нужно в коде в источнике запроса установить переменную  в виде даты, со ссылкой на другой запрос
Код
Источник = Web.Page(Web.Contents("http://www.cbr.ru/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=[Дата]")),
[Дата] - это переменная, ссылка на запрос Дата
 
Adamm,
Код
Web.Page(Web.Contents("http://www.cbr.ru/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=" & Text.From(Date.From(Excel.CurrentWorkbook(){[Name="Дата"]}[Content]{0}[Столбец1]))))

или
Код
Web.Page(Web.Contents("http://www.cbr.ru/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=" & Дата))
Изменено: Антон - 18.09.2021 11:49:30
 
Антон, первый вариант работает, а второй нет, спасибо!
 
Adamm, все правильно, т.к. у вас в запросе "дата" не дата в виде текста, а дата + время
 
Исправил, так компактнее
Код
= Web.Page(Web.Contents("http://www.cbr.ru/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=" & Text.From(Date.From(Дата))))
 
В продолжение темы, как можно проджойнить данный запрос, что бы в результате получить таблицу скажем за год с курсами валют, то есть источник данных соединить с календарем на год, руками я замучаюсь...
 
Код
let
    a = Table.FromColumns({List.Dates(#date(2021, 09, 01), 5, #duration(1, 0, 0, 0))}),
    b = Table.AddColumn(a, "q", each Web.Page(Web.Contents("http://www.cbr.ru/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=" & Text.From([Column1])))[Data]{1}),
    c = Table.ExpandTableColumn(b, "q", Table.ColumnNames(b[q]{0}))
in
    c
 
Антон, можете пояснить
a. - создаем список дат
b. - добавляем столбец "q" с источником данных в каждой ячейке даты
c. - разворачиваем в таблицу

не пойму как происходит обновление даты вот в этой части?
Код
& Text.From([Column1])))[Data]{1}),
ведь тут мы привязались к таблице "Дата", а там значение статично
 
Adamm, уберите [Data]{1}, станет более понятно
 
Антон, все осознал, "Column1" это и есть ссылка на "a", точнее на каждую ячейку, спасибо!
 
Цитата
Adamm написал:
что бы в результате получить таблицу скажем за год с курсами валют,
Не надо так делать. Во первых у ЦБР есть открытый api, по которому можно получать данные как за один день (Example 1), так и за любой нужный период сразу одним запросом (Example 2).
Тот вариант что вы придумали будет медленный и ненадежный.
К тому же нужно обратить внимание что за выходные и праздничные дни ЦБР курсы не выдает, поэтому рекомендую выгружать диапазон со стартовой датой дней на 10 ранее нужного срока, получить таблицу с курсами, приджойнить ее к календарю со сквозными датами, а после джойна еще сделать по столбцу с курсами заполнение вниз. Вот тогда уже результат будет не стыдно грузить в модель.
Вот горшок пустой, он предмет простой...
 
Присоединяюсь к PooHkrd. В своей модели считаю средний курс за месяц, но можно убрать лишнее. И да, мне лень добавить к календарю несколько дней, поэтому есть заполнение вверх для первых чисел января 2019;)
Код
let
    src = Xml.Tables(Web.Contents("http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=20/12/2018&date_req2="&Text.From(Date.From(DateTime.LocalNow()))&"&VAL_NM_RQ=R01235"))[[Record]],
    expandRate = Table.ExpandTableColumn(src, "Record", {"Value", "Attribute:Date"}),
    rename = Table.RenameColumns(expandRate,{{"Attribute:Date", "Name"}}),
    tblToRec = Record.FromTable(rename),
    
    addCalenar = Table.AddColumn(#"спр_Календарь продажи"[[Дата], [Дата_НачалоМесяца]], "Курс", each Record.FieldOrDefault(tblToRec, Text.From([Дата]), null), type number),

    sort = Table.Sort(addCalenar,{{"Дата", Order.Ascending}}),
    fillDown = Table.FillDown(sort,{"Курс"}),
    fillUp = Table.FillUp(fillDown,{"Курс"}),
    group = Table.Group(fillUp, {"Дата_НачалоМесяца"}, {{"Курс_Среднее за месяц", each List.Average([Курс]), type number}}),
    addRecsName2 = Table.AddColumn(group, "Name", each Text.From([Дата_НачалоМесяца]), type text),
    tblToRec2 = Record.FromTable(Table.RenameColumns(addRecsName2,{{"Курс_Среднее за месяц", "Value"}})[[Name],[Value]])
in
    tblToRec2
Изменено: surkenny - 19.09.2021 14:25:37
 
Цитата
surkenny написал:
И да, мне лень добавить к календарю несколько дней, поэтому есть заполнение вверх для первых чисел января 2019;)
Это не правильно во время праздников и выходных дней действует курс на предыдущий день. Можете не верно посчитать показатели. Так что настоятельно керемендую отпинать от себя лень и делать как надо, а как не надо не делать!  8)
Вот горшок пустой, он предмет простой...
 
Спасибо за советы!
Страницы: 1
Наверх