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.
¡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.
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:
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.
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: