Don't miss your chance to take exam DP-600 or DP-700 on us!
Request nowLearn from the best! Meet the four finalists headed to the FINALS of the Power BI Dataviz World Championships! Register now
¡Hola expertos en Power BI!
Tengo una tabla de "Hechos" con columnas para [CustomerID], [OrderDate] y [Amount], y dos tablas de dimensiones, "Customer" y "Date", con relaciones de uno a varios con la tabla "Fact".
Quiero trazar el YTD actual contra todo el YTD anterior, por lo que también tengo una tabla 'UnconnectedDate' con una columna calculada CurrYear que me permite extraer los meses de esa tabla en el eje X con un filtro en el CurrYear.
Todo funciona bien con una excepción. Cuando agrego una segmentación de datos a la página para CustomerID, no se filtra correctamente el YTD. Los pedidos del cliente A para junio se han cargado en el modelo de datos, pero todavía estoy esperando los pedidos del cliente B para junio y solo tengo pedidos hasta mayo. Sin embargo, cuando filtro por cliente B, la medida YTD muestra un valor para junio de todos modos, lo que complica las cosas porque el valor es plano frente a mayo, ya que los datos de junio aún no están disponibles. Es fundamental que solucione esto, de lo contrario, mis informes hasta la fecha son simplemente basura.
Esta es mi medida:
He intentado un montón de ideas diferentes sin éxito. Incluso hice una tabla de fechas que incluía una columna para CustomerID, pero tampoco funcionó.
Simplemente no puedo averiguar cómo hacer que mi medida devuelva valores solo a través de los meses para los que existen datos cuando se aplica un contexto de filtro.
¡Gracias de antemano por su ayuda!
Hola @WishAskedSooner ,
Gracias por su respuesta ,@Samarth_18 . Basándome en la descripción del problema, probé algunas soluciones. Pruebe con el siguiente código DAX:
YTD_Orders =
VAR YTD_Months = DATESYTD(TREATAS(VALUES('UnconnectedDates'[Date]), 'ConnectedDates'[Date]))
VAR ExistingMonths =
CALCULATETABLE(
VALUES('ConnectedDates'[Date]),
'Fact'
)
VAR FilteredYTD_Months =
FILTER(
YTD_Months,
'ConnectedDates'[Date] IN ExistingMonths
)
VAR Res = CALCULATE(SUM('Fact'[Amount]), FilteredYTD_Months)
RETURN
Res
¡Pruébalo y avísame si resuelve tu problema! Si tiene alguna pregunta o necesita ajustes adicionales, proporciónenos la pbix de muestra después de eliminar los datos confidenciales para que podamos ayudarlo mejor a resolver su problema.
Saludos
Zhu
Equipo de apoyo a la comunidad
Si hay alguna publicación que ayude, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.
Si no entiendo sus necesidades o aún tiene problemas con él, no dude en hacérnoslo saber. ¡Muchas gracias!
Desafortunadamente, no puedo publicar una muestra de PBIX debido a restricciones de seguridad. Sin embargo, es bastante fácil recrear este problema. A continuación se muestra una tabla de datos de muestra que hice rápidamente en Excel y cargué en PBI:
Y creó el siguiente modelo de datos:
A continuación, creé las siguientes medidas basadas en lo que ya se ha publicado: OrigYTD, Samarth_YTD, Zhu_YTD. Y esto es lo que estoy recibiendo:
Por lo tanto, ninguno de los métodos funciona correctamente. Espero que esto ayude a diagnosticar mi problema y generar una solución.
¡Gracias!
Hola @WishAskedSooner ,
Intenté crear yo mismo un dato de muestra basado en la descripción suya e implementé el resultado. Por favor, compruebe si hay algo que se pueda mejorar. Aquí está mi solución:
1.Crear datos simples:
La relación entre ellos es:
2.Crear medidas:
PYTD1 = CALCULATE(
SUM('Fact'[Amount]),
SAMEPERIODLASTYEAR(TREATAS(VALUES(UnDimDate[Date]),'DimDate'[Date]))
)
PriorYTD=CALCULATE([PYTD1],FILTER(ALL('UnDimDate'),'UnDimDate'[Date<=SELECTEDVALUE(UnDimDate[Date])))
Con la siguiente medida, puede lograr un efecto acumulativo:
YTD_orders =
VAR YTD_Orders1 =
VAR YTD_Months = DATESYTD(TREATAS(VALUES('UnDimDate'[Date]), 'DimDate'[Date]))
VAR ExistingMonths =
CALCULATETABLE(
VALUES('DimDate'[Date]),
'Fact'
)
VAR FilteredYTD_Months =
FILTER(
YTD_Months,
'DimDate'[Date] IN ExistingMonths
)
VAR Res = CALCULATE(SUM('Fact'[Amount]), FilteredYTD_Months)
RETURN
Res
VAR _day =SELECTEDVALUE(UnDimDate[Date])
RETURN IF(CALCULATE(SUM('Fact'[Amount]),'Fact'[OrderDate]=_day)<>BLANK(),YTD_Orders1)
3. El resultado final es el siguiente:
Saludos
Zhu
Equipo de apoyo a la comunidad
Si hay alguna publicación que ayude, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.
Si no entiendo sus necesidades o aún tiene problemas con él, no dude en hacérnoslo saber. ¡Muchas gracias!
En primer lugar, muchas gracias por sus dos respuestas. Siempre estoy agradecido por todas y cada una de las ideas. Y con ese espíritu, intenté implementar ambas soluciones.
Lamentablemente, Samart_18 no funcionó como se esperaba, pero no me sorprende demasiado porque el filtro de la página debería propagarse a través de la medida sin requerir una adición explícita de ese valor filtrado. Pero, ¿qué sé yo? Gracias, sin embargo.
La solución de Zhu me acerca. El valor de YTD ahora no se extiende más allá de los meses existentes para el cliente B. ¡Éxito! Estoy muy contento por eso. Sin embargo, en lugar de calcular la suma acumulada acumulada como antes, ahora solo devuelve la suma mensual. ¿Cómo podemos volver a la suma acumulada corriente?
A continuación se muestra una captura de pantalla de dónde estoy.
¡Gracias!
Hola @WishAskedSooner ,
Puede intentar el siguiente código: -
YTD_Orders =
VAR SelectedCustomer = SELECTEDVALUE('Customer'[CustomerID])
VAR YTD_Months =
DATESYTD(TREATAS(VALUES('UnconnectedDates'[Date]), 'ConnectedDates'[Date]))
VAR YTD_Orders_CustomerFiltered =
CALCULATE(
SUM('Fact'[Amount]),
'Customer'[CustomerID] = SelectedCustomer,
YTD_Months
)
RETURN
YTD_Orders_CustomerFiltered
Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.
Check out the February 2026 Power BI update to learn about new features.