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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

¿Cómo se filtra por coincidencia de ID con una tabla temporal

hola

Me metiendo en problemas con éste. He publicado sobre un problema similar antes, así que lo vincularé en la parte inferior.

Quiero crear una medida (o columna) que calcule el número de personas donde se cumple una condición y donde hayan cumplido previamente una condición separada. También quiero poder agrupar los resultados por DateTime.

Tengo algunos datos ficticios '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


Por lo tanto, en la lógica aproximada / código que quiero

CALCULAR el DISTINCTCOUNT de ID donde exit = 1 y where 'Table'[ID] = 'temp_table'ID (cuando temp_table = FILTER('Table', 'Table'[Status_A] = "A"))


Pensé que la forma más sencilla de hacerlo sería usar un VAR temp_table, similar a un CTE en SQL, agregando la cláusula - si 'Table'[ID] = 'temp_table' ID cuando temp_table = FILTER('Tabla', 'Tabla'[Status_A] = "A")

identificaciónStatus_A
1001A

así que...

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


Mi resultado esperado es 1.
Hay 1 ID que ha tenido previamente un Status_A = A y tiene EXIT = 1.
Este registro tiene un ID 1001 y ocurrió en el 5/02/2021 12:00.

Mi resultado real es BLANK

Como Jihwan_Kim señalado el usuario, puedo obtener 1 sumando mi medida:

SUMX(VALUES('Table'[ID]), [Measure])


Pero esto no es capaz de ser agrupado por DateTime.

Publicación anterior:
https://community.powerbi.com/t5/Desktop/DISTINCTCOUNT-of-ID-WHERE-a-previous-condition-is-TRUE/m-p/...

Problemas similares:
https://community.powerbi.com/t5/Desktop/DAX-query-to-compare-a-value-in-one-table-to-see-if-it-exis...
https://community.powerbi.com/t5/Desktop/INNER-JOIN/m-p/258597


1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Sí, puede agregar una columna a la tabla para asignar el DateTime correcto a cada fila para el identificador como este.

Exit DateTime = 
CALCULATE (
    MAX ( 'Table'[Date] ),
    ALLEXCEPT ( 'Table', 'Table'[ID] ),
    'Table'[Exit] = 1
)

jdbuchanan71_0-1621610827392.png

A continuación, utilice esa columna para agrupar la medida.

View solution in original post

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

Sí, puede agregar una columna a la tabla para asignar el DateTime correcto a cada fila para el identificador como este.

Exit DateTime = 
CALCULATE (
    MAX ( 'Table'[Date] ),
    ALLEXCEPT ( 'Table', 'Table'[ID] ),
    'Table'[Exit] = 1
)

jdbuchanan71_0-1621610827392.png

A continuación, utilice esa columna para agrupar la medida.

Syndicate_Admin
Administrator
Administrator

Bien, pero las filas Estado A y Salir tienen una fecha y hora diferentes para el mismo identificador. ¿Cómo eliges por cuál deben agruparse?

FechaTime identificación Status_A entrada salida
25/10/2020 14:25 1001 A
29/10/2020 14:25 1001 1 0
5/2/2021 12:00 1001 0 1

Buen punto.
Quiero saber el número de identificaciones que salen (Exit = 1) que alguna vez tuvieron un Status_A = A en el momento de la salida.
Si me ayudas a articular esto sería mucho más apreturado 🙂

Syndicate_Admin
Administrator
Administrator

¿No puedes publicar la solución debido a las inundaciones posteriores? Voy a probar una foto

moosepng_0-1621577014379.png

Syndicate_Admin
Administrator
Administrator

@moosepng

No estoy seguro de entender lo que está buscando, pero ¿algo así funcionaría?

Measure = 
VAR _Entry = CALCULATETABLE(VALUES('Table'[ID]),'Table'[Entry] = 1)
VAR _Status = CALCULATETABLE(VALUES('Table'[ID]),'Table'[Status] = "A")
VAR _Combine = INTERSECT(_Entry,_Status)
RETURN
COUNTROWS(_Combine)

jdbuchanan71_0-1621576264406.png

Parece que la medida es correcta, pero no se puede agrupar antes de la fecha

Cuando dices agrupado por fecha no estoy seguro de lo que quieres decir. ¿Puedes explicarlo?

arrepentido. Así que la tabla original es por DateTime. Mi resultado esperado es

moosepng_0-1621607782566.png


Quiero saber el cálculo (DISTICTCOUNT del ID) por fecha (DateTime)

Syndicate_Admin
Administrator
Administrator

@moosepng, prueba una medida como

calculate(distinctcount(Table[ID]), filter(Table, Table[ID] = calculate(max(Table[ID] ), filter(allselected(table), table[ID] = max(Table[ID]) && 'Table'[Status_A] = "A"))
&& Tabla[Salida] =1))

Obras, pero no total y no se pueden agrupar antes de la fecha

moosepng_0-1621576463133.png

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

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