Anónimo
Tengo un problema extraño en el que a veces obtengo ceros finales al cambiar el tipo de datos de número decimal a texto. Esto está sucediendo en Power Query con Power BI Desktop.
Tengo una columna numérica con, por ejemplo, el valor 0,00785 en eso. Luego lo redondeo así:
= Table.TransformColumns(#"Filtered Rows",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}})
Que me atrapa 0,0079 como se esperaba.
Luego cambio el tipo de datos a texto con este código:
= Table.TransformColumnTypes(#"dwh Vervang Null waarden", List.Transform(Table.ColumnNames(#"dwh Vervang Null waarden"), each {_, type text}))
Esperaría que el valor se mantuviera igual, sin embargo, cambia a 0,00790. Este cero final se agrega para varios valores, pero no para todos. ¿Alguna idea sobre cómo abordar este problema?
v-juanli-msft
En respuesta a Anónimo
Hola @Anónimo
Lo siento, no puedo entender por qué causa este problema.
Tal vez mi solución anterior no sea buena, marque esta.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("TczLCcAwDAPQXXIuxrFkJ56lZP81mk8pvUlPoPsuKqqte7lWMniUcR2NllsNqvZp9roV9Giv9iBsa2+RuZUpygQnI2Xu9c9TCaHTzrPNAoeuARQzehnjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Verkoopfactuur_prijs = _t, Verkoopfactuur_inkoopwaarde = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Verkoopfactuur_prijs", type number}, {"Verkoopfactuur_inkoopwaarde", type number}}), #"dwh Vervang Null waarden"= Table.TransformColumns(#"Changed Type",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}}), #"Changed Type1" = Table.TransformColumnTypes(#"dwh Vervang Null waarden",{{"Verkoopfactuur_prijs", type text}}), #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type1", "Verkoopfactuur_prijs", Splitter.SplitTextByDelimiter(".", QuoteStyle.Csv), {"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"}), #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Verkoopfactuur_prijs.1", Int64.Type}, {"Verkoopfactuur_prijs.2", type text}}), #"Extracted First Characters" = Table.TransformColumns(#"Changed Type2", {{"Verkoopfactuur_prijs.2", each Text.Start(_, 4), type text}}), #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Extracted First Characters", {{"Verkoopfactuur_prijs.1", type text}}, "en-US"),{"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"},Combiner.CombineTextByDelimiter(".", QuoteStyle.None),"Verkoopfactuur_prijs") in #"Merged Columns"
Maggie
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.
Aivars
Tengo el mismo problema: 2,2 se convierte en 2,2000000000000002 cuando se convierte a texto en el editor de consultas.
Anónimo
En respuesta a Aivars
Peor aún, si convierte «2.1» en texto, obtiene: 2.0099999999999998, por lo que no puede simplemente recortar caracteres para obtener la respuesta correcta.
Supongo que los números de puntos flotantes bajo el capó se están convirtiendo al formato float64 para obtener este tipo de errores de redondeo (estoy importando desde Excel en este caso).
v-juanli-msft
Hola @Anónimo
Anónimo
En respuesta a v-juanli-msft
Su solución parece funcionar. Todavía me gustaría una solución en lugar de una solución alternativa, pero aceptaré la respuesta por ahora.
v-juanli-msft
En respuesta a Anónimo
Hola @Anónimo
Gracias.
Informaría de este problema a MS. Si se acepta y se solucionará o se le proporcionará alguna solución, se lo diré.
Anónimo
Todavía no he encontrado una solución o solución que funcione. Cualquier ayuda sería apreciada.
v-juanli-msft
En respuesta a Anónimo
Hola @Anónimo
Lo siento, no puedo entender por qué causa este problema.
Tal vez mi solución anterior no sea buena, marque esta.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("TczLCcAwDAPQXXIuxrFkJ56lZP81mk8pvUlPoPsuKqqte7lWMniUcR2NllsNqvZp9roV9Giv9iBsa2+RuZUpygQnI2Xu9c9TCaHTzrPNAoeuARQzehnjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Verkoopfactuur_prijs = _t, Verkoopfactuur_inkoopwaarde = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Verkoopfactuur_prijs", type number}, {"Verkoopfactuur_inkoopwaarde", type number}}), #"dwh Vervang Null waarden"= Table.TransformColumns(#"Changed Type",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}}), #"Changed Type1" = Table.TransformColumnTypes(#"dwh Vervang Null waarden",{{"Verkoopfactuur_prijs", type text}}), #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type1", "Verkoopfactuur_prijs", Splitter.SplitTextByDelimiter(".", QuoteStyle.Csv), {"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"}), #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Verkoopfactuur_prijs.1", Int64.Type}, {"Verkoopfactuur_prijs.2", type text}}), #"Extracted First Characters" = Table.TransformColumns(#"Changed Type2", {{"Verkoopfactuur_prijs.2", each Text.Start(_, 4), type text}}), #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Extracted First Characters", {{"Verkoopfactuur_prijs.1", type text}}, "en-US"),{"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"},Combiner.CombineTextByDelimiter(".", QuoteStyle.None),"Verkoopfactuur_prijs") in #"Merged Columns"
Maggie
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.
v-juanli-msft
Hola @Anónimo
Modifique el código en el editor avanzado como se muestra a continuación
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("PcjRCcAwCAXAXfwOxWp86izB/dcItSF/x61F/DB7GI1Pogaq8S88e0WZ5W7G26vT4GcDU6U3HJlUtQE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Verkoopfactuur_prijs = _t, Verkoopfactuur_inkoopwaarde = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Verkoopfactuur_prijs", type number}, {"Verkoopfactuur_inkoopwaarde", type number}}), #"dwh Vervang Null waarden"= Table.TransformColumns(#"Changed Type",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}}), #"Extracted First Characters" = Table.TransformColumns(#"dwh Vervang Null waarden", {{"Verkoopfactuur_prijs", each Text.Start(Text.From(_, "en-US"), 6), type text},{"Verkoopfactuur_inkoopwaarde", each Text.Start(Text.From(_, "en-US"), 4), type text}}) in #"Extracted First Characters"
Maggie
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.
sds
Anónimo
En respuesta a v-juanli-msft
Hola @ v-juanli-msft,
¡Gracias por tu respuesta! Sin embargo, lamentablemente, su solución no se ajusta al requisito. Los números en mi columna también pueden tener valores de, digamos, 49.0493, no siempre son 6 caracteres.
Estaba pensando que, como solución alternativa, podría verificar en qué posición está el último cero en la cadena y si esa es la misma que la longitud total de la cadena, debe eliminarse. Aunque eso no funciona.
También, por supuesto, preferiría una solución en lugar de una solución alternativa. 🙂
AnkitBI
En respuesta a v-juanli-msft
@ v-juanli-msft – Eso es un WorkAround. Cualquier motivo de este comportamiento. Por qué se agrega un ‘0’ al cambiar de Número a Texto.
@ImkeF @Zubair_Muhammad – Alguna idea
Gracias,
Ankit Jain