Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Tengo un problema en DAX al mostrar una métrica en un gráfico de área. El objetivo es representar a los usuarios únicos que han realizado un número de acciones igual o superior a [n_veces] durante los últimos [meses] de forma consecutiva.
TotalUsuariosRecurrentes =
VAR SELECTOR = IF([Recurrencia numerico] = 365,12,[meses])
VAR SELECTOR_veces = [n_veces]
VAR hoy = TODAY()
VAR FechaIni = EDATE(hoy,SELECTOR * -1)
VAR FechaFin = hoy
VAR ResumenUsuarios =
SUMMARIZE(
FILTER(
Tabla,
Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
),
Tabla[UserId],
Tabla[EndOfMonth],
"SumaVisitas", SUM(Tabla[N_VISITAS])
)
VAR UsuariosRecurrentes =
SELECTCOLUMNS(
FILTER(
SUMMARIZE(
ResumenUsuarios,
[UserId],
"MesesConVisitas", COUNTROWS(
FILTER(
ResumenUsuarios,
[UserId] = EARLIER([UserId]) &&
[SumaVisitas] >= SELECTOR_veces
)
)
),
[MesesConVisitas] >= SELECTOR
),
"UserId", [UserId]
)
RETURN
CALCULATE(
DISTINCTCOUNT(Tabla[UserId]),
FILTER(
Tabla,
Tabla[UserId] IN UsuariosRecurrentes &&
Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
)
)
Para ayudarte a entender la lógica que estoy usando en la métrica, explicaré los siguientes parámetros:
1.[n_veces] = número de acciones (int)
2.[meses] = número de meses (int)
3.[Recurrencia numérica] = si el segmentador de recurrencia tiene el valor "Mensual" seleccionado, entonces 30, de lo contrario, 365 (int)
Esos parámetros filtran la tabla que se muestra a continuación y también deben filtrar la visualización de área ubicada justo debajo de la tabla.
Así es como se ven los datos:
El problema es que, cuando selecciono un número de meses mayor que 1, deja de mostrar la visualización cuando debería mostrar, en este caso concreto los últimos 3 meses (eje X) con solo 1 usuario (eje Y) ya que es el único que ha realizado al menos 2 acciones cada mes durante los últimos 3 meses:
Usuarios de EndOfMonth
30/07/2024 | 1 |
30/06/2024 | 1 |
31/05/2024 | 1 |
Espero poder mostrar una evolución en esta métrica teniendo el campo de fecha en el eje X, ahora solo se puede mostrar en una visualización de KPI.
Como los datos tienen más detalle que los requeridos para la métrica (EndOfMonth,UserId,WorkspaceId,ReportId,Visits), he intentado hacer una tabla resumida sobre una variable para calcular los usuarios con las condiciones seleccionadas (UsuariosRecurrentes) y luego he intentado insertar esa lista de usuarios en el cálculo después de la declaración return.
¿Alguna ayuda en esto?
¡Muchas gracias!
Hola @OscarCamean
El problema puede estar en la forma en que se filtran y resumen los datos, aquí hay una idea para mejorar, espero que sea útil.
Como no conozco todos los campos de su tabla, [Meses] [N_veces] [RecurrenciaNumerico] en mi ejemplo son de datos ingresados manualmente.
Si este DAX no funciona, proporcione datos ficticios para todos los campos utilizados en su DAX y recuerde proteger su privacidad.
Además, considere la posibilidad de dividir el DAX en varias partes y depurarlo paso a paso.
1. Aquí están mis datos de muestra.
2. Cree medidas para obtener el valor seleccionado por los segmentadores.
Selected_Meses = SELECTEDVALUE(meses[meses])
Selected_N_Veces = SELECTEDVALUE(n_veces[n_veces])
RecurrencialNumerico = SWITCH(
TRUE(),
SELECTEDVALUE(Recurrencia[Frequency]) = "Year", 365,
SELECTEDVALUE(Recurrencia[Frequency]) = "Month", 30,
SELECTEDVALUE(Recurrencia[Frequency]) = "Day", 1,
0
)
3. Create [TotalUsuariosRecurrentes] measure.
TotalUsuariosRecurrentes =
VAR SELECTOR = IF([RecurrencialNumerico] = 365,12,[Selected_Meses])
VAR SELECTOR_veces = [Selected_N_Veces]
VAR hoy = TODAY()
VAR FechaIni = EDATE(hoy,SELECTOR * -1)
VAR FechaFin = hoy
VAR ResumenUsuarios =
SUMMARIZE(
FILTER(
Tabla,
Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
),
Tabla[UserId],
Tabla[EndOfMonth],
"SumaVisitas", SUM(Tabla[N_VISITAS])
)
VAR UsuariosRecurrentes =
CALCULATETABLE(
DISTINCT(Tabla[UserId]),
FILTER(
ResumenUsuarios,
[SumaVisitas] >= SELECTOR_veces
)
)
RETURN
CALCULATE(
DISTINCTCOUNT(Tabla[UserId]),
Tabla[UserId] IN UsuariosRecurrentes &&
Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
)
4. Aquí está el resultado de mi prueba.
Saludos
Jarvis Tang
Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.
Hola
Comparta algunos datos con los que trabajar (en un formulario que se pueda pegar en un archivo de MS Excel) y muestre el resultado esperado en un formato de tabla simple. Si es posible, asegúrese de que los nombres de las columnas estén en inglés.
¡Hola!
He editado el post con algunos datos.
¡¡Gracias!!
Hola
Comparta algunos datos con los que trabajar (en un formulario que se pueda pegar en un archivo de MS Excel) y muestre el resultado esperado en un formato de tabla simple. Si es posible, asegúrese de que los nombres de las columnas estén en inglés.
Hola @OscarCamean : la lógica de filtrado tiene en cuenta cada mes individualmente y resume correctamente los usuarios que cumplen los criterios y devuelve el número de usuarios únicos por mes que cumplen los criterios.
Verifique la siguiente medida:
TotalUsuariosRecurrentes =
VAR SELECTOR = IF([Recurrencia numerico] = 365, 12, [meses])
VAR SELECTOR_veces = [n_veces]
La carga es = tode()
Var facheini = edate(is, selector * -1)
Var fechaffin = es
VAR ResumenUsuarios =
SUMMARIZE(
FILTER(
Tabla,
Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
),
Tabla[UserId],
Tabla[EndOfMonth],
"SumaVisitas", SUM(Tabla[N_VISITAS])
)
VAR UsuariosRecurrentesPorMes =
ADDCOLUMNS(
SUMMARIZE(
ResumenUsuarios,
[UserId], [EndOfMonth]
),
"CumpleCondicion",
IF(
CALCULATE(SUM([SumaVisitas]), ResumenUsuarios) >= SELECTOR_veces,
1,
0
)
)
VAR UsuariosRecurrentes =
SUMMARIZE(
FILTER(
SUMMARIZE(
UsuariosRecurrentesPorMes,
[UserId],
"MesesConVisitas", SUM([CumpleCondicion])
),
[MesesConVisitas] >= SELECTOR
),
[UserId]
)
DEVOLUCIÓN
CALCULAR(
DISTINCTCOUNT(Tabla[UserId]),
FILTRO(
Tabla,
Tabla[UserId] IN UsuariosRecurrentes &&
Tabla[EndOfMonth] >= FechaIni && Tabla[EndOfMonth] <= FechaFin
)
)
Este paso agrega una columna para indicar si el usuario cumple la condición de tener acciones >= [n_veces] en ese mes.
Espero que funcione. Por favor, compruébelo
Check out the September 2024 Power BI update to learn about new features.
Learn from experts, get hands-on experience, and win awesome prizes.
User | Count |
---|---|
4 | |
3 | |
2 | |
2 | |
1 |