Medidas en filas: así es como lo hice

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Nivel: intermedio

Actualización: 2019. Ahora puedes hacer esto de forma nativa en una matriz, pero sigue siendo un buen truco que se puede usar para solucionar varios problemas.

Puede que sepa o no que (previamente) no era factible colocar medidas en filas en una matriz en Power BI. Pero se me ocurrió un truco que lo hace factible, por lo tanto sigue leyendo para descubrir cómo.

Las medidas solo se pueden colocar en columnas

Primero el problema. La única forma en que puede usar la visualización de Power BI Matrix (en este momento) es coloque las medidas en las columnas como se muestra a continuación. Después, puede tomar cualquier columna de datos de su modelo de datos (de forma general de una tabla de Dimensión / Búsqueda) y colocarla en filas en la Matriz. Entonces terminas con esto.

imagen

Esta limitación no existe en una tabla dinámica de Excel. Como puede ver a continuación, es factible cambiar valores entre columnas en filas de la Lista de campos de la tabla dinámica.

medidas en filas

Viejos trucos para nuevos propósitos

Cuando estaba pensando en este problema, mi primera intuición fue utilizar una declaración de Switch de alguna manera. Las declaraciones de cambio se pueden usar para crear una medida de cambio (como los que usé en esta publicación de blog aquí en 2014) y pensé que esto podría ser parte de la respuesta. Y después recordé otro truco que aprendí de Rob Collie uso de tablas desconectadas para alimentar una medida: sabía que tenía una solución.

Entonces, en resumen, escribí una medida de Switch que se transformará en diferentes medidas cuando se filtre, y después usé una tabla desconectada para pasar un filtro a esa medida.

Escribir una medida de interruptor

La medida de Switch es bastante sencillo de escribir de la próxima manera:

myMeasure=
     SWITCH([Selected Measure],
         1,[Total Sales],
         2,[Total Cost],
         3,[Total Margin],
         4,[Total Invoices]
     )

La forma en que funciona esta medida es que toma una entrada en forma de un número entero, y después, dependiendo de ese número, devolverá el valor de la medida apropiada como consecuencia.

Después crea una tabla auxiliar

El siguiente paso es la salsa secreta de este truco. Creé una tabla desconectada con el único propósito de pasar los valores de filtro correctos (los enteros) a la medida del interruptor.

Usé la función «Ingresar datos» en Power BI para crear una lista de las medidas que quiero colocar en las filas de la Matriz.

imagen

Tenga en cuenta que la columna de ID además es el orden de clasificación de las medidas, y la columna de ID además coincide con el esquema de numeración de medidas de cambio. Una vez creada la tabla, la agregué al modelo de datos como una tabla desconectada, no es necesario unirla a ninguna otra tabla en el modelo de datos.

Después configuro el orden de clasificación de la columna Medida de la próxima manera:

imagen

Libro de Power BI DAX

Escribir una medida de cosechadora

El siguiente paso es escribir una medida de cosechadora para extraer el valor filtrado seleccionado de la tabla. Esta medida es simplemente la próxima:

Selected Measure = MAX(MeasureTable[ID])

La medida anterior volverá el número entero más grande en el contexto de filtro actual. Si hay un filtro (a modo de ejemplo, una segmentación) en la columna Medida y el usuario ha seleccionado «Margen total» en la segmentación, entonces solo hay una fila visible en el contexto del filtro, y por eso, el MÁXIMO de las filas visibles es 3. De todos modos, obtendría el mismo resultado si usara MIN, PROMEDIO, SUMA o inclusive VALORES en la medida de mi cosechadora.

El contexto de filtro es una de las cosas más difíciles de comprender para los nuevos usuarios. Explico el contexto del filtro en detalle (y todo lo demás que necesita saber para ser excelente en el uso de Power Pivot y Power BI) en mi libro «Supercarga Power BI”.

Puede ver la medida de la cosechadora en acción a continuación. He colocado la columna de MeasureTable en una cortadora y la medida de la cosechadora en una Matriz. Cuando hago clic en la cortadora, la medida de la cosechadora se actualiza para mostrar el ID del filtro seleccionado.

slicer

Agregar la columna de medidas a la matriz

De todos modos, hay más de una forma de filtrar una tabla. En la imagen de arriba, estoy usando una cortadora, pero además puedo utilizar las filas en Matrix para proporcionar contexto de filtro. Cuando coloco la columna Medida de la Tabla de medidas en las filas de la Matriz, puede ver a continuación que la medida del recolector está devolviendo correctamente el valor de la columna ID a la visualización.

imagen

Juntándolo todo

Para juntar todo esto, reemplacé la medida del recolector con la medida Switch que escribí previamente y coloqué la columna Categorías de la tabla Productos en columnas en la Matriz.

imagen

Pero ahora hay 2 problemas. El primer problema es que las facturas totales se muestran en formato de moneda. Una limitación de este truco es que todas las medidas deben tener el mismo formato de número. Si desea ver un «Formato alternativo» opcional para la medida SWITCH, por favor vote por esa idea aquí.

El segundo problema es que la fila total muestra verdaderamente las facturas totales y no el total de todas las medidas. Esto tiene sentido, decididamente, debido a que la fila del total general no se filtra. Como consecuencia, el MAX de ID es 4 y, por eso, la medida SWITCH devuelve el valor de la medida que se asigna a ID 4 (Facturas totales).

Para arreglar estos 2 problemas, eliminé las facturas totales de mi tabla y reescribí la declaración SWITCH para manejar correctamente la fila del total general.

myMeasure = 
      SUMX(MeasureTable,
              SWITCH([Selected Measure],
              1,[Total Sales],
              2,[Total Cost],
              3,[Total Margin],
              4,[Total Invoices]
              )
      )

Y ahí lo tiene, Medidas en filas en una matriz de Power BI.

imagen

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.