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!Vote for your favorite vizzies from the Power BI Dataviz World Championship submissions. Vote now!
Estimada comunidad de Power BI,
Antes que nada, quiero desearos lo mejor en 2026 y gracias por intentar ayudar a resolver mi problema.
Para un panel de control, intento determinar el mejor y el peor proyecto en un periodo seleccionado. El panel muestra varios otros datos y muestra todo dos veces, una vez a nivel semanal y otra a nivel anual.
La determinación del mejor o peor proyecto se realiza con la siguiente fórmula dax:
Beste Project Nummer =
VAR SelectedDates =
VALUES ( Datum[Datum] )
VAR Projects =
FILTER(
SUMMARIZE(
Opdracht,
Opdracht[DimOpdrachtId],
Opdracht[Projectnummer],
Opdracht[Korte tekst],
Opdracht[Opleveringsdatum],
"BrutomargePct",
CALCULATE(
[Brutomarge %],
TREATAS(
SelectedDates, Opdracht[Opleveringsdatum] ),
USERELATIONSHIP(Opdracht[Opleveringsdatum], Datum[Datum])
),
"Omzet",
CALCULATE(
SUM(Opbrengsten[zBedrag]),
TREATAS( SelectedDates, Opdracht[Opleveringsdatum]
),
USERELATIONSHIP(Opdracht[Opleveringsdatum], Datum[Datum])
)
),
NOT ISBLANK ( Opdracht[Opleveringsdatum] )
&& [Omzet] >= 1000 -- later finetunen
)
VAR Result =
MAXX( TOPN(1, Projects, [BrutomargePct], DESC), Opdracht[Projectnummer] )
RETURN
IF ( ISBLANK ( Result ), "Geen afgesloten projecten", Result )*la determinación del peor proyecto es la misma pero usa ASC en lugar de DESC en la variable de resultado.
En esta medida, determinamos el mejor proyecto dentro de las fechas seleccionadas (según el filtro de fechas en la página usando la tabla de fechas) calculando el margen bruto (brutomargePct) en porcentaje. Esto proviene de la medida [Brutomarge %], que simplemente divide otras dos medidas, [Brutomarge] (margen bruto) y [Proyecto omzet] (ingresos del proyecto):
Brutomarge % =
DIVIDE(
[Brutomarge],
[Project Omzet]
)Brutomarge =
CALCULATE(
SUM ( Opbrengsten[zBedrag] ) - SUM ( Kosten[zBedrag] )
)Project Omzet =
CALCULATE(
SUM ( Opbrengsten[zBedrag] )
)
El problema al que me enfrento es el siguiente:
Para determinar qué proyectos utilizar en este resumen de proyectos, el proyecto debe finalizarse dentro de la semana o año seleccionado. La fecha de finalización del proyecto proviene de Opdracht[Opleveringsdatum]. Sin embargo, en el panel de control el usuario filtra usando la tabla de fechas (Datum[Datum]). La tabla de fechas y la tabla Opdracht tienen una relación activa, pero esta está conectada a otra columna y no puede tener una relación activa con la columna 'Opleveringsdatum' porque rompería muchas otras cosas.
Cuando pruebo en un panel de control de pruebas y filtro directamente con el 'Opleveringsdatum' en lugar de usar la tabla de fechas en el slicer, el resultado y los cálculos son correctos. Sin embargo, cuando lo muevo al panel de control en vivo donde filtra usando la tabla de fechas, ninguno de los valores es correcto ya. Los ingresos del proyecto, el margen bruto y el porcentaje del margen bruto son correctos, lo que provoca una elección incorrecta entre mejor/peor proyecto. Sin embargo, en general muestra los proyectos correctos, así que casi siempre los números reales de proyecto son correctos en ambos casos.
He intentado resolver esto usando USERELATIONSHIP o TREATAS dentro de las medidas, pero nada de esto ha funcionado.
¡Tengo mucha curiosidad por conocer vuestra opinión!
Gracias de nuevo,
Olivier
Solved! Go to Solution.
El problema no era la lógica de clasificación en sí, sino cómo se filtraban y agrupaban los datos.
Eliminamos DimProjectId del cálculo
Aunque es la clave técnica, todos los informes se hacen en Projectnummer.
Incluir DimProjectId hacía que el cálculo se ejecutara a un grano más bajo, lo que resultaba en que se seleccionara el proyecto equivocado.
Una vez que lo eliminamos, el proyecto correcto se clasificó como mejor/peor.
Fijamos el filtrado de fechas en las medidas de margen
La relación activa del calendario interfería con el filtrado por Opdract[Opleveringsdatum].
Lo solucionamos borrando el filtro del calendario y aplicando explícitamente el filtro de fecha a Opleveringsdatum.
Tras estos cambios, se seleccionan los mejores y peores proyectos correctos, y el resultado es consistente a lo largo de semanas y años.
El problema no era la lógica de clasificación en sí, sino cómo se filtraban y agrupaban los datos.
Eliminamos DimProjectId del cálculo
Aunque es la clave técnica, todos los informes se hacen en Projectnummer.
Incluir DimProjectId hacía que el cálculo se ejecutara a un grano más bajo, lo que resultaba en que se seleccionara el proyecto equivocado.
Una vez que lo eliminamos, el proyecto correcto se clasificó como mejor/peor.
Fijamos el filtrado de fechas en las medidas de margen
La relación activa del calendario interfería con el filtrado por Opdract[Opleveringsdatum].
Lo solucionamos borrando el filtro del calendario y aplicando explícitamente el filtro de fecha a Opleveringsdatum.
Tras estos cambios, se seleccionan los mejores y peores proyectos correctos, y el resultado es consistente a lo largo de semanas y años.
Agradecemos mucho vuestros esfuerzos y por informarnos de la actualización sobre el problema. Me alegra saber que el problema se ha resuelto
Por favor, sigue usando el foro de la comunidad de Fabric para más ayuda.
Gracias
Hola @o0llied2
Quería comprobar si tuviste la oportunidad de revisar la información solicitada por @lbendlin . No dudes en ponerte en contacto con nosotros si tienes más preguntas.
Gracias.
Hola
Recibí el mensaje y actualmente estoy trabajando en proporcionar datos de muestra, ¡espera llegar hoy!
Muchas gracias por revisar este hilo 😄
@o0llied2 , Mejor usar la función índice, que permite particionar por y ordenar por
Ejemplo
calculate([Meausre], index(1, allselected(Table[Device], Table[Fecha de última actualización]), orderby(Table[Fecha de última actualización],desc),,partitionBy(Table[Device]) ) )
Power BI Index: Mejor/Bajo por nombre y valor: https://youtu.be/HPhzzCwe10U
¡Hola @Amit !
Gracias por la sugerencia, he tomado la siguiente medida para probarlo pero desafortunadamente da el mismo resultado, ¿alguna sugerencia?
Beste Project INDEX =
VAR Tabel =
SUMMARIZE(
Opdracht,
Opdracht[DimOpdrachtId],
Opdracht[Projectnummer],
"BrutomargePct", [Brutomarge %]
)
RETURN
CALCULATE(
MAX ( Opdracht[Projectnummer] ),
INDEX(
1,
Tabel,
ORDERBY ( [BrutomargePct], DESC )
)
)
¡De verdad aprecio la ayuda!
Por favor, proporciona datos de muestra que cubran completamente tu problema o pregunta, en un formato útil (no como captura de pantalla).
No incluyas información sensible. No incluyas nada que no tenga relación con el tema o la pregunta.
Por favor, muestra el resultado esperado basado en los datos de muestra que proporcionaste.
¿Necesitas ayuda para subir datos? https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-...
¿Quieres respuestas más rápidas? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447...
Hola @lbendlin ,
Gracias por tu respuesta. A continuación, consulta algunos datos de ejemplo para empezar.
A continuación tienes las 4 tablas que necesitas con la cantidad mínima de información necesaria para replicar el problema. He hecho 3 semanas aleatorias y 3 proyectos aleatorios en estas semanas. Los proyectos se encuentran en la tabla 'Opdracht', sus ingresos están en la tabla 'Opbrengsten' y sus costes en la tabla 'Kosten'. Además de estos tres, debería haber una tabla de fechas separada, solo necesita todas las fechas de 2025 para que funcione. El modelo de datos también se muestra en una captura de pantalla a continuación.
La información en estas tablas también es suficiente para copiar y pegar las fórmulas DAX compartidas anteriormente.
Para recrear el problema, simplemente crea una nueva página y añade una tabla con los siguientes datos:
'Opdracht'[Projectnummer] - 'Opdracht' [Opleveringsdatum] - [Proyecto Omzet] - [Brutomarge] - [Brutomarge %] - 'Opdracht'[Korte tekst]
Ahora añade un slicer usando 'Opdracht'[Opleveringsdatum] y filtra una de las tres fechas. Una captura de pantalla abajo con un ejemplo para que puedas comprobar si los datos son los mismos:
Estos datos son 100% correctos.
Ahora añade una nueva página con la misma tabla, pero añade un segmentador usando la columna de Fecha en la tabla de fechas. Ahora selecciona el mismo día, por ejemplo 15-12-2025, y verás que los resultados son muy diferentes. Mismos proyectos, pero números diferentes.
Este es exactamente el problema que intento resolver. Gracias de nuevo por dedicar tiempo a mi problema...
Modelo de datos:
Opinión de mesa:
| Número de proyecto | Fecha de entrega | Fecha de la reserva | DimOpdractId | Texto corto |
| 251861 | 15-12-2025 | 19-11-2025 | 1-OP251861.1 | Taller alino, CVI Lelystad |
| 252256 | 15-12-2025 | 8-12-2025 | 1-OP252256.1 | SAR - Coatingvloer Waalwijk |
| 252200 | 15-12-2025 | 19-11-2025 | 1-OP252200.1 | Unidad Eindhoven - almacén + sala de servidores |
| 251779 | 8-12-2025 | 26-9-2025 | 1-OP251779.1 | Marel Aves de Ave, BV Boxmeer - proefkeuken |
| 252187 | 8-12-2025 | 17-11-2025 | 1-OP252187.1 | Alexander poort Capelle a/d IJssel |
| 250869 | 8-12-2025 | 23-10-2025 | 1-OP250869.1 | Pabellón deportivo Grote Beek Eindhoven |
| 241914 | 16-6-2025 | 6-6-2025 | 1-OP241914.1 | VVE Bellevue buitentrap |
| 242221 | 16-6-2025 | 26-5-2025 | 1-OP242221.1 | StayOkey Hostel Eindhoven |
| 230624 | 16-6-2025 | 28-5-2025 | 1-OP230624.1 | Recubrimiento Kamp, Vianen |
Tabla Opbrengsten:
| zAmount | DimOpdractId | Fecha de la reserva |
| 1608 | 1-OP251861.1 | 15-12-2025 |
| 201,9 | 1-OP251861.1 | 15-12-2025 |
| 520 | 1-OP251861.1 | 15-12-2025 |
| 0 | 1-OP252256.1 | 15-12-2025 |
| 0 | 1-OP252256.1 | 15-12-2025 |
| 1925 | 1-OP252256.1 | 15-12-2025 |
| 0 | 1-OP252200.1 | 15-12-2025 |
| 2100 | 1-OP252200.1 | 15-12-2025 |
| 4434,66 | 1-OP251779.1 | 8-12-2025 |
| 1383,47 | 1-OP251779.1 | 8-12-2025 |
| 9,6 | 1-OP251779.1 | 8-12-2025 |
| 2770 | 1-OP251779.1 | 8-12-2025 |
| 4794 | 1-OP252187.1 | 8-12-2025 |
| 14100 | 1-OP252187.1 | 26-11-2025 |
| 11844 | 1-OP252187.1 | 1-12-2025 |
| 2829,5 | 1-OP252187.1 | 8-12-2025 |
| 4202,73 | 1-OP250869.1 | 8-12-2025 |
| 152,08 | 1-OP250869.1 | 8-12-2025 |
| € 4.333,00 | 1-OP241914.1 | 19-6-2025 |
| € 10.224,93 | 1-OP242221.1 | 16-6-2025 |
| € 4.460,50 | 1-OP230624.1 | 16-6-2025 |
Coste de la mesa:
| DimOpdractId | Fecha de la reserva | zAmount |
| 1-OP252256.1 | 12-12-2025 00:00 | 569,72 |
| 1-OP252256.1 | 11-12-2025 00:00 | 1263,35 |
| 1-OP252256.1 | 15-12-2025 00:00 | -402,92 |
| 1-OP252200.1 | 30-12-2025 00:00 | 152,8 |
| 1-OP252200.1 | 12-12-2025 00:00 | 20 |
| 1-OP252200.1 | 11-12-2025 00:00 | 20 |
| 1-OP252200.1 | 10-12-2025 00:00 | 20 |
| 1-OP252200.1 | 9-12-2025 00:00 | 20 |
| 1-OP252200.1 | 15-12-2025 00:00 | 1120 |
| 1-OP252200.1 | 8-12-2025 00:00 | 313,56 |
| 1-OP252200.1 | 23-12-2025 00:00 | 128,81 |
| 1-OP251779.1 | 1-12-2025 00:00 | 529,01 |
| 1-OP251779.1 | 3-12-2025 00:00 | 388,98 |
| 1-OP251779.1 | 5-12-2025 00:00 | 862,57 |
| 1-OP251779.1 | 4-12-2025 00:00 | 395,07 |
| 1-OP251779.1 | 25-11-2025 00:00 | 2308,64 |
| 1-OP251779.1 | 8-12-2025 00:00 | -1509,49 |
| 1-OP252187.1 | 19-11-2025 00:00 | 20 |
| 1-OP252187.1 | 20-11-2025 00:00 | 1148,93 |
| 1-OP252187.1 | 5-12-2025 00:00 | 93,5 |
| 1-OP252187.1 | 26-11-2025 00:00 | 1527,68 |
| 1-OP252187.1 | 24-11-2025 00:00 | 886,33 |
| 1-OP252187.1 | 27-11-2025 00:00 | 1408,94 |
| 1-OP252187.1 | 25-11-2025 00:00 | 3103,47 |
| 1-OP252187.1 | 21-11-2025 00:00 | 4047,8 |
| 1-OP252187.1 | 18-11-2025 00:00 | 312,3 |
| 1-OP252187.1 | 4-12-2025 00:00 | 0 |
| 1-OP252187.1 | 17-11-2025 00:00 | 2706,9 |
| 1-OP252187.1 | 3-12-2025 00:00 | 0 |
| 1-OP252187.1 | 2-12-2025 00:00 | 742,18 |
| 1-OP252187.1 | 17-12-2025 00:00 | 450 |
| 1-OP252187.1 | 1-12-2025 00:00 | 2262,51 |
| 1-OP252187.1 | 28-11-2025 00:00 | 450 |
| 1-OP252187.1 | 9-12-2025 00:00 | 2500 |
| 1-OP252187.1 | 14-11-2025 00:00 | 2704,85 |
| 1-OP252187.1 | 8-12-2025 00:00 | -1460,03 |
| 1-OP252187.1 | 22-11-2025 00:00 | -386,2 |
| 1-OP252187.1 | 23-12-2025 00:00 | 3250 |
| 1-OP250869.1 | 5-12-2025 00:00 | 20 |
| 1-OP250869.1 | 12-11-2025 00:00 | 79,82 |
| 1-OP250869.1 | 2-12-2025 00:00 | 0 |
| 1-OP250869.1 | 1-12-2025 00:00 | 110,12 |
| 1-OP250869.1 | 6-12-2025 00:00 | 0 |
| 1-OP250869.1 | 4-12-2025 00:00 | 1850 |
| 1-OP250869.1 | 8-12-2025 00:00 | 280 |
| 1-OP250869.1 | 10-11-2025 00:00 | 471,15 |
| 1-OP250869.1 | 1-10-2025 00:00 | 23,74 |
| 1-OP250869.1 | 17-11-2025 00:00 | 1008,85 |
| 1-OP241914.1 | 10-6-2025 00:00 | 2057,49 |
| 1-OP241914.1 | 11-6-2025 00:00 | -599,5 |
| 1-OP241914.1 | 16-6-2025 00:00 | 960 |
| 1-OP241914.1 | 12-6-2025 00:00 | -632,72 |
| 1-OP242221.1 | 29-5-2025 00:00 | 40 |
| 1-OP242221.1 | 30-5-2025 00:00 | 20 |
| 1-OP242221.1 | 2-6-2025 00:00 | 1629,52 |
| 1-OP242221.1 | 3-6-2025 00:00 | 10 |
| 1-OP242221.1 | 31-5-2025 00:00 | 51,36 |
| 1-OP242221.1 | 1-6-2025 00:00 | 43,8 |
| 1-OP242221.1 | 9-6-2025 00:00 | 360 |
| 1-OP242221.1 | 27-5-2025 00:00 | 1499,91 |
| 1-OP242221.1 | 28-5-2025 00:00 | 2075,9 |
| 1-OP242221.1 | 10-6-2025 00:00 | -368,9 |
| 1-OP242221.1 | 5-6-2025 00:00 | -379,72 |
| 1-OP230624.1 | 30-5-2025 00:00 | 931,67 |
| 1-OP230624.1 | 5-6-2025 00:00 | 1852,32 |
Hola @o0llied2 ,
Prueba a usar esta función DAX
Beste Project Nummer2 =
VAR SelectedDates =
VALUES ( Datum[Datum] )
VAR Projects =
FILTER (
ADDCOLUMNS (
Opdracht,
"Omzet", [Project Omzet],
"BrutomargePct", [Brutomarge %]
),
NOT ISBLANK ( Opdracht[Opleveringsdatum] )
&& Opdracht[Opleveringsdatum] IN SelectedDates
&& [Omzet] >= 1000
)
RETURN
IF (
ISEMPTY ( Projects ),
"Geen afgesloten projecten",
MAXX (
TOPN ( 1, Projects, [BrutomargePct], DESC ),
Opdracht[Projectnummer]
)
)
Espero que esta información te ayude. Por favor, házganos saber si tiene más dudas.
Gracias
Hola @v-nmadadi-msft ,
¡Gracias por unirte con una sugerencia! Lo intenté, pero desafortunadamente el mismo problema persiste. El cálculo del margen bruto en % simplemente no parece funcionar correctamente porque el filtrado de las fechas no se hace correctamente al usar el filtrado de fechas desde el calendario de fechas.
¿Tienes alguna otra sugerencia?
De verdad agradezco tu tiempo y esfuerzo.
Vote for your favorite vizzies from the Power BI World Championship submissions!
If you love stickers, then you will definitely want to check out our Community Sticker Challenge!
Check out the January 2026 Power BI update to learn about new features.