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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

Reply
Syndicate_Admin
Administrator
Administrator

Distinto recuento de medidas dentro del contexto de la tabla

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:001-1-2022: BANDERA
1-1-2022 17:001-1-2022: BANDERA
1-1-2022 18:001-1-2022: BANDERA
2-1-2022 9:002-1-2022: BANDERA
2-1-2022 12:002-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?

1 ACCEPTED 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].

View solution in original post

12 REPLIES 12
Syndicate_Admin
Administrator
Administrator

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/

Syndicate_Admin
Administrator
Administrator

@zudar Vea si esto funciona para usted:

Medida compleja de recuento distinto =
DÓNDE _TableContext = ADICIONES( Calendario, "Contexto de fila", Calendario[DateTime], "Medida compleja", [Medida compleja])

DÓNDE _TableIndex = RESUMIR(_TableContext, [Medida compleja] )

DÓNDE _Result = CUENTAS( _TableIndex)
DEVOLUCIÓN _Result

@AllisonKennedy,

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:

Medida compleja de recuento distinto =
DÓNDE _TableContext = ADICIONES( 'Calendario', "Contexto de fila", 'Calendario'[FechaHora], "Medida compleja en contexto", [Medida compleja])

DÓNDE _TableIndex = RESUMIR(_TableContext, [Medida compleja en contexto] )

DÓNDE _Result = CUENTAS( _TableIndex)
DEVOLUCIÓN _Result
AllisonKennedy_0-1644617142968.png

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.

  • Tengo una tabla con la fecha / hora de inicio y finalización de la indisponibilidad de los objetos.
  • Tengo una tabla con la fecha/hora de inicio y finalización de la disponibilidad de los objetos.
  • Tengo una tabla con la fecha / hora de inicio y finalización de las razones del objeto para no estar disponible.
  • Tengo una tabla con disponibilidad mínima por fecha/hora que debe cumplirse para grupos específicos de objetos.
  • Por supuesto, también tengo tablas con códigos de objeto y los grupos a los que pertenecen, así como una tabla de calendario. Los campos de fecha/hora del calendario son por hora entera. Así que la parte 'mm:ss' es siempre 00:00.

Utilizando estos datos, he creado medidas que:

  • contar el número de objetos que estaban disponibles en una determinada hora "entera" (AZUL)
  • contar el número de objetos que no estaban disponibles en una determinada hora "entera", pero categorizados en:
    • no hay razón para la falta de disponibilidad (RED)
    • con motivo de indisponibilidad (AMARILLO)

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:

zudar_0-1644851117718.png

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:

zudar_1-1644851908524.png

Bueno, eso es genial, pensé: ¡casi allí! ¡Solo necesito contar cuántos valores distintos hay en 'Banderas'!

Ahora, cuando aplico su solución, obtengo:

zudar_2-1644852039081.png

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.

@zudar ,

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.

vkalyjmsft_0-1645061507395.png

vkalyjmsft_1-1645061565671.png

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.

vkalyjmsft_2-1645061788783.png

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:

zudar_1-1645106509269.png

¿Alguna idea de por qué está sucediendo esto?

@zudar ,

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.

@v-kalyj-msft,

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].

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

AugPowerBI_Carousel

Power BI Monthly Update - August 2024

Check out the August 2024 Power BI update to learn about new features.

August Carousel

Fabric Community Update - August 2024

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

Top Solution Authors