En la
nota anterior vimos un ejemplo de como ampliar las posibilidades de
Agrupar por editando el código en el
Editor Avanzado.
Al final del post señalé que el ejemplo tenía una debilidad notoria: la falta de dinamismo. La cantidad de productos a mostrar es una constante, de manera que si queremos mostrar una cantidad distinta de productos tendremos que editar el código y cambiar manualmente los valores donde sea necesario. Al hacerlo también nos exponemos a la posibilidad de introducir errores en el código.
En este post voy a mostrar como convertir el modelo de la
nota anterior en un
modelo dinámico y también como hacer cambios en el código generado automáticamente para evitar fallas o errores en la actualización de datos.
Abrimos la ventana del
Editor Avanzado para ver el código de la consulta
1: let
2: Origen = Excel.CurrentWorkbook(){[Name="Invoices"]}[Content],
3: #"Filas ordenadas" = Table.Sort(Origen,
4: {{"País", Order.Ascending},
5: {"Ventas", Order.Descending}}
6: ),
7: #"Filas agrupadas" = Table.Group(#"Filas ordenadas", {"País"}, {
8: {"Total Ventas", each List.Sum([Ventas]), type number},
9: {"Producto mas vendido", each List.FirstN([Producto],2)},
10: {"Total Producto", each List.MaxN([Ventas],2)}
11: }),
12: #"Valores extraídos" = Table.TransformColumns(#"Filas agrupadas",
13: {"Producto mas vendido",
14: each Text.Combine(List.Transform(_, Text.From), ";"),
15: type text}),
16: #"Valores extraídos1" = Table.TransformColumns(#"Valores extraídos",
17: {"Total Producto", each Text.Combine(List.Transform(_, Text.From), ";"),
18: type text}),
19: #"Dividir columna por delimitador" = Table.SplitColumn(#"Valores extraídos1",
20: "Producto mas vendido", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv),
21: {"Producto mas vendido.1", "Producto mas vendido.2"}),
22: #"Dividir columna por delimitador1" = Table.SplitColumn(#"Dividir columna por delimitador",
23: "Total Producto", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv),
24: {"Total Producto.1", "Total Producto.2"}),
25: #"Columnas quitadas" = Table.RemoveColumns(#"Dividir columna por delimitador1",{"Total Ventas"}),
26: #"Tipo cambiado" = Table.TransformColumnTypes(#"Columnas quitadas",{{"Total Producto.2", type number}})
27: in
28: #"Tipo cambiado"
Para que el código sea más legible he dividido los distintos pasos aplicados en varias líneas. Para hacerlo ubicamos el marcador en la posición requerida y apretamos Enter; usando la tecla Tab podemos separar la línea del margen.
Veamos ahora cómo convertir la consulta de la nota anterior en un modelo dinámico