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

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
pmartin28
Frequent Visitor

Comparar con año anterior (pero únicamente hasta el día actual)

Hola,

 

Quiero comparar las ventas del año anterior con el actual. El problema es que el año no está cerrado, por lo que si miro en enero, me puede dar una variación muy grande.

 

Es decir, un cliente igual compra 400.000€ en un año, pero en marzo únicamente lleva gastado 45.000€. Si lo comparo con el año anterior, dará una variación de -88,75%, que no es real, puesto que únicamente debería comparar hasta marzo del año anterior.

 

¿Cómo lo puedo hacer? Con SAMEPERIODLASTYEAR no logro resultados.

 

Muchas gracias,

Un saludo.

1 ACCEPTED SOLUTION

cCalendar = 
ADDCOLUMNS (
CALENDAR (DATE(2018,1,1), TODAY()),
"IdDate", FORMAT ( [Date], "YYYYMMDD" ),
"YearMonth", FORMAT ( [Date], "YYYYMM" ),
"Year", YEAR ( [Date] ),
"Month", FORMAT ( [Date], "MM" ),
"MonthName", FORMAT ( [Date], "mmmm" ),
"ShortMonthName", FORMAT ([Date], "mmm" ),
"WeekNumDay", WEEKDAY ( [Date] ),
"WeekDay", FORMAT ( [Date], "dddd" ),
"Trim", "Q" & FORMAT ( [Date], "Q" ),
"IsPastPY" = IF([Date]<= EDATE(TODAY(),-12),1,0)
)

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

SAMEPERIODLASTYEAR es un componente necesario para su solución, pero no es suficiente. Necesita un filtro adicional "IsPastPY" que sea una columna (calculada) en su tabla de calendario, que indique si una fecha es anterior a "hoy menos un año".

Esto requiere que la tabla del calendario esté en modo de importación, con una actualización diaria.

Hola,

 

Muchas gracias por la respuesta. La tabla de calendario es una tabla creada en DAX y el informe se actualiza cada día, por lo que no habría problema. La tengo creada así:

 

cCalendar = 
ADDCOLUMNS (
CALENDAR (DATE(2018,1,1), NOW()),
"IdDate", FORMAT ( [Date], "YYYYMMDD" ),
"YearMonth", FORMAT ( [Date], "YYYYMM" ),
"Year", YEAR ( [Date] ),
"Month", FORMAT ( [Date], "MM" ),
"MonthName", FORMAT ( [Date], "mmmm" ),
"ShortMonthName", FORMAT ([Date], "mmm" ),
"WeekNumDay", WEEKDAY ( [Date] ),
"WeekDay", FORMAT ( [Date], "dddd" ),
"Trim", "Q" & FORMAT ( [Date], "Q" )
)

¿Cómo tengo que añadir el "IsPastPY"?

 

Saludos.

cCalendar = 
ADDCOLUMNS (
CALENDAR (DATE(2018,1,1), TODAY()),
"IdDate", FORMAT ( [Date], "YYYYMMDD" ),
"YearMonth", FORMAT ( [Date], "YYYYMM" ),
"Year", YEAR ( [Date] ),
"Month", FORMAT ( [Date], "MM" ),
"MonthName", FORMAT ( [Date], "mmmm" ),
"ShortMonthName", FORMAT ([Date], "mmm" ),
"WeekNumDay", WEEKDAY ( [Date] ),
"WeekDay", FORMAT ( [Date], "dddd" ),
"Trim", "Q" & FORMAT ( [Date], "Q" ),
"IsPastPY" = IF([Date]<= EDATE(TODAY(),-12),1,0)
)

Hola,

 

Excelente, ya va cogiendo forma. Ahora veo que en la tabla calendario, tengo la columna y los días del año pasado que todavía no hemos llegado en este, aparecen en 0 y los que sí, como 1.

 

Ahora tengo las dos medidas para comparar:

 

- Ventas de este año

SalesThisYear = CALCULATE(SUM(VwPowerBI_DeliveryNoteSL[TotalNeto]), YEAR(VwPowerBI_DeliveryNoteSL[Date]) = YEAR(TODAY()))

 

- Ventas del año anterior

SalesLastSamePeriod = CALCULATE([M_TotalNeto], SAMEPERIODLASTYEAR(VwPowerBI_DeliveryNoteSL[Date]), FILTER(cCalendar,cCalendar[IsPastPY]=1))

 

Pero algo estoy haciendo mal ya que cuando lo añado en la tabla, me salta el error "No se pueden cargar los datos para este objeto visual" y si hago click en "Más detalles" me dice "MdxScript(model) (62, 64) ERror de cálculo en la medida 'Sales'[SalesLastSamePeriod]: La función "SAMEPERIODLASTYEAR" espera una selección contigua cuando la columna de fecha no es única, tiene intervalos o contiene parte de la hora."

 

Muchísimas gracias,

Un saludo.

Rehaga la tabla del calendario para que las fechas sean contiguas y abarquen. Marque como tabla de fechas para verificar.

Hola,

 

Lo he podido solucionar de la siguiente manera (aplicando dos filtros en un CALCULATE)

SalesLastYearSamePeriod = CALCULATE(SUM(VwPowerBI_DeliveryNoteSL[TotalNeto]), YEAR(VwPowerBI_DeliveryNoteSL[Date]) = YEAR(TODAY()) - 1, cCalendar[IsPastPY]=1)

De esta manera, cojo el TotalNeto filtrado por todo el año anterior pero, además, añadiendo que IsPastPY=1, por lo que no me añadirá los días del año anterior que no han pasado en el año en curso.

 

Muchas gracias,

Un saludo.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors