Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago
Solved

Problema ALL/ALLEXCEPT

Querida comunidad,

Estoy trabajando en el libro Supercharge PowerBI y me estoy encontrando con algo que simplemente no entiendo.

Tengo una matriz con País como filtro y estoy comparando la diferencia entre usar la función ALL para calcular el monto total de ventas con toda la tabla versus solo una columna con las siguientes medidas:

Ventas globales totales = CALCULAR([Ventas totales];TODO(Territorios))

Total de ventas en todos los países = CALCULAR([Ventas totales];TODO(Territorios[País]))
El resultado es, de hecho, el mismo.
Ahora estoy probando esto en una matriz diferente con Daynames como filtro con las siguientes medidas:
Ventas totales del calendario = CALCULAR([Ventas totales];TODO('Calendario'))
Total de días Nombres Ventas = CALCULAR([Ventas totales];TODO('Calendario'[DayName]))
El resultado no es el mismo y no puedo entender por qué. La única diferencia que estoy viendo es que el nombre de la tabla Calendario está rodeado de ', y la tabla Territorios no lo está, no sé por qué. Y simplemente no entiendo por qué el resultado no es el mismo. Me refiero al mismo nombre de columna que el filtro de la matriz, así que ¿por qué no obtengo los mismos resultados? La función debería haber eliminado el filtro de la matriz (daynames), pero simplemente no lo hace. ¿Alguien puede explicar por qué está sucediendo esto? ¡Realmente aprecio su ayuda!
Con un cordial saludo,
DLU

  • Syndicate_Admin's avatar
    Syndicate_Admin
    4 years ago

    De hecho, tiene razón, está usando la columna 'Calendario' [DayNumberOfWeek]. La razón es que la columna 'Calendar'[DayName] está ordenada por 'Calendar'[DayNumberOfWeek], por lo que Power BI tiene que incluirla en la tabla de resumen subyacente para que pueda mostrarla correctamente en el objeto visual.

    Si agrega un REMOVEFILTERS o ALL en 'Calendar' [DayNumberOfWeek] a su medida, así como el existente en 'Calendar' [DayName], entonces eso debería darle los resultados que espera.

  • Syndicate_Admin's avatar
    Syndicate_Admin
    4 years ago

    En un visual de tabla o matriz, los encabezados de columna y fila se aplican a cada celda individual para calcular el valor de esa combinación de filtros, por lo que si tuviera meses en la fila y día de la semana en las columnas, entonces para cada celda usaría (mes, día de la semana) como filtro combinado.

    Posiblemente la mejor manera de pensar en ordenar columnas es como si fueran encabezados ocultos, por lo que también se incluyen en el filtro, por lo que en mi ejemplo anterior los filtros aplicados serían en realidad ( mes, número de mes, día de la semana, número de día de la semana ) ya que cada una de las columnas base requiere que se incluya una columna de ordenación.

7 Replies

  • El ' Calendario circundante se debe a que CALENDARIO es una función DAX, por lo que el ' es necesario para distinguir su tabla Calendario de la función. No te preocupes, no está causando el problema.

    Parece que se están aplicando más filtros de los que sabe, Power BI a veces crea tablas de fechas locales, que no puede ver en Power BI Desktop, y podría estar aplicando un filtro a eso.

    Para ver exactamente qué filtros se están aplicando, abra Performance Analyzer en la cinta de opciones Ver, haga clic en Iniciar grabación y, a continuación, en Actualizar elementos visuales. Expanda la entrada del objeto visual de la matriz y copie el código. A continuación, puede pegarlo en DAX Studio, o en cualquier editor de texto, y examinar exactamente qué filtros se están aplicando.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Estimado johnt75,

      Gracias por su rápida respuesta. He seguido los pasos que describiste y este fue el resultado dentro de DAX Studio:

      Consulta DAX
      DEFINIR
      VAR __DS0Core =
      RESUMIRCOLUMNAS(
      ROLLUPADDISSUBTOTAL(
      ROLLUPGROUP('Calendar'[DayName], 'Calendar'[DayNumberOfWeek]), "IsGrandTotalRowTotal"
      ),
      "Total_Sales", 'Ventas'[Ventas totales],
      "Total_Sales_for_All_Days_Selected_Dates", 'Ventas'[Ventas totales para todos los días fechas seleccionadas],
      "v__Sales_for_All_Days_Selected_Dates", 'Ventas'[% ventas para todos los días fechas seleccionadas],
      "Total_Calendar_Sales", 'Ventas'[Ventas totales del calendario],
      "Total_Days_Names_Sales", 'Ventas'[Total de días nombra ventas]
      )

      VAR __DS0PrimaryWindowed =
      TOPN(
      502,
      __DS0Core,
      [IsGrandTotalRowTotal],
      0,
      'Calendario'[DayNumberOfWeek],
      1,
      'Calendario'[DayName],
      1
      )

      EVALUAR
      __DS0PrimaryWindowed

      ORDENAR POR
      [IsGrandTotalRowTotal] DESC, 'Calendar'[DayNumberOfWeek], 'Calendar'[DayName]

      ¿Estoy interpretando esto correctamente que también hace algo con Calendar DayNumberOfWeek? Si es así, ¿podría explicarme por qué está sucediendo esto y qué está haciendo? Y solo para su información. La tabla de calendario no es una creada con DAX, se importó desde un archivo de Excel. Y también he deshabilitado la capacidad de PowerBI para crear sus propias tablas de citas. ¡Muchas gracias de nuevo!

      Gr DLU

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        De hecho, tiene razón, está usando la columna 'Calendario' [DayNumberOfWeek]. La razón es que la columna 'Calendar'[DayName] está ordenada por 'Calendar'[DayNumberOfWeek], por lo que Power BI tiene que incluirla en la tabla de resumen subyacente para que pueda mostrarla correctamente en el objeto visual.

        Si agrega un REMOVEFILTERS o ALL en 'Calendar' [DayNumberOfWeek] a su medida, así como el existente en 'Calendar' [DayName], entonces eso debería darle los resultados que espera.

  • Cuando se usa así en CALCULATE, ALL debe considerarse como "Eliminar filtros de". De hecho, hay una función llamada REMOVEFILTERS que es solo un alias de todo lo que solo se puede usar dentro del cálculo. Dentro del cálculo, no devuelve todos los valores, elimina todos los filtros aplicados directamente.

    ALL ( TableName ) quita todos los filtros de la tabla. ALL ( TableName[ColumnName] ) quita los filtros que se aplican solo a esa columna. No elimina los filtros aplicados

    a otras columnas de la misma tabla.

    Entonces, como sugiere @johnt75 , hay otros filtros presentes en la tabla de fechas, pero no en la tabla de su territorio. Por ejemplo, está eliminando cualquier filtro aplicado directamente a dayname, pero si hay un filtro en el año, todavía estaría presente.