Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!
Soy bastante nuevo en Power BI y Dax, y estoy intentando agregar un filtro en un objeto de tabla de matriz en una página.
Aquí está mi conjunto de datos de ejemplo:
| Ubicación | Hora | Persona |
| a | 1 | Joe |
| a | 2 | AM |
| a | 3 | y |
| a | 4 | Fred |
| b | 1 | Fred |
| b | 2 | y |
| b | 3 | AM |
| b | 4 | Joe |
| c | 1 | AM |
| c | 2 | Joe |
| c | 3 | Fred |
| c | 4 | y |
Me gustaría tener un control seleccionable por el usuario, tal vez una segmentación, para elegir una sola persona, como de un parámetro, y luego hacer que una expresión filtre el conjunto de datos, manteniendo solo los registros con un tiempo mayor o igual al tiempo de la persona seleccionada para cada ubicación.
Por lo tanto, si el usuario elige "ED", el conjunto de datos resultante sería:
| Ubicación | Hora | Persona |
| a | 3 | y |
| a | 4 | Fred |
| b | 2 | y |
| b | 3 | AM |
| b | 4 | Joe |
| c | 4 | y |
¿Cómo puedo crear esta experiencia en Power BI?
algo que he intentado, crear una tabla calculada de distintos valores de Person, agregar un cortador basado en eso, luego intentar usar SELECTEDVALUE(), pero debido a que esa función se evalúa más tarde, no parece ser capaz de filtrar el objeto de la tabla, ni se puede usar en una función CREATETABLE() o incluso FILTER() en un CALCULATE() y MAXX() para filtrar los registros en un objeto de Matrix Table. Es posible que esté cerca de esas funciones, pero simplemente no las use en la secuencia correcta.
Es como si estuviera tratando de filtrar con una medida, pero no puedo obtener una medida para filtrar filas.
¡Gracias por cualquier ayuda que pueda ofrecer!
Hola @joemako ,
Para lograrlo, usaremos una tabla desconectada para la segmentación para evitar el filtrado directo de filas.
Pasos:
1. Cree una tabla desconectada para la segmentación:
Cree una nueva tabla para usarla como segmentación de datos, que contenga las personas distintas, pero que no esté vinculada a la tabla de datos principal.
SlicerPersonTable = DISTINCT(SELECTCOLUMNS('Tabla', "Persona", 'Tabla'[Persona]))
2. Agregue la cortadora para persona:
Use la columna SlicerPersonTable[Person] en una segmentación para permitir que los usuarios seleccionen a la persona.
3. Cree la medida de filtrado:
Ahora, cree una medida que permita filtrar en función del tiempo de la persona seleccionada, pero mantenga todas las demás filas para la misma ubicación:
Filas filtradas =
VAR SelectedPerson = SELECTEDVALUE('SlicerPersonTable'[Person]) -- Obtener la persona seleccionada del slicer
VAR SelectedPersonTime =
CALCULAR(
MAX('Table'[Time]), -- Obtener la hora de la persona seleccionada en la ubicación
ALLEXCEPT('Mesa', 'Mesa'[Ubicación]),
'Mesa'[Persona] = PersonaSeleccionada
)
DEVOLUCIÓN
SI(
MAX('Table'[Time]) >= SelectedPersonTime, -- Mostrar filas con el tiempo >= tiempo de la persona seleccionada
1,
0
)
4. Aplicar la medida como filtro:
Ve a tu objeto visual de Matrix.
En el panel Filtros de este objeto visual, arrastre la medida FilteredRows y establézcala para que muestre solo los valores en los que FilteredRows = 1.
¿Qué piensa de esta modificación (a la declaración condicional en su RETURN) para ayudar a que esto funcione cuando una persona no está en una ubicación, es decir, cuando no hay un valor de tiempo para esa combinación de ubicación y personal, cuando "SelectedPersonTime" está en blanco, y para ajustar esos registros:
AND( NOT ISBLANK(SelectedPersonTime) , MAX('Data'[Time]) >= SelectedPersonTime ), -- Show rows with time >= selected person's time
¡Gracias por esto Marcel, esto me da la solución que estoy buscando!
Para ayudarme a entender mejor lo que está sucediendo aquí:
¿Qué ocurre cuando elimino el campo Persona o Ubicación del objeto visual Matriz? Actualmente da resultados diferentes. ¿Es posible escribir esta expresión para que funcione incluso si Persona o Ubicación no es un campo utilizado en la matriz visual?
Además, ¿qué pasaría si no todas las personas estuvieran en todos los lugares? Por ejemplo, si el último registro de "C,4,ED" se cambió a "C,4,Jim", entonces cuando se selecciona "ED", no hay ningún filtro en la ubicación "C", se devuelven todos los registros de esa ubicación.
Su solución funciona muy bien para esta situación específica, y me temo que mi comprensión actual de Power BI y Dax me impide entender cómo extender esta expresión para trabajar en situaciones más complejas.
Hola @joemako
The ALLEXCEPT('Table', 'Table'[Location]) in your measure is specifically telling Power BI to keep only the filter on Location when calculating the SelectedPersonTime. This ensures that the measure looks for the selected person's time only at the current location.
Al eliminar "Persona" o "Ubicación" de la matriz, cambia el contexto de filtrado:
Eliminación de "persona": The measure might still work correctly because the person is being selected by the slicer, but it could affect how rows are displayed in the visual, as MAX('Table'[Person]) won’t work directly when the Person field is not used.
Eliminación de "Ubicación": This will break the logic, as the measure depends on filtering by location (ALLEXCEPT), and without Location, it can no longer identify the correct location-specific time for the selected person.
Para que la medida funcione incluso si no se usa "Persona" o "Ubicación" en la matriz, debemos ajustar ligeramente la medida para que dependa menos del contexto visual.
En la versión actual de la medida, cuando se selecciona "Ed" pero no hay "Ed" en la ubicación "c", el filtro de la ubicación "c" no funciona correctamente y devuelve todas las filas de esa ubicación.
Para solucionar este problema, debemos asegurarnos de que la medida no devuelva filas para las ubicaciones en las que la persona seleccionada esté ausente. Podemos ajustar la medida para incluir una verificación para ver si la persona seleccionada existe en la ubicación actual. Así que el meauser ajustado será así:
El resultado es el siguiente.
¡Hazme saber si esto funciona o si necesitas más aclaraciones!