frb_sega
Hola tios,
Estoy buscando ayuda con una consulta de Dax con la que estoy luchando.
Tengo una tabla que contiene información de auditoría de inicio / cierre de sesión. Contiene un nombre de usuario junto con una hora de inicio de sesión y una hora de cierre de sesión.
Estoy buscando crear un informe que muestre cuántos usuarios iniciaron sesión en el sistema minuto a minuto a lo largo del tiempo.
¿Alguien puede ayudar con esto?
Gracias por tu ayuda,
Felix
v-huizhn-msft
Hola @frb_sega,
Intento reproducir tu escenario. Los datos de muestra creados enumeran la hora de inicio y la hora de finalización de los usuarios en el sistema, calculo el recuento si los usuarios están hasta la hora actual.
Creo una tabla de calendario usando la fórmula a continuación,
Calendar = CALENDAR(MIN(Table2[Month_Start_Date]),MAX(Table2[Month_End_Date]))
Cree una medida para calcular el recuento de usuarios.
count = CALCULATE(COUNTA(Table2[User]),FILTER(Table2,AND(Table2[Month_Start_Date]<=MAX('Calendar'[Date]),Table2[Month_End_Date]>MAX('Calendar'[Date]))))
Finalmente, crea una tabla, selecciona el CALENDARIO[Date], y «contar» medida como nivel de valor. Consulte la siguiente captura de pantalla. Hasta 2016/8/1, hay un usuario en línea. Hasta 2016/10/1, hay dos usuarios en el sistema.
Si tiene algún otro problema, no dude en preguntar.
Atentamente,
Angelia
frb_sega
En respuesta a frb_sega
Para su información, si alguien estaba buscando más información, me dieron el siguiente código en otro foro y funciona bien:
Calendar = SELECTCOLUMNS ( CROSSJOIN ( CALENDAR (MIN(Sessions[startdate]), MAX(Sessions[enddate]) ), DATATABLE ( "Hour", DATETIME, { { "00:00" }, { "01:00" }, { "02:00" }, { "03:00" }, { "04:00" }, { "05:00" }, { "06:00" }, { "07:00" }, { "08:00" }, { "09:00" }, { "10:00" }, { "11:00" }, { "12:00" }, { "13:00" }, { "14:00" }, { "15:00" }, { "16:00" }, { "17:00" }, { "18:00" }, { "19:00" }, { "20:00" }, { "21:00" }, { "22:00" }, { "23:00" } } ) ), "Date", [Date] + [Hour] )
v-huizhn-msft
Hola @frb_sega,
Intento reproducir tu escenario. Los datos de muestra creados enumeran la hora de inicio y la hora de finalización de los usuarios en el sistema, calculo el recuento si los usuarios están hasta la hora actual.
Creo una tabla de calendario usando la fórmula a continuación,
Calendar = CALENDAR(MIN(Table2[Month_Start_Date]),MAX(Table2[Month_End_Date]))
Cree una medida para calcular el recuento de usuarios.
count = CALCULATE(COUNTA(Table2[User]),FILTER(Table2,AND(Table2[Month_Start_Date]<=MAX('Calendar'[Date]),Table2[Month_End_Date]>MAX('Calendar'[Date]))))
Finalmente, crea una tabla, selecciona el CALENDARIO[Date], y «contar» medida como nivel de valor. Consulte la siguiente captura de pantalla. Hasta 2016/8/1, hay un usuario en línea. Hasta 2016/10/1, hay dos usuarios en el sistema.
Si tiene algún otro problema, no dude en preguntar.
Atentamente,
Angelia
frb_sega
En respuesta a v-huizhn-msft
Hola @ v-huizhn-msft
Esto es genial, y ahora lo tengo trabajando día a día, gracias 🙂
El problema que tengo ahora es que los usuarios inician y cierran la sesión varias veces al día, por lo que necesito las fechas al nivel de los minutos en lugar del nivel del día.
¿Es posible crear automáticamente una tabla de calendario como lo ha hecho anteriormente, minuto a minuto en lugar de día a día?
Gracias de nuevo,
Felix
frb_sega
En respuesta a frb_sega
Para su información, si alguien estaba buscando más información, me dieron el siguiente código en otro foro y funciona bien:
Calendar = SELECTCOLUMNS ( CROSSJOIN ( CALENDAR (MIN(Sessions[startdate]), MAX(Sessions[enddate]) ), DATATABLE ( "Hour", DATETIME, { { "00:00" }, { "01:00" }, { "02:00" }, { "03:00" }, { "04:00" }, { "05:00" }, { "06:00" }, { "07:00" }, { "08:00" }, { "09:00" }, { "10:00" }, { "11:00" }, { "12:00" }, { "13:00" }, { "14:00" }, { "15:00" }, { "16:00" }, { "17:00" }, { "18:00" }, { "19:00" }, { "20:00" }, { "21:00" }, { "22:00" }, { "23:00" } } ) ), "Date", [Date] + [Hour] )
esminonés
En respuesta a frb_sega
Hice un horario con incrementos de 10 minutos. Usaré esto para calcular los usuarios conectados simultáneamente en períodos de tiempo de 10 minutos. ¡Gracias a todos en las publicaciones anteriores por sus consejos!
Time =
VAR Increment = 10 // 10 minutes increment
VAR HourTable = SELECTCOLUMNS(GENERATESERIES(0,23,1), "Hour", [Value])
VAR MinuteTable = SELECTCOLUMNS(GENERATESERIES(0, 60-Increment, Increment), "Minute", [Value])
VAR LoginDates = CALENDAR(MIN(Sessions[startdate]),MAX(Sessions[enddate]))
RETURN
SELECTCOLUMNS(
CROSSJOIN(LoginDates, HourTable, MinuteTable),
"PeriodStart", [Date] + TIME([Hour],[Minute],0),
"PeriodEnd", [Date] + TIME([Hour],[Minute]+Increment,0)
)