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

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

CAMBIO INTERANUAL PARA EL PRIMER AÑO

Hola

La imagen 1, es un informe de matriz con el año de informe en columna, con 2025 y año 2026.

en lugar de usar la inteligencia del tiempo, intenté usar una nueva cal. visual para obtener el cambio entre años usando la fórmula image2.

dado que 2025 es el comienzo del año en esta imagen, el cambio interanual debe estar en blanco. Así que usé la imagen 3..

Pero recibí el mensaje de error en la imagen 3 .. ¿Alguien puede señalar en qué me equivoqué?

gracias Zoey

zraopingm_0-1749148584123.png

zraopingm_1-1749148598028.png

zraopingm_2-1749148614405.png

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

@zraopingm ,

Gracias por ponerse en contacto con el foro de la comunidad de Microsoft Fabric.

Siga los pasos a continuación.

1. Tabla de muestra creada (Tabla) con datos de muestra.

vdineshya_0-1749210684353.png

2. Medida creada (cantidad total) con el código DAX por debajo de.

Importe total = SUMA('Tabla'[TOTAL AMOUNT1])

3. Cálculo visual creado con el siguiente código DAX.

CAMBIO INTERANUAL =
VAR AntImporte =
CALCULAR(
[Importe total],
OFFSET(-1, ORDERBY([Año de reporte]))
)
DEVOLUCIÓN
SI(
ISBLANK(AntCantidad),
EN BLANCO(),
[Importe total] - AntImporte
)

4. Consulte el ajuste de salida, los datos de muestra y el archivo PBIX adjunto.

vdineshya_1-1749210759847.png

Si esta información es útil, por favor "Acéptalo como una solución" y dar un "Felicitaciones" para ayudar a otros miembros de la comunidad a resolver problemas similares de manera más eficiente.
Gracias.

¡¡¡Funcionó!!! y que tuviera sentido y aprendí mucho.

No tengo ni idea de que puedo usar el VAR en Visual cal. ¡Gracias, gracias a todos!!

¡¡Que tengas un gran día en el DAX!!

Syndicate_Admin
Administrator
Administrator

@zraopingm

Por favor, pruebe esto:

Previous Year = 
PREVIOUS([Total Revenue], 1, COLUMNS)

YOY =
VAR _PY =
    PREVIOUS ( [Total Revenue], 1, COLUMNS )
RETURN
    IF ( NOT ( ISBLANK ( _PY ) ), [Total Revenue] - _PY )

danextian_0-1749206476830.png

Syndicate_Admin
Administrator
Administrator

Hola @zraopingm

Pruebe esta medida

CAMBIO INTERANUAL =

VAR CurrentYear = SELECTEDVALUE('Reporting Year'[Year])

VAR PrevYear = CurrentYear - 1

VAR CurrentAmount = [IMPORTE TOTAL]

VAR AntImporte =

CALCULAR(

[IMPORTE TOTAL],

'Año del informe'[Año] = Año anterior

)

DEVOLUCIÓN

SI(

ISBLANK(AntCantidad),

EN BLANCO(),

CurrentAmount - Importe Anterior

)

Gracias
Pankaj Namekar | LinkedIn (en inglés)

Si esta solución ayuda, por favor acéptala y da un aplauso (Me gusta), sería muy apreciado.

Syndicate_Admin
Administrator
Administrator

Hola @zraopingm ,

¡Gracias, Zoey! El problema al que se enfrenta surge de la forma en que hace referencia al año del informe en la fórmula de DAX mediante OFFSET y ORDERBY. Analicemos esto y solucionemos el problema.

El error central
En la tercera imagen, el error indica: "El año del informe no es un valor válido para el parámetro RESET, ya que no está presente en los ejes visuales".

Esto nos indica que, aunque el año del informe está visible en la matriz, no está explícitamente en los ejes de fila o columna del contexto de cálculo visual (especialmente para OFFSET, que depende de un eje de columna con un ámbito adecuado).

Su DAX actual (de la imagen 2)

YOY CHANGE = 
[TOTAL AMOUNT1] - 
CALCULATE(
    SUM([TOTAL AMOUNT1]), 
    OFFSET(-1, ORDERBY([Reporting Year]))
)

Esta sintaxis es casi correcta, pero OFFSET y ORDERBY solo funcionan correctamente si la columna que se utiliza ([Año de notificación]) está en los ejes visuales y tiene el ámbito adecuado para cada contexto de cálculo.

Enfoque fijo
Debe agregar SELECTCOLUMNS y REMOVEFILTERS para mejorar el ámbito del contexto del año de informe para que la función OFFSET funcione correctamente.

Pruebe el siguiente cálculo visual revisado:

YOY CHANGE =
IF(
    ISFILTERED('YourDateTable'[Reporting Year]), 
    [TOTAL AMOUNT1] -
    CALCULATE(
        SUM([TOTAL AMOUNT1]),
        OFFSET(
            -1,
            ORDERBY('YourDateTable'[Reporting Year]),
            PARTITIONBY([DIR IND CODE])
        )
    )
)

O bien, si usa un cálculo visual en la interfaz de Medición rápida de Power BI, pruebe:

YOY CHANGE =
VAR CurrentAmount = [TOTAL AMOUNT1]
VAR PrevAmount =
    CALCULATE(
        [TOTAL AMOUNT1],
        OFFSET(
            -1,
            ORDERBY('YourDateTable'[Reporting Year]),
            PARTITIONBY([DIR IND CODE])
        )
    )
RETURN
    IF(
        ISINSCOPE('YourDateTable'[Reporting Year]) && 
        NOT ISBLANK(PrevAmount),
        CurrentAmount - PrevAmount
    )

Cosas para recordar:

  • Utilice PARTITIONBY si desea calcular el cambio dentro de cada código DIR.
  • Asegúrese de que el año del informe sea una columna adecuada en la tabla de fechas y que se utilice de forma coherente en las columnas de la matriz.
  • Evite usar el año de informe directamente sin definir el alcance cuando OFFSET esté involucrado.
  • ISINSCOPE garantiza que su primer año (2025) permanezca en blanco en YOY.

Si aún se produce un error:

Asegurar:

  • La matriz utiliza 'YourDateTable' [Reporting Year] de la tabla de dimensiones de fecha adecuada.

  • No se utiliza una columna calculada como YEAR([Date]) de las tablas de hechos.

  • La columna no se renombra en el modelo, por ejemplo, si solo es "Año" en el modelo, use ese nombre exacto.

Si esta solución le resultó útil, considere aceptarla y felicitarla (Me gusta), es muy apreciada y ayuda a otros a encontrar la solución más fácilmente.


Saludos
Nasif Azam

¡Gracias!

Utilicé la medida para resolver el problema, pero al mismo tiempo traté de resolverlo en cal. visual para el aprendizaje. esto se descarga directamente sin tabla de fechas, así que usé su idea. y recibí este mensaje de error:.

El objetivo es que el cambio interanual para 2025 esté en blanco, ya que 2024 está filtrado. Si no hay un año de informe anterior, entonces el cambio interanual es cero o está en blanco. ¡Gracias por su tiempo

zraopingm_0-1749155287215.png

 

¡Gracias de nuevo por la atenta respuesta! Realmente aprecio su objetivo de aprender a usar los cálculos visuales de manera efectiva en lugar de usar medidas predeterminadas, es una manera increíble de impulsar sus habilidades de DAX más allá.

El error:

El error en la captura de pantalla dice:

"La referencia de columna no se puede usar a menos que se garantice que es única en el contexto".

Esto suele suceder porque está utilizando 'DIR IND CODE' dentro de un contexto de cálculo visual sin ajustarlo correctamente. A diferencia de las medidas en las que los filtros se aplican de forma natural, los cálculos visuales necesitan un ámbito de contexto explícito para resolver columnas como esta.

Arreglando el cálculo visual:

Ya estás usando la idea correcta con OFFSET() y ORDERBY(), pero aquí te explicamos cómo definir el contexto por completo:

YOY CHANGE = 
VAR CurrentAmount = [TOTAL AMOUNT1]
VAR PrevAmount =
    CALCULATE(
        [TOTAL AMOUNT1],
        OFFSET(
            -1,
            ORDERBY('YourTableName'[Reporting Year]),
            PARTITIONBY('YourTableName'[DIR IND CODE])
        )
    )
RETURN
    IF(
        ISINSCOPE('YourTableName'[Reporting Year]) &&
        NOT ISBLANK(PrevAmount),
        CurrentAmount - PrevAmount
    )

Correcciones clave:

  • Envuelva [DIR IND CODE] en PARTITIONBY() en lugar de hacer referencia directa a él.

  • Asegúrese de que tanto el año de informe como el código DIR IND provengan de una sola tabla (no de columnas calculadas o renombradas de otras tablas).

  • ISINSCOPE() borra de forma segura el primer año (como 2025) si no existe ningún año anterior.

Cosas para recordar:

  • Si los datos no proceden de una tabla de fechas, asegúrate de que el año del informe sea una columna numérica u ordenada, de lo contrario, ORDERBY() no se comportará como se esperaba.

  • Si el AMOUNT1 TOTAL es una medida, estás bien. Si se trata de una columna, deberá cambiar SUM([TOTAL AMOUNT1]) para que coincida con su lógica.

  • Si sigues recibiendo errores, prueba a usar SELECTCOLUMNS o REMOVEFILTERS para asegurarte de que el contexto está limpio.

Si esta solución le resultó útil, considere aceptarla y felicitarla (Me gusta), es muy apreciada y ayuda a otros a encontrar la solución más fácilmente.


Saludos
Nasif Azam

¡Gracias de nuevo por la atenta respuesta! Realmente aprecio su objetivo de aprender a usar los cálculos visuales de manera efectiva en lugar de usar medidas predeterminadas, es una manera increíble de impulsar sus habilidades de DAX más allá.

El error:

El error en la captura de pantalla dice:

"La referencia de columna no se puede usar a menos que se garantice que es única en el contexto".

Esto suele suceder porque está utilizando 'DIR IND CODE' dentro de un contexto de cálculo visual sin ajustarlo correctamente. A diferencia de las medidas en las que los filtros se aplican de forma natural, los cálculos visuales necesitan un ámbito de contexto explícito para resolver columnas como esta.

Arreglando el cálculo visual:

Ya estás usando la idea correcta con OFFSET() y ORDERBY(), pero aquí te explicamos cómo definir el contexto por completo:

YOY CHANGE = 
VAR CurrentAmount = [TOTAL AMOUNT1]
VAR PrevAmount =
    CALCULATE(
        [TOTAL AMOUNT1],
        OFFSET(
            -1,
            ORDERBY('YourTableName'[Reporting Year]),
            PARTITIONBY('YourTableName'[DIR IND CODE])
        )
    )
RETURN
    IF(
        ISINSCOPE('YourTableName'[Reporting Year]) &&
        NOT ISBLANK(PrevAmount),
        CurrentAmount - PrevAmount
    )

Correcciones clave:

  • Envuelva [DIR IND CODE] en PARTITIONBY() en lugar de hacer referencia directa a él.

  • Asegúrese de que tanto el año de informe como el código DIR IND provengan de una sola tabla (no de columnas calculadas o renombradas de otras tablas).

  • ISINSCOPE() borra de forma segura el primer año (como 2025) si no existe ningún año anterior.

Cosas para recordar:

  • Si los datos no proceden de una tabla de fechas, asegúrate de que el año del informe sea una columna numérica u ordenada, de lo contrario, ORDERBY() no se comportará como se esperaba.

  • Si el AMOUNT1 TOTAL es una medida, estás bien. Si se trata de una columna, deberá cambiar SUM([TOTAL AMOUNT1]) para que coincida con su lógica.

  • Si sigues recibiendo errores, prueba a usar SELECTCOLUMNS o REMOVEFILTERS para asegurarte de que el contexto está limpio.

Si esta solución le resultó útil, considere aceptarla y felicitarla (Me gusta), es muy apreciada y ayuda a otros a encontrar la solución más fácilmente.


Saludos
Nasif Azam

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

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

Top Solution Authors