Forum Discussion
Filtro de varias columnas
Hola
Estoy intentando crear un filtro basado en la siguiente tabla. El objetivo sería crear un filtro con todos los valores distintos en la columna Manager1 y usarlo como filtro para las cuatro columnas.
Por ejemplo:
El filtro para lo siguiente contendría los valores ManagerA, ManagerB, ManagerC, ManagerD, ManagerE porque son los valores distintos de la columna Manager1.
Por lo tanto, si filtró por Gerente C, podría ver Empleado A, Empleado B, Empleado D, Empleado F, independientemente de la columna en la que se encuentren.
| Gerente1 | Gerente2 | Gerente3 | Gerente4 | |
| Empleado A | Director | GerenteB | GerenteC | GerenteD |
| Empleado B | GerenteC | GerenteD | ||
| Empleado C | GerenteD | |||
| Empleado D | GerenteB | GerenteC | GerenteD | |
| Empleado E | Gerentes | GerenteF | ||
| Empleado F | GerenteB | GerenteC | GerenteD |
Avísame si tienes alguna pregunta. Gracias de antemano por la ayuda.
Andrew
6 Replies
- Syndicate_Admin
Administrator
Echa un vistazo a https://www.daxpatterns.com/parent-child-hierarchies/
- Syndicate_Admin
Administrator
Gracias por la respuesta de Laxmanjatoth y johnt75, permítanme proporcionar otra idea:
Hola, @arosenberg
Mi enfoque es casi idéntico al de Laxmanjatoth. He creado el siguiente ejemplo para ayudar a su comprensión:
1.En primer lugar, supongamos que tus datos originales se ven así:
2.En segundo lugar, en Power Query, seleccione todas las columnas excepto la primera, como se muestra en la imagen a continuación:
3.A continuación, elimine las columnas innecesarias:
4.A continuación, cree los objetos de visualización y las segmentaciones en la aplicación de escritorio:
Es posible que deba tener en cuenta que hay valores nulos en las opciones de segmentación, por lo que debemos agregar un filtro adicional:
5. Aquí está mi resultado final, que espero cumpla con sus requisitos.
¿Puede compartir datos de muestra y salida de muestra en formato tabular si estoy entendiendo mal? O un ejemplo de pbix después de eliminar datos confidenciales. Podemos entender mejor el problema y ayudarle.
Al cargar un archivo, tenga cuidado de eliminar la información confidencial.
Si tiene preguntas sobre cómo cargar datos, puede probar los siguientes vínculos:
Cómo proporcionar datos de ejemplo en el foro de Power BI - Microsoft Fabric Community
Resuelto: Cómo subir PBI en la comunidad - Microsoft Fabric Community
Al cargar un archivo, tenga cuidado de eliminar la información confidencial.
Por favor, encuentre la pbix adjunta relevante para el caso.
Saludos
Leroy Lu
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.
- Syndicate_Admin
Administrator
hola hola , vea el sb a continuación ,
reate una tabla para todos los gerentes distintos:
Desea crear una lista distinta de administradores a partir de las cuatro columnas de administrador (Administrador1, Administrador2, Administrador3, Administrador4). Podemos usar DAX para anular la dinamización de estas columnas en una nueva tabla, lo que nos dará una lista de todos los administradores.
A continuación, le indicamos cómo puede hacerlo en Power Query:En Power Query (Transformar datos), seleccione la tabla.
Seleccione las cuatro columnas de administrador (Administrador1, Administrador2, Administrador3, Administrador4).
Haga clic con el botón derecho y elija Anular dinamización de columnas. Esto creará dos nuevas columnas:
Atributo (que contiene Manager1, Manager2, etc.),
Administrador (que contiene todos los administradores distintos de las cuatro columnas).
El resultado será una nueva tabla con todos los gestores en una sola columna:Gerente de Empleados
Empleado A GerenteA
Empleado A GerenteB
Empleado A GerenteC
Empleado A GerenteD
Empleado B GerenteC
Empleado B GerenteD
Empleado C GerenteD
Empleado D GerenteB
Empleado D GerenteC
Empleado D GerenteD
Empleado E GerenteE
Empleado E GerenteF
Empleado F GerenteB
Empleado F GerenteC
Empleado F GerenteD
Este enfoque garantiza que los nombres de los gerentes ahora estén en una sola columna, que se puede usar para filtrar a los empleados.
Crear una segmentación:Ahora que tiene una columna (Administrador) con todos los nombres de administrador distintos, puede agregar esta columna a una segmentación de datos en el informe.
En la segmentación, seleccione la columna Administrador de la tabla sin dinamizar. Esta segmentación le permitirá seleccionar un administrador específico. - Syndicate_Admin
Administrator
Solo para complicarlo un poco más, ¿qué pasa si hay varias otras columnas? No solo gerente y empleado. Similar al siguiente. ¿Seguirán funcionando estas soluciones? Probé algunos y no he podido entenderlos.
en en # Cliente Producto Horas Suma de horas Gerente1 Gerente2 Gerente3 Gerente4 Empleado A 12 Cliente A Producto A 4 8 Director GerenteB GerenteC GerenteD Empleado A 12 Cliente B Producto B 4 8 Director GerenteB GerenteC GerenteD Empleado B 34 Cliente B Producto A 8 8 GerenteC GerenteD Empleado C 56 Cliente C Producto B 2.5 7.5 GerenteD Empleado C 56 Cliente F Producto D 3.5 7.5 GerenteD Empleado C 56 Cliente A Producto C 1.5 7.5 GerenteD Empleado D 78 Cliente D Producto C 8 8 GerenteB GerenteC GerenteD Empleado E 90 Cliente E Producto D 8 8 Gerentes GerenteF Empleado F 11 Cliente F Producto B 8 8 GerenteB GerenteC GerenteD ¿Hay alguna manera de ver solo los registros de los empleados que reportan a ManagerC?
¡Gracias a todos por las respuestas
- Syndicate_Admin
Administrator
Hola, @arosenberg
Gracias por su rápida respuesta. Basándome en la estructura de datos que me ha proporcionado, tengo dos propuestas:
Antes de comenzar con cualquiera de las opciones, debemos preparar la segmentación. Por lo tanto, he creado la siguiente tabla de cálculo para generar columnas para todos los administradores, que servirá como segmentador.
Table 2 = VAR n1=SELECTCOLUMNS('Table',"1",'Table'[Manager1]) VAR n2=SELECTCOLUMNS('Table',"1",'Table'[Manager2]) VAR n3=SELECTCOLUMNS('Table',"1",'Table'[Manager3]) VAR n4=SELECTCOLUMNS('Table',"1",'Table'[Manager4]) RETURN DISTINCT(UNION(n1,n2,n3,n4))
Por supuesto, la tabla de cálculo de este paso también se puede procesar mediante Power Query. A continuación se muestran las instrucciones detalladas del idioma M:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wcs0tyMmvTE1VcFTSUTI0AhLOOZmpeSVgfkBRfkppMoRtAsQWQOybmJeYnlrkiGA6IZjOCKaLUqwOHuOdkIx3otx4kCJjE+zGO0KNtsBhkI6SAhijGAhSYWqGMNAZzb1GeqZA0hxMYphE0DQ3JNNA2owpMg05qkByhiSZBpIyt0CY5oJmGlrQ4YoODHNdgUKWBghzXdH8jGauK4Lpht2hIGFDQ+yB6ESiQ2MB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [em = _t, #"em #" = _t, Client = _t, Product = _t, Hours = _t, #"Sum Hours" = _t, Manager1 = _t, Manager2 = _t, Manager3 = _t, Manager4 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"em", type text}, {"em #", Int64.Type}, {"Client", type text}, {"Product", type text}, {"Hours", type number}, {"Sum Hours", type number}, {"Manager1", type text}, {"Manager2", type text}, {"Manager3", type text}, {"Manager4", type text}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"em #", "Client", "Product", "Hours", "Sum Hours"}), #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Removed Columns", {"em"}, "Attribute", "Value"), #"Removed Columns1" = Table.RemoveColumns(#"Unpivoted Columns",{"em", "Attribute"}), #"Removed Duplicates" = Table.Distinct(#"Removed Columns1") in #"Removed Duplicates"1.Para la primera propuesta:
En primer lugar, deberá seleccionar estos campos en Power Query y luego fusionarlos.
En segundo lugar, utilice las siguientes medidas y aplíquelas a los filtros de los objetos visuales:
MEASURE = IF ( ISFILTERED ( 'Table 2'[1] ), IF ( CONTAINSSTRING ( MAX ( 'Table'[Merged] ), MAX ( 'Table 2'[1] ) ), 1, 0 ), 1 )Estos son los resultados finales:
2.Para la segunda propuesta:
Puede utilizar directamente las siguientes medidas y aplicarlas a los filtros de los objetos visuales:
Measure2 = VAR cc1 = MAX ( 'Table 2'[1] ) RETURN IF ( ISFILTERED ( 'Table 2'[1] ), IF ( CONTAINS ( 'Table', 'Table'[Manager1], cc1 ) || CONTAINS ( 'Table', 'Table'[Manager2], cc1 ) || CONTAINS ( 'Table', 'Table'[Manager3], cc1 ) || CONTAINS ( 'Table', 'Table'[Manager4], cc1 ), 1, 0 ), 1 )Estos son los resultados finales:
Por favor, encuentre la pbix adjunta relevante para el caso.
Saludos
Leroy Lu
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.
- Syndicate_Admin
Administrator
Hola, muchas gracias por esta solución.
Esto funcionó bien. Una pregunta para ti, ¿hay alguna manera de hacer que puedas filtrar por varios gerentes a la vez?