API de tipo de cambio histórico

Un usuario Pregunto ✅

MarcoNeukom

Hola,

Estoy buscando una manera de obtener tipos de cambio históricos en mi informe (también tipos actualizados diariamente) y he estado buscando en ecb.europa.eu y su API restante, pero me resulta difícil;

¿Alguien sabe una manera bastante fácil de obtener estas cifras?

Descargo de responsabilidad; No tengo habilidades de desarrollador, solo soy analista de negocios, obviamente…

janvanwerkhoven

En respuesta a MarcoNeukom

@MarcoNeukom Sugeriría primero crear una tabla con fechas secuenciales en cada fila. Luego, al invocar la función, enviará las fechas a la función una por una, devolviendo así la información del tipo de cambio de cada día. Puede usar este ejemplo que primero genera una lista de fechas de los últimos 365 días (esto se actualiza con cada actualización) e invoca la función:

let
    Source = {Number.From(Date.AddDays(DateTime.Date(DateTime.LocalNow()),-365))..Number.From(DateTime.Date(DateTime.LocalNow()))},
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type date}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "Date"}}),
    #"Invoked Custom Function" = Table.AddColumn(#"Renamed Columns", "ExchangeRates", each Fn_GetHistoricExchangeRates(Date.ToText([Date],"yyyy-MM-dd"))),
    #"Expanded ExchangeRates" = Table.ExpandTableColumn(#"Invoked Custom Function", "ExchangeRates", {"Currency", "Rate"}, {"Currency", "Rate"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Expanded ExchangeRates",{{"Rate", type number}, {"Currency", type text}})
in
    #"Changed Type1"

Para que funcione, debe crear una función llamada Fn_GetHistoricExchangeRates, utilizando el código de mi publicación anterior.

¡Espero que ayude!

ene

RBnNC

Se puede hacer en PBRS de ChristianSteven

Teige Gao

Hola @MarcoNeukom,

Usaré datos de este sitio web: https://www.x-rates.com/historical/?from=USD&amount=1&date=2019-07-17, podemos cambiar la URL a la fecha especificada para obtener tipos de cambio históricos. Luego podemos usar el conector web en PowerBI para obtener los datos de ellos:
PBIDEsktop_cEiyWMRHcJ.png

Atentamente,

Teigio

MarcoNeukom

En respuesta a Teige Gao

¿Así que actualizas la URL cada vez que quieres nuevos datos?

Debería ser posible obtener los datos más recientes agregados a sus consultas anteriores y respuestas almacenadas en caché.

MarcoNeukom

En respuesta a Teige Gao

Hola @TeigeGao,

Gracias por tu respuesta.

Debería haber sido más específico:

Lo que estoy tratando de lograr es tener un gráfico de líneas con tasas históricas que se actualice con nuevos puntos de datos todos los días.

ECB tiene una sintaxis para hacer eso, pero parece que no puedo hacer que funcione.

https://sdw-wsrest.ecb.europa.eu/help/

janvanwerkhoven

En respuesta a MarcoNeukom

@MarcoNeukom Recientemente creé una función simple que extrae información sobre el tipo de cambio del sitio https://exchangeratesapi.io/ que obtiene sus datos del sitio del BCE:

let
    Source = (Date as text) => let
        Source = Json.Document(Web.Contents("https://api.exchangeratesapi.io/" & Date & "?base=USD")),
        rates = Source[rates],
        #"Converted to Table" = Record.ToTable(rates),
        #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Name", "Currency"}, {"Value", "Rate"}})
    in
        #"Renamed Columns"
in
    Source

Usando una tabla de fechas o un rango de fechas generado, puede invocar la función personalizada de esta manera:

= Table.AddColumn(#"Removed Other Columns", "Rates", each Fn_GetHistoricCurrencyRates(DateTime.ToText([Date],"yyyy-MM-dd")))

¡Espero que ayude!

ene

MarcoNeukom

En respuesta a janvanwerkhoven

@janvanwerkhoven esto parece prometedor, también me topé con ese sitio.

Soy totalmente inexperto con esto; La «función de invocación» me permite ingresar el parámetro como fecha. ¿Debería completar un rango de fechas y luego usar la segunda función que menciona?

janvanwerkhoven

En respuesta a MarcoNeukom

@MarcoNeukom Sugeriría primero crear una tabla con fechas secuenciales en cada fila. Luego, al invocar la función, enviará las fechas a la función una por una, devolviendo así la información del tipo de cambio de cada día. Puede usar este ejemplo que primero genera una lista de fechas de los últimos 365 días (esto se actualiza con cada actualización) e invoca la función:

let
    Source = {Number.From(Date.AddDays(DateTime.Date(DateTime.LocalNow()),-365))..Number.From(DateTime.Date(DateTime.LocalNow()))},
    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type date}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "Date"}}),
    #"Invoked Custom Function" = Table.AddColumn(#"Renamed Columns", "ExchangeRates", each Fn_GetHistoricExchangeRates(Date.ToText([Date],"yyyy-MM-dd"))),
    #"Expanded ExchangeRates" = Table.ExpandTableColumn(#"Invoked Custom Function", "ExchangeRates", {"Currency", "Rate"}, {"Currency", "Rate"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Expanded ExchangeRates",{{"Rate", type number}, {"Currency", type text}})
in
    #"Changed Type1"

Para que funcione, debe crear una función llamada Fn_GetHistoricExchangeRates, utilizando el código de mi publicación anterior.

¡Espero que ayude!

ene

mariusmc2

En respuesta a janvanwerkhoven

Solo tenga en cuenta que esto no se puede usar en el servicio Power BI, se incluye en un conjunto de datos dinámico y no se puede actualizar:

https://docs.microsoft.com/en-us/power-bi/connect-data/refresh-data#refresh-and-dynamic-data-sources

kristenc

En respuesta a mariusmc2

Puede reformular la consulta de esta manera utilizando RelativePath (consulte el excelente blog de Chris Webb sobre esta solución para fuentes de datos dinámicas):

let
    Source = (Date as text) => let
        Source = Json.Document(
            Web.Contents("https://api.exchangeratesapi.io/",
             [RelativePath = "Date",
             Query = 
                [base="USD"]])),
        rates = Source[rates],
        #"Converted to Table" = Record.ToTable(rates),
        #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Name", "Currency"}, {"Value", "Rate"}})
    in
        #"Renamed Columns"
in
    Source

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *