Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago

Filtrado con ALLEXCEPT()

Hola

Estoy luchando para que una Medida actúe de la manera en que debería usar AllExcept().

Para el contexto, imagina que mis datos son:

NegocioGatoProyectoCostar
Autobús AXP1US$ 1
Autobús AYP2US$ 5
Autobús AYP3US$ 3
Autobús BXP4US$ 8
Autobús BYP5US$ 7


Tengo una cortadora para Negocios + Proyecto.
En el tablero, quiero mostrar el costo total de la catergory del proyecto en todo el negocio.

Por ejemplo, si se selecciona el Proyecto 3, la medida devolverá $ 8 (5 + 3). Si se selecciona el Proyecto 1, será de $ 1. Si se selecciona el Proyecto 5, será de $ 7, etc.

Inicialmente, para crear esta medida dupliqué la consulta y agregué los filtros a la tabla antes de llevarla a PowerBI. Llamé a esta tabla TEST.
La medida que creé, que funciona , es

PRUEBA DE SUMA = 

CALCULAR(
DISTINCTCOUNT(
TEST[Proyecto]
),
TODOSEXCEPTO(
PRUEBA,
TEST[Negocios],
PRUEBA[Cat]
)
)

Esto funciona como se esperaba.

En mi informe tengo algunos otros filtros en toda la página que también deben tenerse en cuenta. Esto se debe a que el proyecto aparecerá varias veces en el conjunto de datos, pero solo queremos ver uno donde la Fuente = "Principal", Progreso = "Activo" y la fecha es posterior al 01/09/2020.

Sé que quería repetir esta medida con la tabla real (llamada 'Tabla'). Esto, por supuesto, no funcionó correctamente, ya que no estaba considerando los filtros adicionales requeridos del informe.

Pero incluso cuando se agregan los filtros, no funciona. En realidad, parece estar filtrando en exceso los datos, ya que el número es significativamente menor que el real.

La medida se ve así

SUMA 2 REAL = 
CALCULAR(
DISTINCTCOUNT(
Tabla[Proyecto]
),
TODOSEXCEPTO(
Mesa,
Tabla[Negocios],
Tabla[Cat],
Tabla[Fuente],
Tabla[Progreso],

Tabla[Fecha]
)
)

¿Alguna pista de por qué esto no está funcionando como se esperaba?

Ninguna combinación de los filtros adicionales está funcionando. ¡Siento que esto debería ser simple!

4 Replies

  • @bh21 , allexpect honrará esos filtros de la segmentación de datos / filtro y del contexto de la fila también ,

    Puedes probar como

    PRUEBA DE SUMA =

    CALCULAR(
    DISTINCTCOUNT(
    TEST[Proyecto]
    ),
    filter(allselected(TEST)
    PRUEBA
    TEST[Business] = max(TEST[Business]) &&
    TEST[Cat] = max(TEST[Cat])
    )
    )

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Hola

      Eso es solo devolver el valor para un proyecto. No la suma en todo el catergory para todos los proyectos en ese negocio.

      Además, recibo un error

      SUM TEST =

      CALCULATE(
      DISTINCTCOUNT(
      TEST[Project]
      ),
      filter(allselected(TEST)
      PRUEBA
      TEST[Business] = max(TEST[Business]) &&
      TEST[Cat] = max(TEST[Cat])
      )
      )

      Tuve que eliminar esta sección 'PRUEBA',

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Además, ¿por qué el ALLEXCEPT en mi tabla de prueba no honra la cortadora que está vinculada a esa tabla, sino que la que está vinculada a la tabla real lo afecta?

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        @bh21 ,

        De acuerdo con su declaración, sé que su lógica de cálculo para obtener el costo de suma basado en todos los valores en el mismo negocio y categoría que el proyecto que seleccione. Hasta donde yo sé, ALLEXCEPT mantendrá el filtro de las columnas en él. Pero solo seleccionamos Proyecto, no Negocio o Categoría. Entonces, creo que no obtendrás el resultado que deseas.

        Su medida básica debe verse como se muestra a continuación.

        SUM TEST = 
        VAR _SELECTBUSINESS =
            SELECTEDVALUE ( 'Table'[Business] )
        VAR _SELECTCATEGORY =
            SELECTEDVALUE ( 'Table'[Cat] )
        RETURN
            CALCULATE (
                SUM ( 'Table'[Cost] ),
                FILTER (
                    ALL ( 'Table' ),
                    'Table'[Business] = _SELECTBUSINESS
                        && 'Table'[Cat] = _SELECTCATEGORY
                )
            )

        Luego desea mantener el filtro de [Fuente], [Fecha], [Progreso], así que agréguelos al filtro y cambie TODO a ALLEXCEPT.

        SUM TEST =
        VAR _SELECTBUSINESS =
            SELECTEDVALUE ( 'Table'[Business] )
        VAR _SELECTCATEGORY =
            SELECTEDVALUE ( 'Table'[Cat] )
        RETURN
            CALCULATE (
                SUM ( 'Table'[Cost] ),
                FILTER (
                    ALLEXCEPT ( 'Table', Table[Source], Table[Progress], Table[Date] ),
                    'Table'[Business] = _SELECTBUSINESS
                        && 'Table'[Cat] = _SELECTCATEGORY
                )
            )

        Saludos
        Rico Zhou

        Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.