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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Redondear al valor más cercano de una lista

¡Buenos días!

Estoy tratando de crear una función que tome un número y redondee ir al número más cercano en una lista dada de números en power query.

Esto es lo que tengo hasta ahora:

RoundToNearest = (entrada como número) =>
dejar
numberList = {1, 3, 4, 10},
más cercano = List.Min(List.Transform(numberList, each [Value = _, Distance = Number.Abs(_ - input)]))[Value]
en
Más cercano

Sin embargo, esto me está dando errores.

¿Alguna idea?

¡Gracias!

1 ACCEPTED SOLUTION

¡Gracias por su ayuda! Esa función no me estaba dando los valores correctos, pero la usé como base para llegar a lo siguiente:

RoundToNearest = (entrada como número) =>
dejar
numberList = {10, 2, 3, 4, 5},
diferencia = List.Min(List.Transform(numberList, each Number.Abs(_ - input))),
más cercano = si List.Contains(numberList, entrada + diferencia) entonces entrada + diferencia else entrada - diferencia
en
Más cercano

Esencialmente, primero obtengo la diferencia entre la entrada y la coincidencia más cercana en la lista. Similar a antes pero solo la diferencia (sin el registro que incluía valor).

Luego, debido a que usé el valor absoluto, ejecuto la instrucción if para verificar si necesito sumar o restar la diferencia de la entrada, en función de cuál de los dos me daría un valor en numberList

¡Gracias por tu ayuda!

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Le sugiero que use 'List.Transform' para devolver una lista de valores en lugar de registros. Aquí hay una versión revisada de la función:

RoundToNearest = (entrada como número) =>
dejar
numberList = {1, 3, 4, 10},
más cercano = List.Min(List.Transform(numberList, each Number.Abs(_ - input)) + {Number.Abs(numberList{0} - input)}) + input
en
Más cercano

Aquí, estamos tomando el valor absoluto de la diferencia entre la entrada y cada número en la lista, y agregando la entrada al valor más cercano después de obtener el valor mínimo de la lista transformada. También agregamos el valor absoluto de la diferencia entre el primer número de la lista y la entrada a la lista transformada para garantizar que la entrada se redondee a uno de los valores de la lista.

¡Espero que esto ayude!

Saludos

Isaac Chavarría

Si este post Ayuda, entonces por favor considere Aceptarlo como la solución y dar Kudos para ayudar a los otros miembros a encontrarlo más rápidamente.

¡Gracias por su ayuda! Esa función no me estaba dando los valores correctos, pero la usé como base para llegar a lo siguiente:

RoundToNearest = (entrada como número) =>
dejar
numberList = {10, 2, 3, 4, 5},
diferencia = List.Min(List.Transform(numberList, each Number.Abs(_ - input))),
más cercano = si List.Contains(numberList, entrada + diferencia) entonces entrada + diferencia else entrada - diferencia
en
Más cercano

Esencialmente, primero obtengo la diferencia entre la entrada y la coincidencia más cercana en la lista. Similar a antes pero solo la diferencia (sin el registro que incluía valor).

Luego, debido a que usé el valor absoluto, ejecuto la instrucción if para verificar si necesito sumar o restar la diferencia de la entrada, en función de cuál de los dos me daría un valor en numberList

¡Gracias por tu ayuda!

Syndicate_Admin
Administrator
Administrator

¿Cuál es el error que está recibiendo? ¿Podría compartir el texto?

Annotation 2023-03-14 110006.jpg

Syndicate_Admin
Administrator
Administrator

@IgnacioValli,

Parece que el error se debe a que está utilizando el marcador de posición '_' dentro de la función List.Transform, pero no lo ha definido como un registro con un campo 'Valor'.

Esta es una versión revisada de su código que debería funcionar:

RoundToNearest = (entrada como número) =>
dejar
numberList = {1, 3, 4, 10},
más cercano = List.Min(List.Transform(numberList, each [Value = _, Distance = Number.Abs(_ - input)]))[Value]
en
Más cercano

Agregué el 'Valor =' y 'Distancia =' al registro que se está creando dentro de la función List.Transform. De esta manera, el marcador de posición '_' se interpretará como un registro con estos dos campos.

Con esta modificación, su función debería funcionar como se espera.

Saludos

Isaac Chavarría

Si este post Ayuda, entonces por favor considere Aceptarlo como la solución y dar Kudos para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola Isaac, gracias por tu ayuda.

Creo que ya había incluido el 'Valor =' y 'Distancia =' en mi función original. En realidad, creo que ambas versiones son idénticas a menos que me falte algo. ¿Tienes alguna otra idea?

Saludos

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.