Saltar al contenido
Categoría: Análisis de Datos
2020-03-17

💲 Aprendiendo a Convertir Divisas con Power BI

Cuando trabajamos con multinacionales una de las partes clave de nuestro modelo es la Conversión a diferentes Divisas, ya que, se realizan pagos desde diferentes países con diferentes monedas y los usuarios que visualicen los informes deben de poder verlos en la divisa que ellos elijan.

En esta entrada os voy a exponer un ejemplo real que tuvimos que implementar en la solución de BI de un cliente.

Para empezar os voy a mostrar como quedaría el modelo terminado y después describiré una a una cada tabla.

Sales

En nuestro modelo la tabla Sales seria la tabla de hechos. Si exploramos esta tabla podemos observar el identificador de la transacción (IDRowMT), la fecha (dTransDay), el importe (SalesAmount) y el identificador y el nombre de la Divisa de la transacción.

Currency y Dim Date

Estas son dos dimensiones normales pero gracias a ellas vamos a poder relacionar la tabla de conversión de divisas (CurrencyConversion) con las tablas de hechos (Sales). Si necesitáis mas información sobre cómo crear una dimensión de tiempo podéis encontrarla aquí

Currency Conversion

En esta tabla podemos encontrar el Ratio de Cambio diario de monedas como DOP, EUR, USD y COP a USD,  ya que, este ratio varía cada día.

Siempre tenemos que elegir una moneda como principal y de ahí hacer la conversión a las demás. En este ejemplo utilizamos USD como moneda principal.

Como podéis observar en la siguiente imagen, en la primera línea nos indica que para el día 01/01/2019,  1 USD equivale a 50,54502 DOP.

Reporting Currency

Como podéis observar a continuación, esta dimensión es idéntica a Currency, pero es la que utilizaremos únicamente cuando queramos visualizar el cambio de moneda, ya que, si utilizáramos la dimensión Currency, esta nos filtraría por las ventas que se hayan hecho con el tipo de moneda.

Una vez tengamos el modelo planteado y entendiendo para que se utiliza cada dimensión, podemos proceder a crear las columnas calculadas y medidas para hacer la conversión a diferentes divisas.

Empezaremos creando la columna calculada Sales Amount $. Esta columna es la que se va a encargar de hacer la conversión de la moneda en la que se haya hecho la transacción a USD. Como podéis ver en la primera fila, 3,75 EUR serian 4,13 USD.

Si observáis, el cálculo es muy sencillo: consiste en dividir el importe de la venta por la tasa de conversión cuando la tasa de conversión sea igual a la fecha de la venta y a la moneda de la venta.

Si quisiéramos hacer la conversión de divisas diaria a otra moneda, deberíamos crear la siguiente columna calculada Sales Amount €, en la cual multiplicamos el importe  Sales Amount $ por la tasa de conversión a EUR como podemos observar en la siguiente imagen.

En nuestro caso, el cliente que nos pidió esta tarea, quería una serie de medidas en las que apareciera su importe por la media del ratio del cambio de divisa dentro de un periodo de tiempo seleccionando y con todas las divisas. Para ello creamos la siguiente medida:

1Rate * Sales Amount $ = AVERAGE ( CurrencyConversion[Rate] )* SUM(Sales[Sales Amount $])

Al entregarle la medida al cliente, nos indicó que el total no tenia ningún sentido, ya que, el cálculo que hacia, era la suma del importe por la media de todas las divisas que teníamos en la tabla de Currency Conversion.

Por esta razón, nos vimos en la necesidad de crear una medida que cuando calculara su total, en vez de realizar un SUM, AVG, MAX o MIN hiciera el sumatorio del importe sin multiplicar por el ratio del cambio de divisa. En la imagen anterior, se puede observar el funcionamiento de la medida y en la siguiente, os dejo el código de la medida:

HAS1VALUE = 
IF (
    HASONEVALUE ( 'Reporting Currency'[ISOCurrency] );
  AVERAGE ( CurrencyConversion[Rate] )* SUM(Sales[Sales Amount $]); SUM(Sales[SalesAmount]
))

Podéis descargar el .pbix con todas las columnas calculadas, medidas, etc desde el siguiente link.

Si quieres que ayudemos a tu negocio o empresa contacta con nosotros en info@aleson-itc.com o llámanos al +34 962 681 242