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

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Syndicate_Admin
Administrator
Administrator

DISTINCTCOUNT de ID DONDE una condición anterior es TRUE

Tengo una mesa (tabla)

FechaTimeidentificaciónStatus_Aentradasalida
25/10/2020 14:251001A
29/10/2020 14:251001 10
1/12/2020 15:301002 10
5/02/2021 12:001001 01
15/04/2021 21:451002 01


La tabla registra los cambios de estado de varios tipos por DateTime.

Quiero calcular el número (recuento distinto de clientes) que han salido (exit = 1) donde el cliente ha tenido previamente un Status_A (Status_A = 1)

Algo así como:

Measure = 
VAR select_id = SELECTEDVALUE('Table'[ID])
VAR temp_table = FILTER('Table', 'Table'[Status_A] = "A")
RETURN
IF(
    CONTAINS(temp_table, 'Table'[ID], select_id),
    CALCULATE(
        DISTINCTCOUNT('Table'[ID]), 
        'Table'[Exit] = 1),
    BLANK()
)


Hay 1 cliente (ID=1001) que ha salido (Exit = 1) y que anteriormente tenía un Estado A (Status_A = "A") así que espero Medida = 1.
Sin embargo, medir = BLANK

Curiosamente, cuando creo una tabla con ID y Mido los datos se ve correcto, excepto para el Total

moosepng_1-1621398104659.png


¿Por qué el total no es 1? Supongo que es el tipo de datos.
¿Hay una manera correcta de estructurar la instrucción IF en mi medida para devolver un valor que se puede totalizar/promediar, etc.?

He examinado la documentación de Microsoft, pero no puedo encontrar una manera de strucutre la instrucción IF para devolver un número que se puede calcular en un total.

1 ACCEPTED SOLUTION

No @moosepng,

Pruebe la siguiente fórmula:

Measure = 
var exit_value = 
CALCULATE(
    MAX('Table'[Exit]),
    FILTER(
        ALL('Table'),
        'Table'[ID] = MAX('Table'[ID])
    )
)
return 
CALCULATE(
    DISTINCTCOUNT('Table'[ID]),
    FILTER(
        'Table',
        exit_value = 1
        && 'Table'[Status_A] = "A"
    )
)

image.png

Si el problema aún no se ha resuelto, proporcione información detallada sobre errores o el resultado esperado que espera. Hágamelo saber inmediatamente, esperando su respuesta.

Saludos
Winniz

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Eso funciona :), pero no es ideal.
Tengo que crear una serie de medidas con esta lógica y esto duplicaría el número de medidas de mi informe.
¿Sabes cuál es la diferencia?

Si incluyo su solución en la medida orignal tiene el mismo problema.. ¿Es un error?

Measure test fix 2 = 
VAR select_id = SELECTEDVALUE('Table'[ID])
VAR temp_table = FILTER('Table', 'Table'[Status_A] = "A")
RETURN
IF(
    CONTAINS(temp_table, 'Table'[ID], select_id),
    SUMX( VALUES('Table'[ID]), 
        CALCULATE(
            DISTINCTCOUNT('Table'[ID]), 
            'Table'[Exit] = 1)
    ),
    BLANK()
)

No @moosepng,

Pruebe la siguiente fórmula:

Measure = 
var exit_value = 
CALCULATE(
    MAX('Table'[Exit]),
    FILTER(
        ALL('Table'),
        'Table'[ID] = MAX('Table'[ID])
    )
)
return 
CALCULATE(
    DISTINCTCOUNT('Table'[ID]),
    FILTER(
        'Table',
        exit_value = 1
        && 'Table'[Status_A] = "A"
    )
)

image.png

Si el problema aún no se ha resuelto, proporcione información detallada sobre errores o el resultado esperado que espera. Hágamelo saber inmediatamente, esperando su respuesta.

Saludos
Winniz

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

¿Cómo funcionaría con los valores de texto en 'Table'[Exit]?

FechaTimeidentificaciónStatus_Aentradasalida
25/10/2020 14:251001A
29/10/2020 14:251001 No
1/12/2020 15:301002 No
5/02/2021 12:001001 No
15/04/2021 21:451002 No

No @moosepng,

Si sólo hay dos textos: "Sí" y"No", entonces simplemente cambie "1" a "Sí" en lafórmula.

Porque al comparar "Sí" y "No", se basará en el orden de la primera letra, es decir, "Sí" > "No".

Measure = 
var exit_value = 
CALCULATE(
    MAX('Table'[Exit]),
    FILTER(
        ALL('Table'),
        'Table'[ID] = MAX('Table'[ID])
    )
)
return 
CALCULATE(
    DISTINCTCOUNT('Table'[ID]),
    FILTER(
        'Table',
        exit_value = "Yes"
        && 'Table'[Status_A] = "A"
    )
)

Saludos
Winniz

moosepng_0-1621584555503.png

Sí, parece que da el resultado correcto.
gracias

moosepng_0-1621578222392.png

Syndicate_Admin
Administrator
Administrator

Ahí, @moosepng

Por favor, pruebe lo siguiente.

Picture7.png

Medida Corrección total =
SUMX( VALUES('Table'[ID]), [Medida])

Hola, mi nombre es Jihwan Kim.


Si este post ayuda, entonces considere aceptarlo como la solución para ayudar a otros miembros a encontrarlo más rápido, y dar un gran pulgar hacia arriba.


Linkedin: linkedin.com/in/jihwankim1975/

Twitter: twitter.com/Jihwan_JHKIM

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

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