Dividir la fila en diferentes categorías desde el nombre de la columna

Un usuario Pregunto ✅

Anónimo

Tengo una tabla que contiene varias columnas y su nombre tiene el sufijo `_EXPECTED` o` _ACTUAL`. Por ejemplo, estoy viendo mis artículos vendidos de mi tabla `SoldItems` y tengo las siguientes columnas:` APPLES_EXPECTED`, `BANANAS_EXPECTED`,` KIWIS_EXPECTED`, `APPLES_ACTUAL`,` BANANAS_ACTUAL`, `KIWIS_ACTUAL` (El identificador de la tabla es la fecha, por lo que tenemos resultados por fecha). Quiero mostrar esos datos en forma de tabla, algo como esto (por ejemplo, si la fecha seleccionada es ‘2019-12-23’):

Artículos vendidos Esperado Real
Manzanas 10 15
Kiwis 2 1
Plátanos 8 5

Así es como se ve la tabla de origen de datos:

Fecha APPLES_EXPECTED KIWIS_EXPECTED BANANAS_EXPECTED APPLES_ACTUAL KIWIS_ACTUAL BANANAS_ACTUAL
2019-12-23 10 2 8 15 1 5
2019-12-22 5 14 5 4 8 2

¿Cómo puedo administrar algo como esto en Power BI Desktop? Intenté jugar con la visualización de matriz / tabla, sin embargo, no puedo encontrar una manera de fusionar todas las columnas esperadas y reales.

parry2k

@Anónimo puede usar el siguiente script para transformar los datos, ir al editor de consultas, agregar una consulta en blanco y pegar el siguiente código

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwtNQ1NNI1MlbSUTI0ABJGQGwB4piCCCA2VYrVQVJoBBYCSplAGSZQDUZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Date = _t, APPLES_EXPECTED = _t, KIWIS_EXPECTED = _t, BANANAS_EXPECTED = _t, APPLES_ACTUAL = _t, KIWIS_ACTUAL = _t, BANANAS_ACTUAL = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"APPLES_EXPECTED", Int64.Type}, {"KIWIS_EXPECTED", Int64.Type}, {"BANANAS_EXPECTED", Int64.Type}, {"APPLES_ACTUAL", Int64.Type}, {"KIWIS_ACTUAL", Int64.Type}, {"BANANAS_ACTUAL", Int64.Type}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Date"}, "Attribute", "Value"),
    #"Inserted Text Before Delimiter" = Table.AddColumn(#"Unpivoted Other Columns", "Fruit", each Text.BeforeDelimiter([Attribute], "_"), type text),
    #"Inserted Text After Delimiter" = Table.AddColumn(#"Inserted Text Before Delimiter", "Type", each Text.AfterDelimiter([Attribute], "_"), type text),
    #"Removed Columns" = Table.RemoveColumns(#"Inserted Text After Delimiter",{"Attribute"})
in
    #"Removed Columns"

mwegener

Hola @Anónimo,

utilizar Power Query.

1. Quitar pivote de columnas

2. Dividir columna por delimitador

3. Columnas dinámicas

Puede descargar mi archivo PBIX desde aquí.
Espero que esto ayude.

Si respondí a su pregunta, marque mi publicación como solución, esto también ayudará a otros.

Por favor, felicite por su apoyo.

Anónimo

En respuesta a mwegener

¿Funcionará esto si tengo más columnas además de las mencionadas anteriormente?

parry2k

@Anónimo puede usar el siguiente script para transformar los datos, ir al editor de consultas, agregar una consulta en blanco y pegar el siguiente código

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwtNQ1NNI1MlbSUTI0ABJGQGwB4piCCCA2VYrVQVJoBBYCSplAGSZQDUZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Date = _t, APPLES_EXPECTED = _t, KIWIS_EXPECTED = _t, BANANAS_EXPECTED = _t, APPLES_ACTUAL = _t, KIWIS_ACTUAL = _t, BANANAS_ACTUAL = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"APPLES_EXPECTED", Int64.Type}, {"KIWIS_EXPECTED", Int64.Type}, {"BANANAS_EXPECTED", Int64.Type}, {"APPLES_ACTUAL", Int64.Type}, {"KIWIS_ACTUAL", Int64.Type}, {"BANANAS_ACTUAL", Int64.Type}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Date"}, "Attribute", "Value"),
    #"Inserted Text Before Delimiter" = Table.AddColumn(#"Unpivoted Other Columns", "Fruit", each Text.BeforeDelimiter([Attribute], "_"), type text),
    #"Inserted Text After Delimiter" = Table.AddColumn(#"Inserted Text Before Delimiter", "Type", each Text.AfterDelimiter([Attribute], "_"), type text),
    #"Removed Columns" = Table.RemoveColumns(#"Inserted Text After Delimiter",{"Attribute"})
in
    #"Removed Columns"

Anónimo

En respuesta a parry2k

Sin embargo, no quiero agregar una nueva tabla, quiero mantenerla en mi propia tabla para mantener los filtros establecidos por el resto de las imágenes

parry2k

En respuesta a Anónimo

@Anónimo no está agregando una nueva tabla, pero está transformando su tabla existente para un mejor diseño y obtener lo que está buscando. Se trata de las mejores prácticas, no se deje atrapar simplemente por hacer el trabajo, sino piense en cómo escalará.

parry2k

En respuesta a parry2k

La solución @Anonymous yes funcionará con nuevos productos, en la medida en que el formato de sus datos se mantenga igual, no importa si hay nuevos productos, más filas, etc.

parry2k

En respuesta a parry2k

@Anónimo obtendrá la siguiente salida

image.png

Deja un comentario

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