Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
Syndicate_Admin
Administrator
Administrator

Crear un gráfico de barras apiladas con datos de varias columnas Y una columna con varios valores

Hola a todos

Usuario extenso de Excel (sin VBA) pero relativamente nuevo en PowerBI aquí.

Estoy tratando de transformar algunos informes de resumen de tablas antiguas en paneles en vivo en PowerBI, por lo tanto, en un dilema en la traducción de trucos de Excel en el resumen de datos extrañamente estructurados al modo de PowerBI de lectura de datos.

Aquí está la Q:

Estoy tratando de crear un gráfico de barras apiladas que hace referencia a varias columnas Y estos datos deben ser referenciados con categorías contra esa fila, pero esta celda con dichas categorías tiene varios valores.

Estructura de tabla de ejemplo a continuación:

filaEmpresa 1Empresa 2Empresa 3categoríapuntuación
Tema 1 Gato A, Gato B10
Tema 2 Gato A20
Tema 3 Gato C30
Tema 4 Gato A, Gato C50
Tema 5 Gato A, Gato C10
Tema 6 Gato A, Gato C20

Por lo tanto, el gráfico apilado debe sumar la 'Puntuación' contra una determinada empresa Y categorizarla contra cada una de las categorías mencionadas en la columna 'Categoría'. El pilar Gráfico apilado es por la Categoría.

Los datos reales tienen alrededor de 8 empresas y 5 categorías

Resultado previsto:

the_kent_0-1625763889168.png

Cualquier ayuda en esto sería genial.

Si hay una mejor manera de incluso organizar los datos base para ayudar con esto de manera más intuitiva, definitivamente tengo la oportunidad de transformar los datos de lo "viejo" a lo "nuevo".

Más información sobre los datos - ~ 700-1000 líneas al mes * 12

Mi pensamiento actual es crear una tabla secundaria que use Excel como SumIFs para hacer una matriz de los datos, y luego crear un gráfico apilado en ella.

Pero si tuviera que hacer esto, ¿el filtrado / segmentaciones en los datos base también funcionaría en esta nueva tabla (es decir, estarían vinculados)? (y por lo tanto la salida del gráfico)

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

que alguien me ayude a crear un gráfico de barras apiladas

SanjayJohn_0-1739878903114.png

Basado en los siguientes datos

SanjayJohn_1-1739878928555.png

¡Muchas gracias por su ayuda anticipada

Syndicate_Admin
Administrator
Administrator

Eres una estrella para tomar tiempo de tu día para una respuesta detallada, ¡muchas gracias!

1) Sí, descubré la cosa de duplicación inmediatamente después de publicar aquí, que funcionó según sea necesario! Y simplemente volvió a hacer los informes.

2) Lo tengo, y lo veo en mis datos también

Si bien me tomaré el tiempo para digerir el código, solo quiero ejecutarlo rápidamente a través de mi lógica de Unpivot si tiene tiempo (de lo contrario, no se preocupe, haré un poco de ensayo y error)

Un problema que enfrenté fue que las sumas de puntuación contra las categorías posteriores a Unpviot en comparación con los datos originales no coincidía. Supongo que esto se debe a que no incluí la 'puntuación' como parte de ambas fases de unpivoting.

Mi comprensión de Unpivot era que las columnas no seleccionadas simplemente se replicarían en las columnas que no se dinamizan, pero veo en el código que también forma parte de la no dinamización.

Esto es lo que hice

  1. Unpivoted las empresas (sin seleccionar la puntuación) -
  2. Texto usado para columnas con un delimitador para separar las categorías
  3. Deseserzado de las categorías (sin seleccionar la puntuación)

Habiendo hecho esto, obtuve los informes que quería de una manera mucho mejor (incluso otros informes donde previamente para resumir las puntuaciones sabias de la compañía había puesto una medida rápida en la puntuación con filtro en la columna de la empresa = Sí)

PERO los totales de puntuación fueron para un toss

Una vez más , en este desajuste, ejecutaré un poco de ensayo y error pronto en mi propio tiempo, pero si tiene tiempo, ayude a refinar mi comprensión de la lógica de unpivot 🙂

Muchas gracias!

@the_kent ,

No te preocupes. Supongo que sus valores de puntuación se dispararon cuando intentó sumarlos, ya que no ha vuelto a agregar los datos en conjuntos de filas únicos.

Es por eso que en mis pasos tuve el Grupo Por paso al final. Esto vuelve a agregar sobre una base media (¡no suma!) las filas duplicadas creadas por los pasos de anulación de dinamización. El promedio funciona aquí, ya que sabemos que solo estamos agrupando filas duplicadas, por lo que el promedio de ellas solo será el valor original que se duplicó.

Anular la dinamización una vez no es un problema, ya que los datos se recategorizan correctamente en una estructura normalizada. Es cuando despivot dos veces (debido a que dos lotes de dimensiones diferentes necesitan ser normalizados) que luego obtenemos duplicaciones erróneas. Básicamente, estamos creando una interconexa en el segundo unpivot contra cada uno de los valores previamente normalizados del primer unpivot.

TL;DR - Tienes que hacer el Grupo Por paso para reagregar tus puntuaciones correctamente.

*EDIT* I ws un poco confuso leyendo donde dices que había incluido [score] en mis columnas unpivot así que lo revisé y aparece de esta manera porque Power Query realmente ha hecho un cambio de código. Usé la función Unpivot de la GUI que se esperaría que generara la función Table.UnpivotColumns(theColumnsYouHadSelected). Sin embargo, en realidad lo ha convertido en su cabeza y ha creado el código M como Table.UnpivotOtherColumns(theColumnsYouDidn'tHaveSelected). Un poco confuso, sin duda, pero correcto en términos de salida.

Pete

Gotcha! ¡Lo probaremos!

Syndicate_Admin
Administrator
Administrator

No @the_kent ,

En primer lugar, debe normalizar la estructura de datos en Power Query.

Anulación de la dinamización de las tres columnas de la compañía para que termine con una columna de la compañía que indica para qué compañía es la fila de datos.

A continuación, divida la columna de categoría por delimitador ',' para dividir todas las categorías enumeradas en sus propias columnas.

A continuación, anulación de la dinamización de las columnas de categoría para tener una sola columna de categoría que denote la categoría de cada fila de datos.

A continuación, agrupe la tabla en Empresa y Categoría y agregue un campo agregado de Promedio de puntuación. Ahora debería tener una tabla en la que pueda usar el nuevo campo de categoría como eje, el nuevo campo de empresa como detalle y una medida SUM(table[Value]) como valores en un gráfico 100% apilado o similar.

Pete

Hola, gracias por responder!

Una vez más, siendo un novato en esto, apreciar la paciencia en las siguientes consultas.

Explorado Unpivot en PowerBI a través de datos de transformación.

1. ¿Hay alguna manera de generar los datos transformados en una tabla separada? Es decir, ¿la transformación de datos en Unpivot también reescribirá los datos base?

2. ¿Cualquier transformación que haga (es decir, delimitar, obtener todos los datos en columnas con valores individuales y, a continuación, desesorización) se repetirá automáticamente a medida que se introduzcan nuevos datos en el formato original?

Gracias de nuevo por su ayuda!

@the_kent ,

1) Depende de lo que quieras decir con "reescribir los datos base". No cambiará nada en el origen de datos (archivo de Excel, Base de datos SQL, etc.), pero cambiará la tabla original tal como estaba cuando se cargó en Power Query. Para evitar esto, puede seleccionar la tabla original a la izquierda de Power Query y copiar y pegar, o hacer clic con el botón secundario y seleccionar Duplicar o Referencia y, a continuación, realizar las transformaciones en esta nueva tabla.

2) Sí. cada paso que realice en Power Query se aplica entre los datos originales que se importan desde el origen y la consulta resultante que se pasa al modelo de datos. Los pasos que le he dado son todos genéricos y no hacen referencia a valores de datos específicos que puedan cambiar, por lo que no hay problema allí. Lo único que lo romperá es si realiza cambios en cualquiera de las columnas que se utilizan en las transformaciones en origen, por ejemplo, cambiar el nombre de la columna en origen o eliminar la columna en origen.

Ahora estoy de vuelta en mi escritorio, he realizado los pasos que les di antes y los he refinado un poco.

Este es el código M que puede usar para ver los pasos correctos a seguir.

En Power Query, vaya a Nuevo origen> Consulta en blanco y, a continuación, en Editor avanzado, pegue mi código sobre el código predeterminado. A continuación, puede seguir los pasos que tomé para completar esto.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8ixJzVUwVNJRikwtBpIKUOycWKLgqKMAopyAXEMDpVgdqGIjuGKEFrByIG2EpM4YyTiISpAqZyBtjKTKBEUFmtUgxaZIik1RFCIMRVKO7FIzfN5yhjo3FgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Row = _t, #"Company 1" = _t, #"Company 2" = _t, #"Company 3" = _t, Category = _t, Score = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Row", type text}, {"Company 1", type text}, {"Company 2", type text}, {"Company 3", type text}, {"Category", type text}, {"Score", Int64.Type}}),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Row", "Category", "Score"}, "Attribute", "Value"),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Unpivoted Columns", "Category", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), {"Category.1", "Category.2"}),
    #"Unpivoted Columns1" = Table.UnpivotOtherColumns(#"Split Column by Delimiter", {"Row", "Score", "Attribute", "Value"}, "Attribute.1", "Value.1"),
    #"Filtered Rows" = Table.SelectRows(#"Unpivoted Columns1", each ([Value] = "Yes")),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Attribute", "Value.1", "Row"}, {{"score", each List.Average([Score]), type nullable number}}),
    #"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Attribute", Order.Ascending}, {"Value.1", Order.Ascending}})
in
    #"Sorted Rows"

He dejado todos los nombres de columnas predeterminados para que se vea exactamente igual cuando realice los pasos, pero es bastante fácil cambiar los nombres de columna a valores más intuitivos más adelante directamente en el código.

Esto me da la siguiente salida basada en los datos de ejemplo:

BA_Pete_0-1625820977611.png

Pete

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

November Power BI Update Carousel

Power BI Monthly Update - November 2025

Check out the November 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.

Top Kudoed Authors