Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
1 year ago

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.

Gerente1Gerente2Gerente3Gerente4
Empleado ADirectorGerenteBGerenteCGerenteD
Empleado BGerenteCGerenteD
Empleado CGerenteD
Empleado DGerenteBGerenteCGerenteD
Empleado EGerentesGerenteF
Empleado FGerenteBGerenteCGerenteD

Avísame si tienes alguna pregunta. Gracias de antemano por la ayuda.

Andrew

6 Replies

  • 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.

  • 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.

  • 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.

    enen #ClienteProductoHorasSuma de horasGerente1Gerente2Gerente3Gerente4
    Empleado A12Cliente AProducto A48DirectorGerenteBGerenteCGerenteD
    Empleado A12Cliente BProducto B48DirectorGerenteBGerenteCGerenteD
    Empleado B34Cliente BProducto A88GerenteCGerenteD
    Empleado C56Cliente CProducto B2.57.5GerenteD
    Empleado C56Cliente FProducto D3.57.5GerenteD
    Empleado C56Cliente AProducto C1.57.5GerenteD
    Empleado D78Cliente DProducto C88GerenteBGerenteCGerenteD
    Empleado E90Cliente EProducto D88GerentesGerenteF
    Empleado F11Cliente FProducto B88GerenteBGerenteCGerenteD

    ¿Hay alguna manera de ver solo los registros de los empleados que reportan a ManagerC?

    ¡Gracias a todos por las respuestas

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        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?