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
v-juanli-msft
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
Imagen de la tabla final
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
v-juanli-msft
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
Imagen de la tabla final
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