Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!
Hola a todos
Solo intento averiguar las ventas de años anteriores basándome en la percepción del valor de Kpi por parte del usuario.
Estoy recibiendo el resultado como las ventas del año en curso.
¿Alguien puede explicarme el contexto del filtro y el funcionamiento de este código?
Si es que hay alguna versión optmizada del código. Por favor, házmelo saber.
Ventas del año anterior =
VAR Current_year =
SELECTEDVALUE ( 'Tabla del Calendario'[Año], 0 )
VAR Sales_Current_year =
SWITCH (
SELECTEDVALUE ( 'tabla Kpi'[valor KPI]),
"pérdida", SUM ('Ventas anuales'[Pérdida]),
"Beneficio", SUM ('Ventas anuales'[Beneficios]),
"Ventas", SUM ('Ventas anuales'[Ventas])
)
VAR Previous_year_Sales =
CALCULATE (
Sales_Current_year,
TODOS ('Tabla del Calendario'[Año]),
'Tabla del Calendario'[Año] = Current_year - 1
)
DEVOLUCIÓN
Previous_year_Sales
1)
2)
Gracias
Hola @maverickf17 ,
Gracias por ponerte en contacto con la comunidad Microsoft Fabric.
Solo quería comprobar si tu consulta se ha resuelto y si alguna respuesta ha sido útil.
Si no, no dudes en pedir ayuda adicional.
Gracias.
Las variables DAX son inmutables. Puedes aplicarle operaciones aritméticas, pero no puedes modificar su contexto con CALCULATE.
Previous Year Sales :=
VAR CurrentYear =
SELECTEDVALUE (
'Calendar Table'[Year],
0
)
RETURN
CALCULATE (
SWITCH (
SELECTEDVALUE ( 'Kpi table'[KPI value] ),
"loss", SUM ( 'Yearly sales'[Loss] ),
"Profit", SUM ( 'Yearly sales'[Profit] ),
"Sales", SUM ( 'Yearly sales'[Sales] )
),
ALL ( 'Calendar Table'[Year] ),
'Calendar Table'[Year] = CurrentYear - 1
)
Esa variable se evalúa una vez en el contexto actual del filtro (así que para la fila Year=2022, pasa a ser "Ventas en 2022"). Después de eso, dentro de CALCULATE() no estás reevaluando la lógica SWITCH "nueva" del año anterior—estás pasando un resultado escalar ya evaluado a CALCULATE.
Si tu calendario tiene una columna real de [Fecha] y está marcada como tabla de fechas, y tu tabla de datos está relacionada con ella por Fecha, entonces puedes hacer:
1) Crear una medida base:
KPI Amount =
SWITCH(
SELECTEDVALUE('Kpi table'[KPI value]),
"loss", SUM('Yearly sales'[Loss]),
"Profit", SUM('Yearly sales'[Profit]),
"Sales", SUM('Yearly sales'[Sales]),
BLANK()
)
2) Entonces el año anterior se vuelve trivial:
KPI Amount PY =
CALCULATE( [KPI Amount], DATEADD('Calendar Table'[Date], -1, YEAR) )
¡Hola @maverickf17
Para solucionar esto, la lógica SWITCH debe evaluarse dentro de la función CALCULATE para que pueda responder al filtro de año nuevo.
Utiliza esta versión para asegurarte de que el cálculo respete el cambio interanual:
Previous year Sales =
VAR _CurrentYear = SELECTEDVALUE( 'Calendar Table'[Year] )
VAR _SelectedKPI = SELECTEDVALUE( 'Kpi table'[KPI value] )
RETURN
CALCULATE (
SWITCH (
_SelectedKPI,
"loss", SUM( 'Yearly sales'[Loss] ),
"Profit", SUM( 'Yearly sales'[Profit] ),
"Sales", SUM( 'Yearly sales'[Sales] )
),
REMOVEFILTERS( 'Calendar Table'[Year] ),
'Calendar Table'[Year] = _CurrentYear - 1
)
Las variables en DAX son constantes. Si necesitas que un cálculo cambie en función de un nuevo filtro (como un año anterior), debes realizar la lógica de cálculo directamente dentro de la sentencia CALCULATE o llamar a una medida directamente, en lugar de referenciar una variable precalculada.
Si esta explicación de la transición de contexto resuelve tu error de cálculo, ¡márcalo como la "Solución aceptada"!
Hola @AshokKunwar ,
Por favor, encuentra el siguiente fragmento.
El DAX que proporcionaste no funciona correctamente:
Previous year Sales =
VAR _CurrentYear = SELECTEDVALUE( 'Calendar Table'[Year] )
VAR _SelectedKPI = SELECTEDVALUE( 'Kpi table'[KPI value] )
RETURN
CALCULATE (
SWITCH (
_SelectedKPI,
"loss", SUM( 'Yearly sales'[Loss] ),
"Profit", SUM( 'Yearly sales'[Profit] ),
"Sales", SUM( 'Yearly sales'[Sales] )
),
REMOVEFILTERS( 'Calendar Table'[Year] ),
'Calendar Table'[Year] = _CurrentYear - 1
)
¡Hola @maverickf17
Cuando usas _CurrentYear = SELECTEDVALUE(...) como variable, se fija al año de la fila actual. Si tu Tabla de Calendario tiene relación con tu tabla de ventas anuales, debemos tener mucho cuidado con cómo anulamos ese filtro.
La forma más completa de manejar esto es calcular primero las ventas totales de todos los tiempos y luego aplicar el filtro del año específico. Sustituye tu medida por esta versión:
Previous year Sales =
VAR _CurrentYear = SELECTEDVALUE( 'Calendar Table'[Year] )
VAR _SelectedKPI = SELECTEDVALUE( 'Kpi table'[KPI value] )
RETURN
IF (
ISBLANK(_CurrentYear),
BLANK(),
CALCULATE (
-- Step 1: Perform the Switch logic
SWITCH (
_SelectedKPI,
"loss", SUM( 'Yearly sales'[Loss] ),
"Profit", SUM( 'Yearly sales'[Profit] ),
"Sales", SUM( 'Yearly sales'[Sales] )
),
-- Step 2: Clear the current year filter and force it to Year - 1
ALL( 'Calendar Table' ),
'Calendar Table'[Year] = _CurrentYear - 1
)
)
Revisa tu relación con la Tabla de Calendario . Si la relación está en una columna de Fecha en lugar de una columna de Año (que es estándar), asegúrate de que tu Tabla de Calendario esté marcada como Tabla de Fechas en Power BI. Si no lo es, la lógica de la inteligencia temporal a veces puede comportarse de forma inconsistente.
Si esta lógica actualizada finalmente traslada tus datos de ventas al año correcto, ¡márcalo como la "Solución Aceptada"!