Traducir transacciones en moneda extranjera según la fecha seleccionada

Un usuario Pregunto ✅

CMarsh

Hola,

Tenemos un modelo que presenta varias monedas diferentes que se remontan a los últimos 5 años y tengo el requisito de mostrar estas transacciones en GBP en una fecha determinada.

El modelo de datos consta de una tabla de hechos que contiene la lista de transacciones y dos tablas de dimensiones, una para fechas y otra para tipos de cambio.

Lo que necesito poder hacer es elegir fechas del calendario y el modelo para luego convertir todas las transacciones en moneda extranjera a GBP según la fecha seleccionada. Por ejemplo, si selecciono todas las transacciones hasta fines de abril de 2019, necesito que el modelo sume todas las transacciones por moneda y luego seleccione el tipo de cambio vigente para cada moneda para abril de 2019. Del mismo modo, si seleccioné julio de 2018, necesitaría para recoger todas las transacciones relevantes y convertirlas a la tasa de julio de 2018.

También vale la pena señalar que, si bien las transacciones se registran diariamente, solo hay una tasa de cambio para cada mes.

Soy bastante nuevo en DAX, ¡así que busco algún consejo, por favor! Capturas de pantalla del modelo de datos cargado a continuación.

Modelo de datos.PNG

¡Gracias por adelantado!

parar2k

En respuesta a CMarsh

@CMarsh usa la siguiente expresión para agregar como la medida

FxRate as Measure = 
VAR __month = CALCULATE( MAX( 'Date'[Date] ), ALLSELECTED( 'Date'[Date] ) )
VAR __firstofMonth = EOMONTH( __month, -1 ) + 1
VAR __currency = MAX( FACT_TRANSACTIONS[[Currency]]] )
RETURN
CALCULATE( MAX( DIM_RATES[FX Rate] ), DIM_RATES[Period] = __firstofMonth, DIM_RATES[Currency] = __currency )

nikilouwgmail

@parry2k
@CMarsh

¿Cuál fue el patrón DAX final para obtener la tasa correcta para cada mes seleccionado?
Tengo un problema similar

https://community.powerbi.com/t5/Desktop/Translated-value-calculation-with-currency-rate-on-separate…

parar2k

@CMarsh ¿Puede compartir datos de muestra en Excel usando onedrive/google drive para obtener su respuesta rápidamente? Elimine cualquier información confidencial antes de compartir.

CMarsh

En respuesta a parar2k

@ parry2k Gracias – enlace a continuación:

Data de muestra

parar2k

En respuesta a CMarsh

@CMarsh agregue la siguiente columna en su hecho para obtener la tasa de cambio de ese mes y luego es bastante fácil a partir de ahí. Ustedes no necesita relación entre DIM_RATES y la pestaña FACT

FxRate = 
LOOKUPVALUE(
    DIM_RATES[FX Rate],
    DIM_RATES[Period],
    EOMONTH( FACT_TRANSACTIONS[[PostingDate]]], -1 ) + 1,
    DIM_RATES[Currency],
    FACT_TRANSACTIONS[[Currency]]]
)

CMarsh

En respuesta a parar2k

@parry2k Gracias por su ayuda, pero desafortunadamente eso no me da lo que necesito.

Para aclarar mi requisito, si selecciono todas las transacciones entre enero y abril de 2019, necesito que el modelo sume todas las transacciones en sus monedas originales y luego convierta el total utilizando las tasas de abril de 2019. Llevando el ejemplo más allá, si luego seleccioné todas las transacciones entre enero y febrero, necesitaría que el modelo sumara todas las transacciones entre esas fechas en sus monedas base y las convirtiera a las tasas de febrero.

A continuación se muestra un ejemplo de lo que busco lograr con los datos de muestra. Los datos se filtran para todas las transacciones entre enero y marzo para la moneda CNY, la tasa FX es la tasa CNY de marzo y la columna Valor GBP es solo la columna O dividida por la tasa FX.

Ejemplo.PNG

parar2k

En respuesta a CMarsh

@CMarsh thst es aún más fácil, básicamente está diciendo que use el mes seleccionado más reciente para la tasa de cambio, no el mes en el que ocurrió la transacción.

CMarsh

En respuesta a parar2k

@parry2k Sí 🙂 Dije que era nuevo en DAX

parar2k

En respuesta a CMarsh

@CMarsh usa la siguiente expresión para agregar como la medida

FxRate as Measure = 
VAR __month = CALCULATE( MAX( 'Date'[Date] ), ALLSELECTED( 'Date'[Date] ) )
VAR __firstofMonth = EOMONTH( __month, -1 ) + 1
VAR __currency = MAX( FACT_TRANSACTIONS[[Currency]]] )
RETURN
CALCULATE( MAX( DIM_RATES[FX Rate] ), DIM_RATES[Period] = __firstofMonth, DIM_RATES[Currency] = __currency )

CMarsh

En respuesta a parar2k

@parry2k Creé una nueva medida y devuelve correctamente la tasa si selecciono todas las fechas de abril; sin embargo, cuando selecciono marzo, no obtengo la tasa de marzo:

abril.PNG

marzo.PNG

parar2k

En respuesta a CMarsh

@CMarsh No estoy seguro de qué está pasando allí, probé en mi extremo con los datos de prueba que proporcionó y funciona bien.

imagen.png

CMarsh

En respuesta a parar2k

@parry2k Acabo de probar la medida en los datos de muestra que compartí y funciona, pero no en los datos en vivo. La única diferencia entre los dos es que los datos en vivo contienen transacciones que se remontan a varios años, por lo que hay datos más antiguos en la tabla de hechos y el calendario obviamente también tiene más fechas (la tabla FX es idéntica). Dicho esto, después de haber analizado la fórmula detrás de la medida, no estoy seguro de qué diferencia haría esto.

CMarsh

En respuesta a CMarsh

@ parry2k Dejé caer la tabla DIM_RATES y la volví a importar, establecí las relaciones nuevamente y ahora funciona perfectamente. ¡Gracias un montón!

parar2k

En respuesta a CMarsh

@CMarsh extraño, de todos modos, no había mucho que pudiera hacer, a veces es difícil darse cuenta sin mirar el modelo real, me alegro de que haya funcionado.

CMarsh

En respuesta a parar2k

@ parry2k eso es extraño: tuve que hacer un pequeño cambio en el código para resolver un error, pero no creo que esté causando un problema:

=
VAR __month = CALCULATE( MAX( DIM_CALENDAR[Date] ), ALLSELECTED( DIM_CALENDAR[Date] ) )
VAR __firstofMonth = EOMONTH( __month, -1 ) + 1
VAR __currency = MAX(FACT_TRANSACTIONS[Currency] )
RETURN
CALCULATE( MAX( DIM_RATES[FX Rate] ), DIM_RATES[Period] = __firstofMonth, DIM_RATES[Currency] = __currency )

parar2k

En respuesta a CMarsh

@CMarsh para que se resuelva o qué?

CMarsh

En respuesta a parar2k

@parry2k no, todavía no funciona, solo muestra los cambios que hice en el código en caso de que viera un error

CMarsh

En respuesta a CMarsh

@ parry2k cada una de las variables está extrayendo los datos correctos, parece ser la fórmula la que está causando el problema:

Parámetros.PNG

Deja un comentario

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