The ultimate Microsoft Fabric, Power BI, Azure AI, and SQL learning event: Join us in Stockholm, September 24-27, 2024.
Save €200 with code MSCUST on top of early bird pricing!
Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Hola a todos
La frustración está en su punto más alto hoy.
Tengo un modelo muy complejo en mi PowerBI. Muchas tablas y medidas.
Al final, he creado esta tabla usando una medida compleja:
Calendario[DateTime] | Calendario[Medida compleja] |
1-1-2022 16:00 | 1-1-2022: BANDERA |
1-1-2022 17:00 | 1-1-2022: BANDERA |
1-1-2022 18:00 | 1-1-2022: BANDERA |
2-1-2022 9:00 | 2-1-2022: BANDERA |
2-1-2022 12:00 | 2-1-2022: BANDERA |
Quiero contar los distintos valores en Dimension[Complex Measure] y presentar el resultado en una tarjeta visual. En este caso, esto debería ser '2'.
La tabla anterior solo se ve así cuando incluyo [DateTime] y [Complex Measure].
[Medida compleja] contiene otras medidas de otras tablas que dependen del contexto Calendario[FechaHora]. Básicamente se ve como:
Complex Measure = IF(Table1[Measure X] - Table2[Measure Y] < 0, MIN(Calender[DateTime]) & ": FLAG", BLANK())
¿Cómo creo una nueva medida que realiza un recuento distinto correcto en Calendar[Complex Measure] para poder usarla en una tarjeta visual?
Solved! Go to Solution.
Bien, de alguna manera logré crear una medida de trabajo.
Se ve así:
CALCULATE(
COUNTROWS(SUMMARIZE(Calender, Calender[Date])) + 0,
FILTER(Calender, [Number of objects available & unavailable with valid reason] - [Minimal number of objects] < 0)
)
Me salté por completo la parte en la que creo un compás que contiene la palabra 'FLAG' y luego realizo un conteo (distinto) en ese compás. Creo que el problema fue que en mi medida 'FLAG', utilicé:
MIN(Calender[DateTime])
.. por lo que solo funcionó cuando incluí el [DateTime].
Estoy de acuerdo con @AllisonKennedy el código proporcionado debe hacer lo que necesita.
Puedes probar este patrón similar:
https://www.sqlbi.com/blog/marco/2018/05/31/how-to-write-distinctcountx-in-dax/
@zudar Vea si esto funciona para usted:
Gracias por su respuesta.
Parece que su medida no me está dando el resultado deseado. Mi mejor suposición es que no está tomando valores "distintos", sino que está contando todas las filas que tienen un resultado para [Medida compleja]?
@zudar ¿Puede proporcionar capturas de pantalla de lo que ha hecho y no funciona? La función RESUMIR debe agruparla por el valor de la columna de medida compleja que creamos en la primera variable. He cambiado el nombre de la columna virtual que creé para hacerla un poco menos ambigua:
Hola @AllisonKennedy (y @bcdobbs ),
Gracias de nuevo por sus respuestas. Estoy seguro de que proporcionó una solución de trabajo, simplemente no parece hacer el truco en mi informe "desordenado". No puedo compartir mi archivo .pbi aquí (porque contiene datos confidenciales), pero intentaré explicar con qué estoy tratando.
Este informe trata sobre la "disponibilidad" de ciertos objetos.
Utilizando estos datos, he creado medidas que:
En la captura de pantalla a continuación, puede ver cómo se ve esto, la delgada línea verde es la disponibilidad mínima:
Mi tarea ahora era crear una tarjeta-visual con el número único de días que la parte roja del gráfico cruza la línea verde (al menos una vez por día contado). En el ejemplo anterior, esto debería ser '1'.
Flags = IF([Number of objects available & unavailable with valid reason] - [Minimum number of objects] < 0, MIN(Calender[DateTime]) & ": FLAG", BLANK())
Cuando creo una tabla con el DateTime del calendario (utilizado en el gráfico anterior) y esta nueva medida 'Banderas', obtengo:
Bueno, eso es genial, pensé: ¡casi allí! ¡Solo necesito contar cuántos valores distintos hay en 'Banderas'!
Ahora, cuando aplico su solución, obtengo:
No tengo ni idea de dónde viene el '3'. En otros casos con muchas banderas, su medida me da '23' en lugar de '16', o '28' en lugar de '18'.
Por cierto, cada una de estas imágenes se filtró en un mes determinado a través de la tabla de calendario, así como un filtro en un grupo de objetos a través de una tabla de objetos.
¿Alguna idea de lo que estoy haciendo mal?
@zudar ¿Cuál es la medida exacta que está utilizando para que podamos analizar lo que está haciendo mal?
Dado que también tiene tiempo, debe asegurarse de proporcionar el contexto de fila correcto para la medida.
Como hay un valor en blanco en la medida Flags, también hay una fila en blanco en el _TableIndex, por lo que la fórmula cuenta todas las filas.
Modifico la fórmula así:
Count =
VAR _TableContext =
ADDCOLUMNS (
'Calender',
"Row Context", Calender[Date],
"Complex Measure", [Flags]
)
VAR _TableIndex =
SUMMARIZE ( _TableContext, [Complex Measure] )
VAR _Result =
COUNTX (
FILTER ( _TableIndex, [Complex Measure] <> BLANK () ),
[Complex Measure]
)
RETURN
_Result
Obtenga el resultado correcto.
Adjunto mi muestra a continuación como referencia.
Saludos
Equipo de apoyo a la comunidad _ kalyj
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Hola @v-kalyj-msft, parece que tu sugerencia alsmos hizo el truco..
Copié y pegué su fórmula y la misma tabla ahora muestra:
¿Alguna idea de por qué está sucediendo esto?
Como dijiste, quieres presentar el resultado en una tarjeta-visual, obtendrá el resultado correcto 2 en una tarjeta visual.
En cuanto a por qué cada fila devuelve el recuento 1, es necesario analizar la fórmula de medidas [Número de objetos disponibles y no disponibles con razón válida] y [Número mínimo de objetos] en la medida Banderas.
Saludos
Equipo de apoyo a la comunidad _ kalyj
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Como puede ver en la tabla, la tarjeta-visual solo debe devolver un valor distinto de 'Flags': 19/01/2022: FLAG. El resultado correcto debe ser '1' y no '2'.
Las medidas detrás de [Número de objetos disponibles y no disponibles con razón válida] y [Número mínimo de objetos] se ven así:
[Número de objetos disponibles y no disponibles con razón válida] es una suma de dos medidas que tienen esta forma:
SUMX (
VALUES ( Table ),
IF (
...,
VAR X =
CALCULATE ( [Measure], ... in {"...","..."} )
VAR Y =
CALCULATE ( [Measure], ... in {"...","..."} )
RETURN
SWITCH(
TRUE(),
X > 0 && Y > 0, 0.6,
X > 0 && Y = 0, 1,
X = 0 && Y > 0, 0,
0
)
)
)
y:
CALCULATE(COUNTROWS(Table),
FILTER(Table,
Start<=MAX(Calender[DateTime])
&& (End>=MIN(Calender[DateTime]) || End = BLANK())
))
[Número mínimo de objetos] básicamente se ve así:
SUM(...) - IF(SUM(...) = BLANK(), BLANK(), [Measure])
@v-yanjiang-msft (& @AllisonKennedy )
Vuelvo sobre este tema dos años y medio después. No he podido resolverlo y agradecería su ayuda en este caso. La medida que estoy buscando está incluida en un informe mensual y, en este momento, estoy haciendo la vergonzosa tarea mensual de contar valores distintos para 'flag' a mano y escribir el resultado correcto (para 10+ grupos) en un archivo de Excel que luego uso en PowerBI. ¿Mi respuesta anterior da suficiente información para concluir algo?
Bien, de alguna manera logré crear una medida de trabajo.
Se ve así:
CALCULATE(
COUNTROWS(SUMMARIZE(Calender, Calender[Date])) + 0,
FILTER(Calender, [Number of objects available & unavailable with valid reason] - [Minimal number of objects] < 0)
)
Me salté por completo la parte en la que creo un compás que contiene la palabra 'FLAG' y luego realizo un conteo (distinto) en ese compás. Creo que el problema fue que en mi medida 'FLAG', utilicé:
MIN(Calender[DateTime])
.. por lo que solo funcionó cuando incluí el [DateTime].
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Check out the August 2024 Power BI update to learn about new features.