Quizá nunca te hayas percatado de este aspecto, pero las consecuencias son MUY importantes.
Cuando operamos sobre varias columnas en Power Query empleando List.Product y entre los elementos nos encontramos con un valor null, PQ trata ese null como 1 :OOO ¿cómo!!?
Observa el caso:
Notemos como el uso de la función List.Product en el ejemplo, da tratamiento de 1 al valor null:
Matemáticamente es una locura...
Una posible solución sería reemplazar los valores 'null' por cero, lo que debe solucionar el caso:
Pero, sin duda, la solución más óptima pasa por Agregar una columna personalizada donde agreguemos el producto de las columnas necesarias:
Con esta opción no es necesario forzar reemplazamiento alguno, y el resultado del producto es el esperado... o al menos lo más cercano a la realidad.
No está claro el porqué de este comportamiento, o por que no existe opción alguna en la configuración de la función que resuelva esta situación...
Cuando operamos sobre varias columnas en Power Query empleando List.Product y entre los elementos nos encontramos con un valor null, PQ trata ese null como 1 :OOO ¿cómo!!?
Observa el caso:
Notemos como el uso de la función List.Product en el ejemplo, da tratamiento de 1 al valor null:
let
Origen = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
TipoCambiado = Table.TransformColumnTypes(Origen,{{"Producto", type text}, {"Unidades", Int64.Type}, {"Precio", type number}, {"Factor", type number}}),
MultiplicaciónInsertada = Table.AddColumn(TipoCambiado, "Multiplicación", each List.Product({[Unidades], [Precio], [Factor]}, Precision.Double), type number)
in
MultiplicaciónInsertada
Matemáticamente es una locura...
Una posible solución sería reemplazar los valores 'null' por cero, lo que debe solucionar el caso:
let
Origen = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
TipoCambiado = Table.TransformColumnTypes(Origen,{{"Producto", type text}, {"Unidades", Int64.Type}, {"Precio", type number}, {"Factor", type number}}),
ValorReemplazado = Table.ReplaceValue(TipoCambiado,null,0,Replacer.ReplaceValue,{"Unidades", "Precio", "Factor"}),
MultiplicaciónInsertada = Table.AddColumn(ValorReemplazado, "Multiplicación", each List.Product({[Unidades], [Precio], [Factor]}, Precision.Double), type number)
in
MultiplicaciónInsertada
Pero, sin duda, la solución más óptima pasa por Agregar una columna personalizada donde agreguemos el producto de las columnas necesarias:
let
Origen = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
TipoCambiado = Table.TransformColumnTypes(Origen,{{"Producto", type text}, {"Unidades", Int64.Type}, {"Precio", type number}, {"Factor", type number}}),
//Opción 1 - List.Product
MultiplicaciónInsertada = Table.AddColumn(TipoCambiado, "Multiplicación", each List.Product({[Unidades], [Precio], [Factor]}, Precision.Double), type number),
//Opción 2 - Agregar Columna Personalizada
AddCol_Multiplicacion = Table.AddColumn(MultiplicaciónInsertada, "Personalizado", each [Unidades]*[Precio]*[Factor])
in
AddCol_Multiplicacion
Con esta opción no es necesario forzar reemplazamiento alguno, y el resultado del producto es el esperado... o al menos lo más cercano a la realidad.
No está claro el porqué de este comportamiento, o por que no existe opción alguna en la configuración de la función que resuelva esta situación...
This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here