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
PBILover
Helper IV
Helper IV

Búsqueda de valores de columna basados en dos valores diferentes de la misma tabla

Hola

Tengo la siguiente tabla en mi conjunto de datos

IdEventTypeFechaCid
1a2020-05-012
2b2020-05-02
3a2020-05-024
4b2020-05-01
5c2020-05-03

paso 1 :Aplicar filtro en la tabla donde eventType es un , voy a obtener la siguiente salida

IdEventTypeFechaCid
1a2020-05-012
3a2020-05-024

paso 2: De la salida anterior quiero tomar cid (2,4) e id(1,3) y pasarlo a la tabla original, por lo que el resultado será así

IdEventTypeFechaCid
1a2020-05-012
2b2020-05-02
3a2020-05-024
4b2020-05-01

Paso 3 : quiere averiguar la diferencia de fecha entre el evento Tipo a y b de la identificación relacionada y cid

He probado ciertas cosas como la función de búsqueda, pero no funcionará.

¿Puedes ayudarme a resolver esto?

Muchas gracias.

9 REPLIES 9
v-kelly-msft
Community Support
Community Support

Hola @NamitaVishe ,

En primer lugar, cree una tabla de segmentación de datos, utilizando debajo de la expresión dax;

slicer table = DISTINCT('Table'[EventType])

A continuación, crear 2 medidas como se indica a continuación:

_ID = 
var _id=UNION( CALCULATETABLE(VALUES('Table'[Id]),FILTER(ALLSELECTED('Table'), 'Table'[EventType] in VALUES('slicer table'[EventType]))),CALCULATETABLE(VALUES('Table'[cid]),FILTER(ALLSELECTED('Table'), 'Table'[EventType] in VALUES('slicer table'[EventType])))) return
IF(SELECTEDVALUE('Table'[Id]) in _id,MAX('Table'[Id]),BLANK())
Datediff = 
var date1=MINX(FILTER(ALL('Table'),'Table'[EventType]=MAX('Table'[EventType])),'Table'[Date])
Return
CALCULATE(DATEDIFF(date1,MAX('Table'[Date]),DAY),ALLEXCEPT('Table','Table'[EventType]))

Finalmente verá:

Annotation 2020-05-22 111208.png

Para el archivo .pbix relacionado haga clic aquí.


Saludos
Kelly
¿Respondí a tu pregunta? ¡Marca mi puesto como solución!

@v-kelly-msft y Muchas gracias por sus pasos detallados.

Hubo un ligero cambio en el primer paso, ya que no quiero crear una tabla de segmentación de datos, aplacé el filtro en 'Tabla' como donde tipo de evento 'a' luego elegir el cid y el id de los documentos relacionados y luego aplicar de nuevo esos identificadores filtro en la tabla de resultados en el momento de la creación de la medida _id. (Como quiero tener en cuenta solo 2 tipos de eventos en esa página, he filtrado la página en función de estos tipos de eventos y he utilizado el código siguiente para crear la medida)

_IDTest = var _idTest =
UNION( CALCULATETABLE(VALUES('Table'[Id]),FILTER (ALLSELECTED('Table'), 'Table'[EventType] = "a")),CALCULATETABLE(VALUES('Table'[cid]),FILTER(ALLSELECTED('Table'), 'Table'[EventType] = "a")))
return
if(SELECTEDVALUE('Table'[Id]) in _idTest,MAX('Table'[Id]),BLANK()))

Obtuve el siguiente resultado

IdEventTypeFechaCid
1a4/8/2020 7:59:51 PM2
2b4/8/2020 6:26:20 PM
3a4/8/2020 8:03:47 PM4
4b4/8/2020 8:03:47 PM

Ahora quiero mostrar la diferencia de tiempo entre los tipos de eventos relacionados

por ejemplo, digamos que el tipo de evento b ocurrió en 4/8/2020 6:26:20 PM y el tipo de evento relacionado a ocurrió a las 7:59:51 PM, así que aquí quiero mostrar la diferencia de tiempo entre estos dos eventos (id 1 y 2) y agruparlos en consecuencia y el segundo grupo será para ids 3 y 4 y la diferencia de tiempo.

También quiero crear las agregaciones en la diferencia de fecha y hora resultante como min , max ,avg time etc.

¿Podrías guiarme en esto, por favor?

Muchas gracias.


Hola @NamitaVishe ,

En primer lugar, cree una columna calculada como se muestra a continuación:

_Markrow = 
var _cid=CALCULATETABLE(VALUES('Table'[cid]),FILTER(ALL('Table'),'Table'[EventType]="a"))
Return
IF('Table'[Id] in _cid,'Table'[Id],BLANK())

A continuación, cree una medida como se indica a continuación:

_Datediff = 
var anotherdate =IF(MAX('Table'[_Markrow])=BLANK(),BLANK(),CALCULATE(MAX('Table'[Date]),FILTER(ALL('Table'),'Table'[cid]=MAX('Table'[_Markrow])))) return
DATEDIFF(MAX('Table'[Date]),anotherdate,SECOND)

Finalmente verás: (aquí calculé la diferencia de tiempo en segundo)

Annotation 2020-05-27 085740.png

Aquí está el archivo .pbix modificado.

Saludos
Kelly
¿Respondí a tu pregunta? ¡Marca mi puesto como solución!

Hola @Kelly Gracias por su gran ayuda.

Soy nuevo en Dax y aprendo cosas buenas 🙂

¿Es posible que en lugar de mostrar Table[id] podamos mostrar table[cid] en el siguiente código?

IF('Table'[Id] en _cid,'Table'[Id],BLANK())

Lo he intentado, pero no hay suerte 😞

Hola @NamitaVishe,

Para la pregunta 1---->

¿Es posible que en lugar de mostrar Table[id] podamos mostrar table[cid] en el siguiente código?

IF('Table'[Id] en _cid,'Table'[Id],BLANK())

No, no se puede, esta expresión es para encontrar las filas donde el identificador es igual a la lista cid, por lo que sólo puede obtener el valor de id de nuevo, pero no importa, ya que los valores de id devueltos es exactamente los valores cid.

Para la pregunta 2--------->

Si desea utilizar la agregación para los valores, cree una columna calculada como se indica a continuación:

Datediff = 
var anotherdate =IF('Table'[_Markrow]=BLANK(),BLANK(),CALCULATE(MAX('Table'[Date]),FILTER('Table','Table'[cid]=EARLIER('Table'[_Markrow])))) return
DATEDIFF('Table'[Date],anotherdate,SECOND)

Y verás:

Annotation 2020-05-28 084627.png

Aquí está el archivo .pbix modificado que puede referirse a .

Saludos
Kelly
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!

Yor son impresionantes @Kelly!!
Funciona!!

Ahora el usuario quiere mostrar los datos como en el formato siguiente

IdidDateCidCidDateDiferencia de fecha
14/08/2020 7:59:51 PM24/08/2020 6:26:20 PM5611
34/08/2020 8:03:47 PM44/08/2020 8:03:47 PM0


¿Será posible?

Estoy explorando algunas opciones.

Muchas gracias por su ayuda.


Hola @Kelly,

mientras calculo la agregación obtengo un error que no podemos usar medidas en la función agregada. (Supongo que podemos escribir un DAX para él, pero podría ser un código largo (necesidad de trabajar en DAX : )), así que es una buena idea, Instaed de crear medidas , crear otra columna calculada para encontrar la diferencia de fecha de los identificadores relacionados y utilizar esta columna para calcular agregados (Min, Max, Avg, etc)?

Agradezco su ayuda.

Gracias.

parry2k
Super User
Super User

@NamitaVishe sí se puede hacer, necesita una tabla separada con valores de tipo de evento únicos, se utilizará exclusivamente para cortar desde allí se puede escribir una medida para averiguar todos los identificadores



Subscribe to the @PowerBIHowTo YT channel for an upcoming video on List and Record functions in Power Query!!

Learn Power BI and Fabric - subscribe to our YT channel - Click here: @PowerBIHowTo

If my solution proved useful, I'd be delighted to receive Kudos. When you put effort into asking a question, it's equally thoughtful to acknowledge and give Kudos to the individual who helped you solve the problem. It's a small gesture that shows appreciation and encouragement! ❤


Did I answer your question? Mark my post as a solution. Proud to be a Super User! Appreciate your Kudos 🙂
Feel free to email me with any of your BI needs.

@parry2k puede por favor poco elaborarlo más, lo siento no soy tan bueno en power BI todavía.

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.