Forum Discussion
Filtrado de datos en el objeto visual Matrix
Hola a todos
Necesito una solución con mi tabla de matrices. Tengo una matriz visual que muestra los nombres de los servidores junto con la hora, cuántas veces se ha iniciado sesión en el sistema, en un período de tiempo particular. Ejemplo: Si hago clic en el cortador de 7 días, debería mostrarme todos los nombres de servidores que contienen valores, pero no el que tiene ceros.
Al igual que la primera columna de 7d debe reflejar todos los servidores (nombre del activo) con valores, excluyendo el nombre del servidor que se pone a ceros.
Del mismo modo, cuando hacemos clic en el botón de corte de 30d, debería mostrar todos los nombres de activos que tienen valores, pero con el requisito de que su columna anterior, es decir, 7d, debe ser cero. La primera entrada debe mostrarse en la columna 30d. (ver imagen para la referencia)
y cuando hacemos clic en el botón de 45 días, debería mostrarme todos los nombres de servidor con valor, excluyendo el nombre del servidor con ceros y, de manera similar, la columna anterior, es decir, 7d y 30d, debe ser cero (consulte M50118612,M5044354 EN LA TABLA A CONTINUACIÓN)
DEBE SEGUIR LA MISMA REGLA PARA LOS 3 M, 6 M, 1 AÑO
La tabla de arriba es para referencia de 3M.
Por favor, eche un vistazo al requisito y vea si alguien puede ayudar. Gracias de antemano.
6 Replies
- Syndicate_Admin
Administrator
Hola @Gurpreet-12345
Para configurar la tabla de matrices en Power BI para que cumpla estas condiciones, puede usar medidas y filtros de DAX para controlar la visualización en función de las selecciones de segmentación. Aquí hay una guía paso a paso para lograr esto:
Pasos:
1. Cree el segmentador para marcos de tiempo:
- Configura una segmentación con opciones como 7 días, 30 días, 45 días, 3 meses (3 millones), 6 meses (6 millones) y 1 año (1 año).
- Asegúrese de que esta segmentación esté conectada a la tabla que registra las horas de inicio de sesión para que, al seleccionar un período de tiempo, se filtren los datos en consecuencia.2. Defina medidas para cada período de tiempo:
- Cree medidas separadas para calcular el número de inicios de sesión para cada período de tiempo (por ejemplo, '7d Logins', '30d Logins', etc.). Estas medidas contarán los inicios de sesión dentro del período de tiempo específico y le permitirán aplicar lógica condicional.
- Por ejemplo, para obtener el recuento de inicios de sesión de los últimos 7 días, podrías usar una medida como la siguiente:
DAX7d Logins = CALCULATE( COUNT(Login[LoginID]), DATESINPERIOD(Date[Date], TODAY(), -7, DAY) )
- Del mismo modo, cree medidas para 30 días, 45 días, etc.3. Cree una medida filtrada para excluir ceros:
- Para excluir servidores con cero inicios de sesión en el período de tiempo seleccionado, use una medida que solo devuelva valores cuando el recuento sea mayor que cero.
DAX7d Logins (Filtered) = IF([7d Logins] > 0, [7d Logins], BLANK())
- Repita esto para cada período de tiempo, como 'Inicios de sesión 30d (filtrados)', 'Inicios de sesión 45d (filtrados)', etc.4. Crear lógica de visualización condicional:
- Use DAX para aplicar las condiciones de visualización de cada columna en función de las columnas anteriores. Por ejemplo, para la columna de 30 días, desea mostrar valores solo si "7d Logins" es cero y "30d Logins" es mayor que cero:
DAX30d Display = IF([7d Logins] = 0 && [30d Logins] > 0, [30d Logins], BLANK())
- Del mismo modo, cree medidas para cada período de tiempo subsiguiente, haciendo que el período de tiempo actual tenga inicios de sesión y que todos los anteriores sean cero.5. Agregue las medidas a su matriz visual:
- Coloque 'Nombre del activo' o 'Nombre del servidor' en la sección Filas de su matriz.
- Agregue cada una de las medidas de visualización (por ejemplo, 'Pantalla 7d', 'Pantalla 30d', 'Pantalla 45d', etc.) en la sección Valores de su objeto visual de matriz. Esto garantizará que solo se muestren los valores que cumplan con sus condiciones.6. Habilite el comportamiento de filtrado correcto:
- Vaya al panel Filtros de nivel visual y aplique filtros a cada medida para excluir los espacios en blanco, lo que ocultará las filas con ceros en función de las condiciones establecidas en las medidas.Por favor, acepte esto como solución si ayuda. Agradezco felicitaciones.
- Syndicate_Admin
Administrator
Hola, gracias por tu respuesta. Se lo agradezco mucho.
Saludos
- Syndicate_Admin
Administrator
Hola @Gurpreet-12345
¿El método de shafiz_p resolvió tu problema? En caso afirmativo, ¿podría marcar su respuesta como una solución? Esto ayudará a más usuarios que se enfrentan a dificultades iguales o similares. ¡Gracias!
Por favor, no dude en informarme si todavía hay problemas.
Saludos
Yulia Xu
- Syndicate_Admin
Administrator
Hola @Gurpreet-12345 Como puedo entender que desea que la capacidad de filtrar la matriz con la selección actual del cortador debe ser distinta de cero y el marco de tiempo anterior debe ser cero.
He intentado implementar este escenario utilizando una tabla desconectada, una medida individual para cada período de inicio de sesión, un valor de campo y una medida de filtro de nivel visual.
Tengo una tabla de datos simple con solo nombre de usuario y fecha de inicio de sesión. Desea contar el número total de inicios de sesión de cada usuario en un período de tiempo.
Tengo una tabla de calendario y relacionado con la fecha entre sí relación de uno a muchos. Check-out:A continuación, las filas de recuento creadas miden:
Countrows = IF( ISBLANK(COUNTROWS(LoginTable)), 0, COUNTROWS(LoginTable) )Tengo 5 períodos de tiempo en la tabla del calendario: 7D, 15D, 30D, 60D y >60D. Check-out:
Se crearon 5 medidas individuales para cada período de tiempo. Comprobar:
7D = CALCULATE([CountRows], 'Calendar'[TimeFrame] = "7D") 15D = CALCULATE([CountRows], 'Calendar'[TimeFrame] = "15D") 30D = CALCULATE([CountRows], 'Calendar'[TimeFrame] = "30D") 60D = CALCULATE([CountRows], 'Calendar'[TimeFrame] = "60D") >60D = CALCULATE([CountRows], 'Calendar'[TimeFrame] = ">60D")Cree un valor de campo sin segmentación. Compruébalo:
Ahora se ha creado una matriz con el usuario (para mi caso) en filas y el valor de campo TimeFrame recién creado en la sección Valores. Vea mi imagen de matriz:
Ahora cree una tabla TimeFrame desconectada porque no queremos filtrar la tabla de datos subyacente. Para crear una tabla desconectada con TimeFrame e Index distintos (para ordenar en la segmentación de datos), intente usar summarize o puede usar Power Query:
Ahora cree una segmentación con esta columna TimeFrame. Ahora cree una medida para el filtro de nivel visual. Pruebe el siguiente código:
SelectedMeasure = SWITCH( TRUE(), ISBLANK(SELECTEDVALUE(TimeFrame[TimeFrame])), [7D] + [15D] + [30D] + [60D] + [>60D], SELECTEDVALUE(TimeFrame[TimeFrame]) = "7D", IF([7D] <> 0, [7D], BLANK()), SELECTEDVALUE(TimeFrame[TimeFrame]) = "15D", IF([15D] <> 0 && [7D] = 0, [15D], BLANK()), SELECTEDVALUE(TimeFrame[TimeFrame]) = "30D", IF([30D] <> 0 && [15D] = 0 && [7D] = 0, [30D], BLANK()), SELECTEDVALUE(TimeFrame[TimeFrame]) = "60D", IF([60D] <> 0 && [30D] = 0 && [15D] = 0 && [7D] = 0, [60D], BLANK()), SELECTEDVALUE(TimeFrame[TimeFrame]) = ">60D", IF([>60D] <> 0 && [60D] = 0 && [30D] = 0 && [15D] = 0 && [7D] = 0, [>60D], BLANK()) )Coloque esta medida en filtrar esta sección visual en el panel de filtro y establézcala en no está en blanco. Check-out:
Ya está. Ahora podrá filtrar la medida actual con un valor distinto de cero y todo el marco de tiempo anterior es cero. Echa un vistazo a la salida:
Salida 1 (cuando se selecciona 7D):Salida 2 (cuando se selecciona 15D):
Salida 3 (cuando se selecciona 30D):
Mira, para 30D tenemos solo una fila donde la selección actual es distinta de cero y la anterior es cero.
¡Espero que esto ayude!Si esto resolvió su problema, ¡acéptelo como una solución y felicitaciones!
Saludos
Shahariar Hafiz- Syndicate_Admin
Administrator
Hola, gracias por tu respuesta. Se lo agradezco mucho. Este se parece a lo que estoy buscando. ¿Es posible adjuntar el archivo pbix? Sería de gran ayuda.
Saludos
- Syndicate_Admin
Administrator
Aquí está el enlace de descarga de PBIX:
Descargue el archivo aquí
¡Espero que esto ayude!Si, por favor, marque esto como una solución y un felicito!!