Power BI: consulta de usuarios concurrentes de DAX

Un usuario Pregunto ✅

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

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.

1.PNG

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.

2.PNG

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]
)

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.

1.PNG

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.

2.PNG

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)
)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *