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
Anonymous
Not applicable

Recuento de sesión por usuario y día con intervalo de 2 minutos

Hola a todos

Se me pidió que obtener un número de usuarios permanece activo en una aplicación por día y duración en cada sesión.

El sistema está diseñado de una manera que una vez que el usuario inicia sesión, una sesión se actualiza automáticamente cada 2 minutos hasta que expira la sesión. Hay cerrar sesión, pero rara vez sucede. En ese caso, es necesario derivar datos con una precisión de 2 minutos desde el inicio de sesión del usuario de tiempo.

Aquí está la tabla actual disponible

Login DateTimeUsuario
7/Mayo/2020 10.15am1
7/Mayo/2020 10.17am1
7/Mayo/2020 10.18am2
7/Mayo/2020 10.19am1
7/Mayo/2020 10.20am2
7/Mayo/2020 5:12pm1
7/Mayo/2020 5:14pm1
7/Mayo/2020 7:20pm1
7/Mayo/2020 7:22pm1
7/Mayo/2020 7:23pm3
7/Mayo/2020 7:24pm1

Y el resultado del deseo es tener 2 columnas/medidas adicionales denominadas"Intervalo"y"Sesión por día".

FechaUsuarioIntervaloSesión por día
7-Mayo-2014-6 minutos2
7-Mayo-2012-4 minutos1
7-Mayo-2024-6 minutos1
7-Mayo-2030-2 minutos1

Agradezco cualquier ayuda. Muchas gracias

8 REPLIES 8
AllisonKennedy
Super User
Super User

Estoy a mitad de camino, pero no tengo la parte de duración todavía, necesito pensar en @Greg_Deckler 's sugerencia de usar MAXX para obtener la duración...

Esto es lo que tengo hasta ahora:

Cree una serie de COLUMNAS calculadas en la tabla:

LogInRecheck ? LogTbl[Login DateTime]+TIME(0,2,0)
LoginStatus á IF(COUNTROWS(FILTER(LogTbl,EARLIER(LogTbl[User])-LogTbl[User] && EARLIER(LogTbl[Login DateTime])-LogTbl[LogInRecheck]))-1, "","Login")
Esto ya proporciona el número total de sesiones por usuario: use el recuento de la columna LoginStatus como valor en el informe.
Así que nos falta la duración/intervalo.
Como nota secundaria, to obtener el número para cada inicio de sesión también podría crear una columna (no la solución más eficiente y en este momento no tendrá en cuenta diferentes fechas, pero por alguna razón decidí clasificar a los usuarios en primer lugar, así que ya tenía esa información a mano):
UserRank : RANKX(FILTER(LogTbl,LogTbl[User]-EARLIER(LogTbl[User])), LogTbl[Login DateTime],,ASC)
LoginNumber á RANKX(LogTbl,IF(COUNTROWS(FILTER(LogTbl,EARLIER(LogTbl[User])-LogTbl[User] && EARLIER(LogTbl[Login DateTime])-LogTbl[LogInRecheck]))-1,0,LogTbl[UserRank]),ASC,Dense)-1

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

@AllisonKennedy ¿Quizás también podamos detectar el paso de cierre de sesión? ¿Funciona esto? Acabo de invertir la condición loginrecheck en la segunda comparación:

LogoffStatus2 = IF(COUNTROWS(FILTER(UserLoginTable, EARLIER(UserLoginTable[User])=UserLoginTable[User] && EARLIER(UserLoginTable[LogInRecheck])=UserLoginTable[Login DateTime]))=1, "","Logoff")

@sanimesa suena como si lo estuvieras haciendo funcionar.

Esta es una idea para el intervalo:

SessionID á COUNTROWS(FILTER(LogTbl,LogTbl[User]-EARLIER(LogTbl[User]) && LogTbl[LoginStatus]-"Login" && LogTbl[UserRank]<-EARLIER(LogTbl[UserRank])))
Intervalo: SWITCH(COUNTROWS(FILTER(LogTbl,LogTbl[SessionID]-EARLIER(LogTbl[SessionID]) && LogTbl[Usuario]-EARLIER(LogTbl[Usuario]))), 1, "0-2 min", 2, "2-4 min", 3, "4-6 min", 4, "6-8 min", 5, "8-10 min", ">10 min")
tanto como columnas calculadas de nuevo
Estoy seguro de que @Greg_Deckler puede proporcionar una solución más elegante, pero eso es lo que mi cerebro ha llegado a hacer en las últimas horas de la noche de NZ.

¿Este post ha resuelto tu problema? Por favor, márquelo como una solución para que otros puedan encontrarlo rápidamente y para que la comunidad sepa que su problema ha sido resuelto.


Si has encontrado este post útil, por favor, dale a Kudos.

Trabajo como instructor y consultor para Microsoft 365, especializado en Power BI y Power Query.

https://sites.google.com/site/allisonkennedycv


Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

Anonymous
Not applicable

@AllisonKennedy ¡Tu solución es brillante!. Gracias.

Ya casi llegamos. funciona si la duración es exacta en 2 minutos, sin embargo, el intervalo debe estar dentro de 2 minutos. Así es como se ve en mis datos actuales. Los resaltados en amarillo se marcan como "Iniciar sesión", aunque debe estar en blanco.

1.png

Traté de modificar su código a esto, pero todavía no me da el resultado correcto. ¿Alguna idea de lo que debería ser?

LoginStatus ?
IF(
COUNTROWS(
FILTRO (
Consulta1,
EARLIER(Query1[IDCHANNELUSER]) - Query1[IDCHANNELUSER] &&
EARLIER(Query1[EXECUTION_TIME]) >-Query1[LogInRecheck] &&
EARLIER(Query1[EXECUTION_TIME]) < Query1[LogInRecheck]
)
) 1, "","Inicio de sesión")

@ETL Estás cerca, pero yo esperaría que tu DAX devuelva casi todos los LOGIN??

Anteriormente, como se usa en esta expresión, nos permite comparar el tiempo de ejecución con el recom comprobación de inicio de sesión para cada fila de la tabla dentro de la expresión FILTER. Debe averiguar si ese tiempo de ejecución está dentro de los 2 minutos de cualquier otro tiempo de ejecución para el mismo usuario, por lo que contaremos todas las filas donde esa condición es verdadera. La siguiente fórmula funciona con mis datos de muestra, pero querrá examinarlos a ellos y a sus datos detenidamente y asegurarse de que entiende lo que está haciendo, ya que si sus intervalos se vuelven demasiado juntos podrían empezar a tener algunas incoherencias de nuevo.

LoginStatus (LoginStatus)
SI (
COUNTROWS (
FILTRO (
LogTbl,
EARLIER ( LogTbl[User] ) - LogTbl[User]
&& DATEDIFF ( EARLIER ( LogTbl[Login DateTime] ), LogTbl[LogInRecheck], MINUTE ) > ? 0
&& DATEDIFF ( EARLIER ( LogTbl[Login DateTime] ), LogTbl[LogInRecheck], MINUTE ) <- 2
)
) 1,
"Inicio de sesión"
)

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

Sí, eso funcionará para cerrar la sesión.

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

@AllisonKennedy usted debe ser capaz de obtener la duración / intervalo usando esta técnica: Vea mi artículo sobre el tiempo medio entre el error (MTBF) que utiliza EARLIER: http://community.powerbi.com/t5/Community-Blog/Mean-Time-Between-Failure-MTBF-and-Power-BI/ba-p/3395...

Lo sentimos, debería haber publicado que... antes (broma mala).


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
Greg_Deckler
Super User
Super User

Bueno, no he mirado tan cerca como para darte una respuesta definitiva, pero va a involucrar a EARLIER. Por favor, consulte este post sobre cómo obtener su pregunta respondida rápidamente: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490

Creo que empezaría por obtener los minutos entre una fila y la fila anterior (usando MAXX y EARLIER). A continuación, puede ir desde allí para agregar filas ya que si esa duración es más de 2 minutos es una nueva sesión.

Eso es lo que estoy pensando.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

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.