Mostrar medidas en filas y valores fijos (TY, LY, Var %) en columnas

Un usuario Pregunto ✅

Laz

Hola a todos,

Lo que estoy tratando de lograr, pensé que sería bastante sencillo, ¡pero parece que no es el caso!

Estoy importando datos a PBI usando algunos MDX contra los servicios de análisis. Estoy devolviendo varias medidas en esta consulta única, así como también algunas columnas descriptivas. A continuación se muestra un ejemplo de algunas de las medidas/columnas que estoy importando a PBI:

Fecha (Atributo descriptivo)

Región (Atributo descriptivo)

TY YTD Ventas (Atributo Numérico)

TY Ventas de DPT (Numérico Atributo)

TY Ventas del DMT (Numérico Atributo)

TY Ventas diarias (Numérico Atributo)

Ventas LY YTD (Numérico Atributo)

Ventas LY PTD (Numérico Atributo)

LY Ventas del DMT (Numérico Atributo)

Ventas diarias LY (Numérico Atributo)

– …

Ventas YTD en línea vs Valor LY £ (Atributo Numérico)

Ventas YTD en línea vs % de valor LY (Atributo Numérico)

Lo que busco lograr es:

1. Para mostrar las Medidas en las Filas de la Matriz.

2. Para mostrar este año (TY), el año pasado (LY) y el % de variación en las columnas

Entonces, la pantalla que estoy tratando de lograr es la siguiente:

TY LY Var %
Ventas diarias # # (TY-LY)/LY
Ventas del DMT # # (TY-LY)/LY
Ventas de DPT # # (TY-LY)/LY
Ventas hasta la fecha # # (TY-LY)/LY

Nota: sé que Power BI ofrece la opción «Mostrar en filas» para habilitarse, ¡lo cual es excelente!

Sin embargo, el problema consiste en mostrar los valores fijos de todas las medidas en las columnas.

Se me ocurrió una solución que funciona parcialmente, el problema es con el% de varianza, por lo que agradecería cualquier sugerencia sobre cómo resolver el problema y, lo que es más importante, ¡encontrar una mejor manera de lograrlo!

1. En Power Query, en mi conjunto de datos creé una ‘columna personalizada’ llamada ‘% de variación’:

([Sales Online] - [LY Sales Online]) / [LY Sales Online]

2. Columnas sin pivotar (todas las medidas), que crearon una columna que enumera todas las medidas:

De esto:

Fecha Nombre de la región Ventas hasta la fecha Ventas de DPT Ventas de DMT en línea Ventas en línea
09/09/2018 En línea # # # #

A esto:

Fecha Nombre de la región Medidas Valor
09/09/2018 En línea Ventas hasta la fecha #
09/09/2018 En línea Ventas de DPT #
09/09/2018 En línea Ventas de DMT en línea #
09/09/2018 En línea Ventas en línea #

3. Luego agregué una columna condicional llamada «Categoría» para identificar cada atributo de medida como: TY, LY, Var £ o Var %. Como muestra la siguiente tabla:

Fecha Nombre de la región Medidas Valor Categoría
09/09/2018 En línea TY YTD Ventas # TY
09/09/2018 En línea TY PTD ​​Ventas # TY
09/09/2018 En línea Ventas TY WTD # TY
09/09/2018 En línea Ventas diarias TY # LY
09/09/2018 En línea Ventas LY YTD # LY
09/09/2018 En línea Ventas LY PTD # LY
09/09/2018 En línea Ventas LY WTD # LY
09/09/2018 En línea Ventas diarias LY # LY
09/09/2018 En línea Ventas en línea vs Valor LY £ # Var £
09/09/2018 En línea Ventas WTD en línea vs Valor LY £ # Var £
09/09/2018 En línea Ventas PTD en línea vs Valor LY £ # Var £
09/09/2018 En línea Ventas YTD en línea vs Valor LY £ # Var £
09/09/2018 En línea Ventas en línea vs % de valor LY # Var %
09/09/2018 En línea Ventas WTD en línea vs % de valor LY # Var %
09/09/2018 En línea Ventas PTD en línea vs % de valor LY # Var %
09/09/2018 En línea Ventas YTD en línea vs % de valor LY # Var %

IMPORTANTE:

– El primer problema con lo anterior es que la Columna «Valor» debe ser de Tipo Número Decimal (TY, LY, Var £) y de Tipo Porcentaje (Var %). Esto no se puede hacer con una medida calculada en DAX.

4. Una vez que cargo los datos anteriores, hago clic con el botón derecho en «Medidas» –> Nuevos grupos:

Creó los Grupos:

Grupo 1 = ‘TY Ventas Diarias’, ‘LY Ventas diarias‘, ‘Ventas en línea frente a valor LY%’

Grupo 2 = ‘Ventas de TY WTD’, ‘Ventas de LY WTD’, ‘Ventas de LY WTD en línea vs % de valor de LY’

….

5. Luego arrastro y suelto Matrix Visual:

– Filas = Grupos de medida

Columnas = Categoría

Valores = Valor

El resultado que obtengo es el siguiente:

TY LY Var %
Grupo 1 Correcto Correcto Incorrecto
Grupo 2 Correcto Correcto

Incorrecto

El valor ‘TY’ y ‘LY’ se muestra como se esperaba, sin embargo, ¡el % de variación no lo es!

Cualquier ayuda en esto sería muy apreciada.

Laz

Hola @Laz

Según mi conocimiento, no es posible que una columna o medida contenga dos tipos de tipos de datos.

Cuando agrega la columna o medida [Value] al campo Valor de la matriz visual, incluso se muestra en diferentes columnas visualmente, pero de hecho [Value] sólo puede existir en una columna o una medida.

Aquí hay una solución en la que enumero columnas o medidas en la tabla visual, finalmente la tabla visual es como a continuación.

tabla originales

1.png

Imagen de la tabla final

2.png

Código en el editor avanzado

let
    Source = Excel.Workbook(File.Contents("C:UsersmaggielDesktopcase99.139.13.xlsx"), null, true),
    Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Date", type date}, {"Region Name", type text}, {"TY YTD Sales", Int64.Type}, {"TY PTD Sales", Int64.Type}, {"TY WTD Sales Online", Int64.Type}, {"TY Daily Sales", Int64.Type}, {"LY YTD Sales", Int64.Type}, {"LY PTD Sales", Int64.Type}, {"LY WTD Sales Online", Int64.Type}, {"LY Daily Sales", Int64.Type}}),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Date", "Region Name"}, "Attribute", "Value"),
    #"Duplicated Column" = Table.DuplicateColumn(#"Unpivoted Columns", "Attribute", "Attribute - Copy"),
    #"Split Column by Position" = Table.SplitColumn(#"Duplicated Column", "Attribute - Copy", Splitter.SplitTextByPositions({0, 3}, false), {"Attribute - Copy.1", "Attribute - Copy.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Position",{{"Attribute - Copy.1", type text}, {"Attribute - Copy.2", type text}}),
    #"Pivoted Column" = Table.Pivot(#"Changed Type1", List.Distinct(#"Changed Type1"[#"Attribute - Copy.1"]), "Attribute - Copy.1", "Value"),
    #"Sorted Rows" = Table.Sort(#"Pivoted Column",{{"Date", Order.Ascending}, {"Attribute - Copy.2", Order.Ascending}, {"Attribute", Order.Ascending}}),
    #"Filled Up" = Table.FillUp(#"Sorted Rows",{"TY "}),
    #"Filled Down" = Table.FillDown(#"Filled Up",{"LY "}),
    #"Removed Duplicates" = Table.Distinct(#"Filled Down", {"TY ", "Date"})
in
    #"Removed Duplicates"

Atentamente

Maggie

Hola @Laz

Según mi conocimiento, no es posible que una columna o medida contenga dos tipos de tipos de datos.

Cuando agrega la columna o medida [Value] al campo Valor de la matriz visual, incluso se muestra en diferentes columnas visualmente, pero de hecho [Value] sólo puede existir en una columna o una medida.

Aquí hay una solución en la que enumero columnas o medidas en la tabla visual, finalmente la tabla visual es como a continuación.

tabla originales

1.png

Imagen de la tabla final

2.png

Código en el editor avanzado

let
    Source = Excel.Workbook(File.Contents("C:UsersmaggielDesktopcase99.139.13.xlsx"), null, true),
    Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Date", type date}, {"Region Name", type text}, {"TY YTD Sales", Int64.Type}, {"TY PTD Sales", Int64.Type}, {"TY WTD Sales Online", Int64.Type}, {"TY Daily Sales", Int64.Type}, {"LY YTD Sales", Int64.Type}, {"LY PTD Sales", Int64.Type}, {"LY WTD Sales Online", Int64.Type}, {"LY Daily Sales", Int64.Type}}),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Date", "Region Name"}, "Attribute", "Value"),
    #"Duplicated Column" = Table.DuplicateColumn(#"Unpivoted Columns", "Attribute", "Attribute - Copy"),
    #"Split Column by Position" = Table.SplitColumn(#"Duplicated Column", "Attribute - Copy", Splitter.SplitTextByPositions({0, 3}, false), {"Attribute - Copy.1", "Attribute - Copy.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Position",{{"Attribute - Copy.1", type text}, {"Attribute - Copy.2", type text}}),
    #"Pivoted Column" = Table.Pivot(#"Changed Type1", List.Distinct(#"Changed Type1"[#"Attribute - Copy.1"]), "Attribute - Copy.1", "Value"),
    #"Sorted Rows" = Table.Sort(#"Pivoted Column",{{"Date", Order.Ascending}, {"Attribute - Copy.2", Order.Ascending}, {"Attribute", Order.Ascending}}),
    #"Filled Up" = Table.FillUp(#"Sorted Rows",{"TY "}),
    #"Filled Down" = Table.FillDown(#"Filled Up",{"LY "}),
    #"Removed Duplicates" = Table.Distinct(#"Filled Down", {"TY ", "Date"})
in
    #"Removed Duplicates"

Atentamente

Maggie

Laz

En respuesta a v-juanli-msft

Hola @v-juanli-msft,

¡Muchas gracias!

¡Revisé el Código M que compartió y lo apliqué a mi solución y funciona muy bien!

Una La pregunta que tengo es, en mi solución tengo múltiples medidas como:

– Ventas (Número decimal)

– Margen del producto (Número decimal)

– Nr de Transacciones (Número Entero)

– Producto Margen % (Porcentaje)

Cuando uso esta solución para medidas con tipos de datos de: número decimal o número entero, todo funciona muy bien.

Sin embargo, cuando trato de incluir ‘Porcentaje de margen del producto’ es cuando se complica.

Cuando agrego ‘Porcentaje de margen del producto’ a un elemento visual como Matrix, y voy a un nivel de detalle más alto, como puede imaginar, el valor porcentual se está sumando, lo que muestra valores incorrectos, sin embargo, cuando profundizo hasta el más bajo nivel, obtengo el resultado esperado.

Si tiene algún consejo sobre cómo abordaría esto, se lo agradecería mucho.

Gracias,

Laz

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *