Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

DAX para calcular la suma del mes anterior y mostrar ese valor para el mes actual

¡Allí maestros de Dax!

¿Podría alguien ayudarme a resolver un caso que tengo en mi informe:
para una fila determinada de la matriz ("Opening") en la celda del mes actual, necesito mostrar el valor del mes anterior. Todas las demás filas : el valor del mes actual, pero con algunos 'filtros'
Tengo un borrador de la medida, pero no funciona...

Result = 
VAR start_date =
    CALCULATE ( MIN ( Calendar_start[Date] ), ALLSELECTED ( Calendar_start[Date] ) )
VAR end_date =
    CALCULATE ( MAX ( Calendar_end[Date] ), ALLSELECTED ( Calendar_end[Date] ) )
VAR currentdate =
    SELECTEDVALUE ( 'TABLE'[DAYTIME] )
VAR previousdate =
    EDATE ( currentdate, -1 )

var act_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "ACTUAL",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)
var prod_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "PROD",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)

RETURN   

SWITCH(TRUE(),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Opening", CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[DAYTIME] = previousdate, 'TABLE'[ITEM] = "PROD"),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Lifted", act_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Production", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Closing", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Adjustment", prod_value,
    BLANK())

Hay 3 tablas de calendario en mi informe:
Tablas "Calendar_start", "Calendar_end" para el intervalo de fechas personalizado
y Calendar_table que incluye fechas DISTINCT de la "tabla principal" (la tabla principal tiene que estar en modo de consulta directa, por lo que no puedo agregar nuevas columnas en ella y es por eso que necesito esta tabla adicional) y algunas columnas de formatos de fecha personalizados.

Mi matriz se ve así:
image.png

Supongo que la mecánica de la medida debería ser así: measure busca valor en la tabla CONFIG para una fila en particular, calcula la suma de este valor de la tabla principal (pero donde month es el "mes anterior") y muestra el valor calculado en la columna para el mes actual...

Por favor, compruebe mi archivo de ejemplo para obtener más detalles.

Realmente aprecio cualquier ayuda e ideas!

Gracias de antemano!

otro

1 ACCEPTED SOLUTION

No @inna_sysco,

Pruebe la siguiente fórmula:

Result = 
VAR start_date =
    CALCULATE ( MIN ( Calendar_start[Date] ), ALLSELECTED ( Calendar_start[Date] ) )
VAR end_date =
    CALCULATE ( MAX ( Calendar_end[Date] ), ALLSELECTED ( Calendar_end[Date] ) )
VAR currentdate =
    SELECTEDVALUE ( 'Calendar_table'[DAYTIME] )

var act_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "ACTUAL",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)
var prod_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "PROD",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)
var prev = CALCULATE ( SUM ( 'TABLE'[VALUE] ), ALLSELECTED(Calendar_table[DAYTIME]), FILTER( ALL('TABLE'), 'TABLE'[DAYTIME] <= EOMONTH ( currentdate, -1 ) && 'TABLE'[DAYTIME] > EOMONTH(currentdate,-2)), 'TABLE'[ITEM] = "PROD")

RETURN   

SWITCH(TRUE(),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Opening", IF( MAX(Calendar_table[DAYTIME]) <= end_date && MAX(Calendar_table[DAYTIME]) >= start_date, prev ),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Lifted", act_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Production", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Closing", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Adjustment", prod_value,
    BLANK())

image.png

Si el problema sigue sin resolverse, proporcione información detallada del error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.

Saludos
Winniz

Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

@inna_sysco ,No tengo claro el resultado esperado. ¿Por qué estás demandando a la segunda rebanadora de fechas?

Ya tiene mes año en la columna.

Si necesita MOM con una tabla de fechas

MTD Ventas = CALCULATE(SUM(Sales[Sales Amount]),DATESMTD('Date'[Date]))
last MTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESMTD(dateadd('Date'[Date],-1,MONTH)))

diff = [Ventas MTD]-[últimas Ventas MTD]
diff % = divide([MTD Sales]-[last MTD Sales],[last MTD Sales])

Si necesita comparar dos períodos de elección de las segmentaciones de datos, puede consultar

Cómo usar dos segmentaciones de datos de fecha /período:https://www.youtube.com/watch?v=WSeZr_-MiTg

Hola @amitchandak , gracias por la respuesta!
¿Qué quiere decir con "la segunda rebanadora de fecha"?
Para el informe, necesito que las fechas predeterminadas se estilen en segmentaciones de datos de "hace 6 meses" al "mes anterior". Es el requisito del usuario.
Y el valor predeterminado "entre " la segmentación de datos de Power BI no funciona en este caso
Como puede ver en la imagen que adjunto, faltan valores para la fila OPENING, pero esta fila debe incluir LA SUMA de valores del mes anterior.

No @inna_sysco,

Pruebe la siguiente fórmula:

Result = 
VAR start_date =
    CALCULATE ( MIN ( Calendar_start[Date] ), ALLSELECTED ( Calendar_start[Date] ) )
VAR end_date =
    CALCULATE ( MAX ( Calendar_end[Date] ), ALLSELECTED ( Calendar_end[Date] ) )
VAR currentdate =
    SELECTEDVALUE ( 'Calendar_table'[DAYTIME] )

var act_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "ACTUAL",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)
var prod_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "PROD",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)

RETURN   

SWITCH(TRUE(),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Opening", CALCULATE ( SUM ( 'TABLE'[VALUE] ), ALLSELECTED(Calendar_table[DAYTIME]), FILTER( ALL('TABLE'), 'TABLE'[DAYTIME] <= EOMONTH ( currentdate, -1 ) && 'TABLE'[DAYTIME] > EOMONTH(currentdate,-2)), 'TABLE'[ITEM] = "PROD"),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Lifted", act_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Production", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Closing", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Adjustment", prod_value,
    BLANK())

vkkfmsft_0-1627284248733.png

Si el problema sigue sin resolverse, proporcione información detallada del error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.

Saludos
Winniz

Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola @v-kkf-msft !
Muchas gracias por su respuesta!
Su medida funciona casi perfectamente, pero causa un problema adicional.
Ahora la fila "OPENING" muestra el valor de diciembre , en la columna de enero, el valor de enero , en la columna de febrero. ¡Es perfecto!
image.png
PERO al mismo tiempo, necesito controlar el rango de fechas por 2 segmentaciones de datos personalizadas: "desde la fecha" y "hasta la fecha".
Y como se puede ver en la captura de pantalla de abajo con la nueva medida no puedo hacerlo, porque muestra todos los valores e ignora los filtros de fechas ...
Por ejemplo, no hay datos para abril de 2021 y las segmentaciones de fechas están limitadas para abril de 2021 y es decir, esa tabla tiene que estar vacía, pero vemos esto...
image.png

Tal vez usted sabe cómo solucionar esto?
Realmente apreciar su ayuda!
Saludos cordiales, Inna

Ps. He cambiado el conjunto de datos de ejemplo, se puede encontrar aquí.

No @inna_sysco,

Pruebe la siguiente fórmula:

Result = 
VAR start_date =
    CALCULATE ( MIN ( Calendar_start[Date] ), ALLSELECTED ( Calendar_start[Date] ) )
VAR end_date =
    CALCULATE ( MAX ( Calendar_end[Date] ), ALLSELECTED ( Calendar_end[Date] ) )
VAR currentdate =
    SELECTEDVALUE ( 'Calendar_table'[DAYTIME] )

var act_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "ACTUAL",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)
var prod_value = CALCULATE ( SUM ( 'TABLE'[VALUE] ), 'TABLE'[ITEM] = "PROD",  'TABLE'[DAYTIME] >= start_date  && 'TABLE'[DAYTIME] <= end_date)
var prev = CALCULATE ( SUM ( 'TABLE'[VALUE] ), ALLSELECTED(Calendar_table[DAYTIME]), FILTER( ALL('TABLE'), 'TABLE'[DAYTIME] <= EOMONTH ( currentdate, -1 ) && 'TABLE'[DAYTIME] > EOMONTH(currentdate,-2)), 'TABLE'[ITEM] = "PROD")

RETURN   

SWITCH(TRUE(),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Opening", IF( MAX(Calendar_table[DAYTIME]) <= end_date && MAX(Calendar_table[DAYTIME]) >= start_date, prev ),
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Lifted", act_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Production", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Closing", prod_value,
    SELECTEDVALUE(CONFIG[CHART_SECTION]) = "Adjustment", prod_value,
    BLANK())

image.png

Si el problema sigue sin resolverse, proporcione información detallada del error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.

Saludos
Winniz

Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

¡Hay @v-kkf-msft!

Muchas gracias por su ayuda! Su solución es definitivamente lo que estaba buscando!

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.