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.
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




