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.
¡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!
Solved! Go to 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!
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!
¿Cuál es el error que está recibiendo? ¿Podría compartir el texto?
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
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |