Blog

ORDENAR POR COLUMNA, INFLUENCIA EN DAX

Publicado por:

Marco Russo de SQLBI, nos presenta un articulo mas que interesante sobre la influencia del “Ordenar por”, en DAX.

Donde nos desglosa de una manera pormenorizada, la influencia que tiene en nuestras medidas de DAX, el ordenar por otra columna.

Básicamente nos hace una pormenorizada comparativa del lenguaje DAX y el lenguaje MDX que utiliza Excel en sus tablas dinámicas. Así tras la lectura del artículo, las conclusiones que podemos obtener de una forma rápida son que, en el contexto de filtro, el comportamiento de ambos lenguajes es completamente distinto, tanto es así, que podemos observar simplemente con realizar una medida con la función ISFILTERED, si la función esta sujeta al filtro de cuales columnas

En DAX, el filtro esta activo tanto para la columna a la que nos referimos como a la columna por la que pretendemos ordenar, a diferencia de MDX en Excel, que estaría tan solo sujeta al filtro de la columna que queremos representar en nuestra tabla dinámica

No nos vamos a extender presentando ejemplos en Excel, pero si en Power BI.

El campo que normalmente y de una forma generalizada siempre ordenamos por otra columna suele ser el mes en formato texto de nuestra Tabla Calendario, dado que, al extraer el mes de la fecha de nuestra tabla, lo que nos proporciona es el numero de mes, cuando aplicamos en DAX

    Mes = FORMAT((Calendario[Date]);»mmmm»)

Con el fin de obtener el nombre del mes y representarlo en nuestros visuales.

El problema es que al ordenar este siempre lo hará en orden alfabético, lo que nos obliga a indicarles que dicho campo lo ordenaremos por el campo mes número, de tal manera que la representación siempre seria en un orden cronológico correcto.

Pongamos por caso que queremos visualizar las ventas de un ejercicio concreto por mes. Evidentemente en este visual los importes que observamos son correctos y no existe ningún problema.

Este surge cuando por ejemplo necesitamos visualizar además una medida que necesite evitar el filtro de línea existente en la visualización. Supongamos que deseamos ver el % que se corresponde de dichas ventas por mes respecto al total. Nuestra expresión DAX en principio seria la que sigue:

% Mensual Erroneo =
DIVIDE (
                        [ImporteVentas];
                       CALCULATE (
                                    [ImporteVentas];
                                               ALL (Calendario[Mes])
                        )
)

Le hemos llamado % Mensual Erroneo, por que como veréis al representarlo en nuestra tabla los valores que nos aporta no parecen ni por asomo que pudieran ser correctos.

Como podemos observar para cada línea nos arroja un 100% de ventas. ¿Donde esta el error? Si nuestra expresión a través de ALL en CALCULATE asume la totalidad de los meses.

La respuesta esta en el contexto de Filtro, en DAX como hemos avanzado antes el contexto de filtro, afecta tanto al campo Mes, como al campo N_Mes (número de mes) que como podemos observar en la expresión no se tiene en cuenta. La solución es por tanto bien sencilla. Hay que tener en cuenta el contexto de filtro, y la expresión por tanto  que nos arrojaría un porcentaje correcto para cada línea seria:

% Mensual Correcto =
DIVIDE (
           [ImporteVentas];
              CALCULATE (
            [ImporteVentas];
              ALL (Calendario[N_mes];Calendario[Mes])
           )
)

 

Donde tenemos en cuenta ambos campos a la hora de seleccionarlos en la función ALL

 

La conclusión definitiva en este sentido, es que en DAX, el contexto de filtro afecta tanto al campo por el que queremos visualizar nuestra expresión como al campo por el que el mismo esta ordenado. Teniendo esto en cuenta no tendremos problema alguno a la hora de realizar nuestros cálculos para las visualizaciones de nuestro Cuadro de Mandos

 

Saludos

0

Sobre el Autor:

  Posts Relacionados
  • No related posts found.

Escribe un Comentario