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

Prepping for a Fabric certification exam? Join us for a live prep session with exam experts to learn how to pass the exam. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Ayuda con la creación de medidas y la creación de gráficos

Hola

Estoy tratando de construir un gráfico y estoy luchando para descubrir qué medidas no están funcionando.

Tengo 3 medidas: RunningTotalCurrentMonthRevenue, RunningTotalCurrentMonthRevenue2024, MonthlyForecast.

Me gustaría hacer un gráfico con el eje x como días del mes actual y los valores y como las 3 medidas. A continuación se muestra el código DAX para cada medida y una imagen del gráfico resultante. No puedo hacer que las medidas que no sean "RunningTotalCurrentMonthRevenue" se acumulen correctamente a lo largo del mes y, en su lugar, solo obtengo una línea plana.

RunningTotalCurrentMonthRevenue =
VAR CurrentMonth (Mes actual) = MES(HOY())
VAR Año en curso = AÑO(HOY())
DEVOLUCIÓN
CALCULAR (
SUMA('Consulta de ventas en vivo'[Precio de venta]),
FILTRO (
TODO('Tabla de fechas'),
'Tabla de fechas'[Fecha] <= MÁXIMO('Tabla de fechas'[Fecha]) &&
MES('Tabla de fechas'[Fecha]) = CurrentMonth (Mes actual) &&
AÑO('Tabla de fechas'[Fecha]) = Año en curso
)
)
-------
RunningTotalCurrentMonthRevenue2024 =
VAR CurrentMonth (Mes actual) = MES(HOY())
VAR Año en curso = AÑO(HOY())
VAR MaxDate = MÁXIMO('Tabla de fechas'[Fecha])
DEVOLUCIÓN
CALCULAR (
SUMA('Consulta de ventas en vivo'[Precio de venta]),
FILTRO (
TODO('Tabla de fechas'),
'Tabla de fechas'[Fecha] <= MaxDate &&
MES('Tabla de fechas'[Fecha]) = CurrentMonth (Mes actual) &&
AÑO('Tabla de fechas'[Fecha]) = Año en curso - 1
)
)
-------
Pronóstico mensual =
VAR CurrentMonth (Mes actual) = MES(HOY())
VAR Año en curso = AÑO(HOY())
DEVOLUCIÓN
CALCULAR (
SUMX (
'Consulta de ventas en vivo',
VAR Tasa de aumento =
INTERRUPTOR (
VERDADERO(),
'Consulta de ventas en vivo'[SorMaster.Cliente] EN {Lista de clientes en el formato "cliente1", "cliente2", "cliente3"}, 0.15,
'Consulta de ventas en vivo'[SorMaster.Cliente] EN {"cliente4", "Cumtómero5"}, 0.35,
0 -- Mayúsculas y minúsculas predeterminadas si no hay coincidencia
)
DEVOLUCIÓN 'Consulta de ventas en vivo'[Precio de venta] * (1 + Tasa de aumento)
),
FILTRO (
TODO('Tabla de fechas'),
'Tabla de fechas'[Fecha] <= MÁXIMO('Tabla de fechas'[Fecha]) &&
MES('Tabla de fechas'[Fecha]) = CurrentMonth (Mes actual) &&
AÑO('Tabla de fechas'[Fecha]) = Año en curso - 1
)
)
--------
SM_SHED_0-1745858569695.png

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hola @SM_SHED ,

El problema es el siguiente: su RunningTotalCurrentMonthRevenue2024 y MonthlyForecast en realidad no se están "acumulando" día a día. En su lugar, suman los registros elegibles de todo el mes una y otra vez, lo que lleva a una línea plana. Básicamente, todos los días, mostraban el valor mensual completo en lugar de acumularse progresivamente. No es de extrañar que se quedaran allí como un pez aturdido.

Para solucionarlo, las medidas deben acumularse correctamente a lo largo de los días. En lugar de verificar si la fecha completa es menor que la fecha máxima (que captura todo tipo de fechas irrelevantes), debemos verificar el número de día en relación con el día actual que está trazando en el eje X.

Este es el código corregido para su RunningTotalCurrentMonthRevenue, aunque el suyo no estaba muy lejos. Simplemente apretando ligeramente el filtro:

RunningTotalCurrentMonthRevenue =
VAR CurrentMonth = MONTH(TODAY())
VAR CurrentYear = YEAR(TODAY())
RETURN
CALCULATE(
    SUM('Sales Query Live'[Selling Price]),
    FILTER(
        ALL('DateTable'[Date]),
        'DateTable'[Date] <= MAX('DateTable'[Date]) &&
        MONTH('DateTable'[Date]) = CurrentMonth &&
        YEAR('DateTable'[Date]) = CurrentYear
    )
)

Ahora aquí está el RunningTotalCurrentMonthRevenue2024 corregido, donde ocurre la cirugía real. Es necesario acumular por día del mes, no por toda la fecha:

RunningTotalCurrentMonthRevenue2024 =
VAR CurrentMonth = MONTH(TODAY())
VAR PriorYear = YEAR(TODAY()) - 1
RETURN
CALCULATE(
    SUM('Sales Query Live'[Selling Price]),
    FILTER(
        ALL('DateTable'[Date]),
        DAY('DateTable'[Date]) <= DAY(MAX('DateTable'[Date])) &&
        MONTH('DateTable'[Date]) = CurrentMonth &&
        YEAR('DateTable'[Date]) = PriorYear
    )
)

Ahora, la verdadera magia aquí es que al comparar DAY('DateTable'[Date]) <= DAY(MAX('DateTable'[Date])), estás acumulando progresivamente a medida que avanzas por los días del calendario, en lugar de recalcular obstinadamente todo el mes cada vez. Se acabaron las líneas planas. Su gráfico ahora debería tener tres curvas distintas que crezcan con gracia a lo largo del mes como se supone que deben hacerlo.

Si desea ser aún más elegante más adelante, podríamos anotar dinámicamente el progreso de hoy en comparación con el pronóstico, o sombrear el área de brecha. Pero en este momento, esta solución por sí sola le dará la acumulación diaria que le faltaba.

Saludos

View solution in original post

1 REPLY 1
Syndicate_Admin
Administrator
Administrator

Hola @SM_SHED ,

El problema es el siguiente: su RunningTotalCurrentMonthRevenue2024 y MonthlyForecast en realidad no se están "acumulando" día a día. En su lugar, suman los registros elegibles de todo el mes una y otra vez, lo que lleva a una línea plana. Básicamente, todos los días, mostraban el valor mensual completo en lugar de acumularse progresivamente. No es de extrañar que se quedaran allí como un pez aturdido.

Para solucionarlo, las medidas deben acumularse correctamente a lo largo de los días. En lugar de verificar si la fecha completa es menor que la fecha máxima (que captura todo tipo de fechas irrelevantes), debemos verificar el número de día en relación con el día actual que está trazando en el eje X.

Este es el código corregido para su RunningTotalCurrentMonthRevenue, aunque el suyo no estaba muy lejos. Simplemente apretando ligeramente el filtro:

RunningTotalCurrentMonthRevenue =
VAR CurrentMonth = MONTH(TODAY())
VAR CurrentYear = YEAR(TODAY())
RETURN
CALCULATE(
    SUM('Sales Query Live'[Selling Price]),
    FILTER(
        ALL('DateTable'[Date]),
        'DateTable'[Date] <= MAX('DateTable'[Date]) &&
        MONTH('DateTable'[Date]) = CurrentMonth &&
        YEAR('DateTable'[Date]) = CurrentYear
    )
)

Ahora aquí está el RunningTotalCurrentMonthRevenue2024 corregido, donde ocurre la cirugía real. Es necesario acumular por día del mes, no por toda la fecha:

RunningTotalCurrentMonthRevenue2024 =
VAR CurrentMonth = MONTH(TODAY())
VAR PriorYear = YEAR(TODAY()) - 1
RETURN
CALCULATE(
    SUM('Sales Query Live'[Selling Price]),
    FILTER(
        ALL('DateTable'[Date]),
        DAY('DateTable'[Date]) <= DAY(MAX('DateTable'[Date])) &&
        MONTH('DateTable'[Date]) = CurrentMonth &&
        YEAR('DateTable'[Date]) = PriorYear
    )
)

Ahora, la verdadera magia aquí es que al comparar DAY('DateTable'[Date]) <= DAY(MAX('DateTable'[Date])), estás acumulando progresivamente a medida que avanzas por los días del calendario, en lugar de recalcular obstinadamente todo el mes cada vez. Se acabaron las líneas planas. Su gráfico ahora debería tener tres curvas distintas que crezcan con gracia a lo largo del mes como se supone que deben hacerlo.

Si desea ser aún más elegante más adelante, podríamos anotar dinámicamente el progreso de hoy en comparación con el pronóstico, o sombrear el área de brecha. Pero en este momento, esta solución por sí sola le dará la acumulación diaria que le faltaba.

Saludos

Helpful resources

Announcements
PBIApril_Carousel

Power BI Monthly Update - April 2025

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

Notebook Gallery Carousel1

NEW! Community Notebooks Gallery

Explore and share Fabric Notebooks to boost Power BI insights in the new community notebooks gallery.

April2025 Carousel

Fabric Community Update - April 2025

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

Top Solution Authors
Top Kudoed Authors