🔢

Funciones de Número (Number.*)

Opera, redondea y transforma valores numéricos con las funciones Number.* de Power Query M.

Principiante Intermedio Avanzado
🔢

Redondeo

Number.Round

Principiante

Sintaxis

Number.Round(number as nullable number, optional digits as nullable number, optional roundingMode as nullable number) as nullable number

¿Qué hace?

Redondea un número al número de decimales especificado. El parámetro roundingMode controla cómo se comporta el redondeo en el caso intermedio (0.5).

Modos de redondeo

  • RoundingMode.AwayFromZero — Redondea alejándose del cero (comportamiento habitual)
  • RoundingMode.ToEven — Redondea al par más cercano (redondeo bancario)
  • RoundingMode.Down — Siempre hacia abajo
  • RoundingMode.Up — Siempre hacia arriba

Ejemplo

Number.Round(3.14159, 2)     // 3.14
Number.Round(2.5)            // 3  (AwayFromZero por defecto)
Number.Round(2.5, 0, RoundingMode.ToEven)   // 2 (redondeo bancario)
Number.Round(2.5, 0, RoundingMode.Down)     // 2
Number.Round(2.5, 0, RoundingMode.Up)       // 3
⚠️ Ojo con esto: El redondeo por defecto en M es AwayFromZero (el "normal"), no el bancario. Si necesitas consistencia con Excel usa RoundingMode.AwayFromZero explícitamente.

Number.RoundDown / Number.RoundUp

Principiante

Sintaxis

Number.RoundDown(number as nullable number, optional digits as nullable number) as nullable number
Number.RoundUp(number as nullable number, optional digits as nullable number) as nullable number

¿Qué hace?

RoundDown trunca siempre hacia abajo (equivalente a REDONDEAR.MENOS). RoundUp redondea siempre hacia arriba independientemente del valor decimal.

Ejemplo

Number.RoundDown(3.99)    // 3
Number.RoundDown(3.14, 1) // 3.1
Number.RoundUp(3.01)      // 4
Number.RoundUp(3.14, 1)   // 3.2

Number.IntegerDivide / Number.Mod

Intermedio

Sintaxis

Number.IntegerDivide(number1 as nullable number, number2 as nullable number, optional precision as nullable type) as nullable number
Number.Mod(number as nullable number, divisor as nullable number, optional precision as nullable type) as nullable number

¿Qué hace?

IntegerDivide realiza la división entera (cociente sin decimales). Number.Mod devuelve el resto de la división.

Ejemplo

Number.IntegerDivide(17, 5)  // 3  (17 ÷ 5 = 3 resto 2)
Number.Mod(17, 5)            // 2

// Detectar números pares
Number.Mod([Cantidad], 2) = 0  // true si es par

// Convertir minutos totales a "X h Y min"
let horas = Number.IntegerDivide([MinutosTotales], 60),
    mins  = Number.Mod([MinutosTotales], 60)
in Text.Format("#{0}h #{1}min", {horas, mins})

Operaciones Matemáticas

Number.Abs

Principiante

Sintaxis

Number.Abs(number as nullable number) as nullable number

¿Qué hace?

Devuelve el valor absoluto de un número (elimina el signo negativo). Útil para calcular variaciones y diferencias.

Ejemplo

Number.Abs(-42)    // 42
Number.Abs(42)     // 42

// Calcular diferencia absoluta entre objetivo y real
Number.Abs([VentasReal] - [VentasObjetivo])

Number.Power / Number.Sqrt

Principiante

Sintaxis

Number.Power(number as nullable number, power as nullable number) as nullable number
Number.Sqrt(number as nullable number) as nullable number

¿Qué hace?

Number.Power eleva un número a una potencia. Number.Sqrt calcula la raíz cuadrada.

Ejemplo

Number.Power(2, 10)   // 1024
Number.Power(4, 0.5)  // 2 (raíz cuadrada via potencia)
Number.Sqrt(144)      // 12

Number.Log / Number.Log10 / Number.Exp

Intermedio

Sintaxis

Number.Log(number as nullable number, optional base as nullable number) as nullable number
Number.Log10(number as nullable number) as nullable number
Number.Exp(number as nullable number) as nullable number

¿Qué hace?

Number.Log calcula el logaritmo (base e por defecto, o la base especificada). Number.Log10 calcula el logaritmo en base 10. Number.Exp calcula e elevado a un número.

Ejemplo

Number.Log(Number.E)     // 1 (logaritmo natural de e)
Number.Log(100, 10)      // 2 (log base 10 de 100)
Number.Log10(1000)       // 3
Number.Exp(1)            // 2.718... (número e)

Funciones trigonométricas

Avanzado

Sintaxis

Number.Sin(number as nullable number) as nullable number
Number.Cos(number as nullable number) as nullable number
Number.Tan(number as nullable number) as nullable number
Number.Asin / Number.Acos / Number.Atan

¿Qué hace?

Las funciones trigonométricas estándar. Los ángulos se expresan en radianes. Usa Number.PI / 180 para convertir grados a radianes.

Ejemplo

// Seno de 90 grados
Number.Sin(Number.PI / 2)   // 1

// Calcular distancia entre dos coordenadas (fórmula Haversine simplificada)
let lat1 = 40.4168, lon1 = -3.7038,  // Madrid
    lat2 = 41.3851, lon2 = 2.1734,   // Barcelona
    R = 6371,
    dLat = (lat2 - lat1) * Number.PI / 180,
    dLon = (lon2 - lon1) * Number.PI / 180,
    a = Number.Power(Number.Sin(dLat/2), 2)
in Number.Round(R * 2 * Number.Asin(Number.Sqrt(a)), 0)
// ≈ 506 km
🔄

Conversión

Number.From

Principiante

Sintaxis

Number.From(value as any, optional culture as nullable text) as nullable number

¿Qué hace?

Convierte cualquier valor compatible a número. Acepta textos, lógicos (true=1, false=0) y fechas (número de serie).

Ejemplo

Number.From("3.14")           // 3.14
Number.From(true)             // 1
Number.From(false)            // 0
Number.From("1.234,56", "es-ES")  // 1234.56

Number.ToText

Intermedio

Sintaxis

Number.ToText(number as nullable number, optional format as nullable text, optional culture as nullable text) as nullable text

¿Qué hace?

Convierte un número a texto con formato personalizado. Los formatos siguen las convenciones .NET: "N2" (2 decimales con separadores), "C" (moneda), "P" (porcentaje), "X" (hexadecimal).

Ejemplo

Number.ToText(1234567.89, "N2", "es-ES")
// "1.234.567,89"

Number.ToText(0.1523, "P1", "es-ES")
// "15,2%"

Number.ToText(255, "X")
// "FF"  (hexadecimal)

Number.ToText(1234.5, "C2", "es-ES")
// "1.234,50 €"
💡 Tip kawaii: Number.ToText con formato "N0" y cultura "es-ES" es perfecto para mostrar números grandes con separadores de miles sin decimales, como totales de ventas.
🎲

Números Aleatorios

Number.Random / Number.RandomBetween

Intermedio

Sintaxis

Number.Random() as number
Number.RandomBetween(bottom as number, top as number) as number

¿Qué hace?

Number.Random genera un número decimal aleatorio entre 0 y 1. Number.RandomBetween genera un número decimal aleatorio entre dos valores.

Ejemplo

Number.Random()               // ej. 0.7342...
Number.RandomBetween(1, 100)  // ej. 67.23...

// Generar ID aleatorio entero entre 1000 y 9999
Number.RoundDown(Number.RandomBetween(1000, 9999))
⚠️ Ojo con esto: Los números aleatorios en Power Query se recalculan en cada actualización del informe. Si necesitas valores estables, genera los datos aleatorios una sola vez y guárdalos.

Constantes Matemáticas

Number.E / Number.PI / Number.Epsilon

Intermedio

Sintaxis

Number.E as number          // ≈ 2.71828...
Number.PI as number         // ≈ 3.14159...
Number.Epsilon as number    // Número positivo más pequeño representable
Number.NaN as number        // Not a Number
Number.PositiveInfinity as number
Number.NegativeInfinity as number

¿Qué hace?

Constantes matemáticas predefinidas en M. Muy útiles para cálculos científicos, trigonométricos y para manejar casos especiales como infinito o NaN.

Ejemplo

// Área de un círculo con radio 5
Number.PI * Number.Power(5, 2)   // 78.5398...

// Comprobar si un valor es NaN (no es número)
Number.IsNaN(0/0)   // true

// Evitar división por cero
if [Denominador] = 0 then null else [Numerador] / [Denominador]
📌 Buena práctica: Usa Number.IsNaN para validar resultados de operaciones matemáticas complejas antes de mostrarlos. Los valores NaN pueden propagarse silenciosamente en cálculos encadenados.
🚀 ¡Números dominados! Ahora explora las Funciones de Fecha y Hora para trabajar con dimensiones temporales.