Referencia de Funciones de Campos Calculados

Este documento proporciona una referencia completa de todas las funciones disponibles en la función de campos calculados de PyQueryHub. El motor de fórmulas es compatible con la sintaxis de Mode Analytics y admite más de 70 funciones en múltiples categorías.

Tabla de Contenidos

  1. Resumen de Sintaxis
  2. Funciones Numéricas
  3. Funciones de Cadena
  4. Funciones de Fecha
  5. Funciones de Conversión
  6. Funciones Lógicas
  7. Funciones de Agregación
  8. Funciones Analíticas
  9. Ejemplos y Casos de Uso
  10. Mejores Prácticas
  11. Solución de Problemas

Resumen de Sintaxis

Reglas Básicas de Sintaxis

  • Referencias de Campo: Usa corchetes [nombre_campo]
  • Literales de Cadena: Usa comillas simples o dobles 'texto' o "texto"
  • Números: Usa decimales directamente 123 o 45.67
  • Operadores: Operadores matemáticos y de comparación estándar +, -, *, /, ==, !=, >, <, >=, <=
  • Funciones: Nombre de la función seguido de paréntesis SUM([campo])
  • Agrupación: Usa paréntesis para controlar el orden de las operaciones ([a] + [b]) * [c]

Ejemplos de Fórmulas

-- Cálculo simple
[ingresos] - [costo]

-- Lógica condicional
CASE [estado] WHEN 'activo' THEN 1 ELSE 0 END

-- Agregación con condición
SUM(CASE [region] WHEN 'Norte' THEN [ventas] ELSE 0 END)

-- Manipulación de cadenas
UPPER(LEFT([nombre_cliente], 5))

-- Cálculo de fechas
DATEDIFF('day', [fecha_pedido], TODAY())

Funciones Numéricas

ABS(numero)

Devuelve el valor absoluto de un número.

Sintaxis: ABS(expresion)

Ejemplos:

ABS(-25)           -- Devuelve: 25
ABS([ganancia])      -- Devuelve el valor absoluto del campo de ganancia
ABS([ventas] - [objetivo])  -- Devuelve la diferencia absoluta

Casos de Uso:

  • Calcular diferencias absolutas
  • Eliminar signos negativos de los valores
  • Cálculos de distancia

CEILING(numero)

Redondea un número hacia arriba al entero más cercano.

Sintaxis: CEILING(expresion)

Ejemplos:

CEILING(3.2)       -- Devuelve: 4
CEILING(-2.8)      -- Devuelve: -2
CEILING([precio] / 10)  -- Redondea hacia arriba el precio dividido por 10

Casos de Uso:

  • Calcular unidades mínimas requeridas
  • Redondear hacia arriba los niveles de precios
  • Planificación de capacidad

EXP(numero)

Devuelve e (número de Euler) elevado a la potencia del número especificado.

Sintaxis: EXP(expresion)

Ejemplos:

EXP(1)             -- Devuelve: 2.718281828...
EXP(2)             -- Devuelve: 7.389...
EXP([tasa_crecimiento]) -- Cálculo de crecimiento exponencial

Casos de Uso:

  • Modelado de crecimiento exponencial
  • Cálculos estadísticos
  • Cálculos de interés compuesto

FLOOR(numero)

Redondea un número hacia abajo al entero más cercano.

Sintaxis: FLOOR(expresion)

Ejemplos:

FLOOR(3.8)         -- Devuelve: 3
FLOOR(-2.2)        -- Devuelve: -3
FLOOR([ingresos] / 1000)  -- Redondea hacia abajo a miles

Casos de Uso:

  • Calcular unidades completadas
  • Precios basados en niveles
  • Cálculo de edad en años

LOG10(numero)

Devuelve el logaritmo en base 10 de un número.

Sintaxis: LOG10(expresion)

Ejemplos:

LOG10(100)         -- Devuelve: 2
LOG10(1000)        -- Devuelve: 3
LOG10([poblacion])  -- Escala logarítmica para números grandes

Casos de Uso:

  • Normalización de datos
  • Cálculos científicos
  • Escalas logarítmicas

LN(numero)

Devuelve el logaritmo natural (base e) de un número.

Sintaxis: LN(expresion)

Ejemplos:

LN(2.718281828)    -- Devuelve: 1 (aproximadamente)
LN([valor])        -- Logaritmo natural del valor

Casos de Uso:

  • Análisis estadístico
  • Cálculos de tasa de crecimiento
  • Modelado matemático

MOD(numero, divisor)

Devuelve el resto después de la división.

Sintaxis: MOD(dividendo, divisor)

Ejemplos:

MOD(10, 3)         -- Devuelve: 1
MOD([id_pedido], 2) -- Devuelve 0 para IDs pares, 1 para impares
MOD([numero_dia], 7)  -- Día de la semana (0-6)

Casos de Uso:

  • Determinar números pares/impares
  • Cálculos de ciclo
  • Lógica de paginación

POWER(base, exponente)

Devuelve un número elevado a una potencia especificada.

Sintaxis: POWER(base, exponente)

Ejemplos:

POWER(2, 3)        -- Devuelve: 8
POWER([base], [exp])  -- Base elevada a la potencia exp
POWER([ventas], 2)  -- Cuadrado de los valores de ventas

Casos de Uso:

  • Cálculos de área y volumen
  • Escalamiento exponencial
  • Fórmulas matemáticas

ROUND(numero, precision)

Redondea un número a un número especificado de decimales.

Sintaxis: ROUND(expresion, lugares_decimales)

Ejemplos:

ROUND(3.14159, 2)  -- Devuelve: 3.14
ROUND([precio], 0)  -- Redondea al número entero más cercano
ROUND([porcentaje] * 100, 1)  -- Redondea el porcentaje a 1 decimal

Casos de Uso:

  • Cálculos financieros
  • Formato de visualización
  • Control de precisión

SQRT(numero)

Devuelve la raíz cuadrada de un número.

Sintaxis: SQRT(expresion)

Ejemplos:

SQRT(9)            -- Devuelve: 3
SQRT(25)           -- Devuelve: 5
SQRT([area])       -- Calcula la longitud del lado a partir del área

Casos de Uso:

  • Cálculos geométricos
  • Fórmulas de desviación estándar
  • Cálculos de distancia

TRUNC(numero, precision)

Trunca un número a un número especificado de decimales.

Sintaxis: TRUNC(expresion, lugares_decimales)

Ejemplos:

TRUNC(3.14159, 2)  -- Devuelve: 3.14
TRUNC([valor], 0)  -- Elimina la porción decimal
TRUNC([precio] * 1.1, 2)  -- Trunca el precio calculado

Casos de Uso:

  • Eliminar precisión decimal
  • Limpieza de datos
  • Cálculos de punto fijo

ZN(expresion)

Devuelve la expresión si no es nula, de lo contrario devuelve 0.

Sintaxis: ZN(expresion)

Ejemplos:

ZN([comision])   -- Devuelve 0 si la comisión es nula
ZN([bono]) + [salario]  -- Suma el bono o 0 al salario

Casos de Uso:

  • Manejar valores nulos en los cálculos
  • Por defecto a cero para datos faltantes
  • Prevenir la propagación de nulos

Funciones de Cadena

CONTAINS(cadena, subcadena)

Prueba si una cadena contiene una subcadena especificada.

Sintaxis: CONTAINS(cadena, subcadena)

Ejemplos:

CONTAINS([nombre_producto], 'Pro')  -- Devuelve verdadero si el nombre contiene 'Pro'
CONTAINS([email], '@gmail.com')  -- Comprueba si hay direcciones de Gmail

Casos de Uso:

  • Filtrado y categorización de texto
  • Análisis de dominios de correo electrónico
  • Categorización de productos

FIND(cadena, subcadena)

Devuelve la posición de una subcadena dentro de una cadena (indexación basada en 1).

Sintaxis: FIND(cadena, subcadena)

Ejemplos:

FIND([email], '@')     -- Posición del símbolo @
FIND([descripcion], 'error')  -- Encuentra menciones de error

Casos de Uso:

  • Analizar texto estructurado
  • Extraer dominios de correo electrónico
  • Encontrar patrones específicos

LEFT(cadena, longitud)

Devuelve los caracteres más a la izquierda de una cadena.

Sintaxis: LEFT(cadena, numero_de_caracteres)

Ejemplos:

LEFT([id_cliente], 3)    -- Primeros 3 caracteres
LEFT([codigo_producto], 2)   -- Prefijo de categoría de producto
LEFT([telefono], 3)          -- Código de área

Casos de Uso:

  • Extraer prefijos y códigos
  • Categorización por prefijo
  • Análisis de datos

LOWER(cadena)

Convierte una cadena a minúsculas.

Sintaxis: LOWER(cadena)

Ejemplos:

LOWER([nombre_cliente])    -- Convierte el nombre a minúsculas
LOWER([email])            -- Normaliza las direcciones de correo electrónico

Casos de Uso:

  • Normalización de datos
  • Comparaciones insensibles a mayúsculas y minúsculas
  • Estandarización de correos electrónicos

LTRIM(cadena)

Elimina los espacios en blanco del lado izquierdo de una cadena.

Sintaxis: LTRIM(cadena)

Ejemplos:

LTRIM([descripcion])      -- Elimina espacios iniciales
LTRIM([entrada_usuario])       -- Limpia la entrada del usuario

Casos de Uso:

  • Limpieza de datos
  • Sanitización de entradas
  • Estandarización de formatos

PLUCK(cadena, delimitador, posicion)

Divide una cadena por un delimitador y devuelve el token en la posición especificada.

Sintaxis: PLUCK(cadena, delimitador, posicion)

Ejemplos:

PLUCK([nombre_completo], ' ', 1)     -- Primer nombre
PLUCK([nombre_completo], ' ', 2)     -- Apellido
PLUCK([ruta_archivo], '/', 3)     -- Tercer segmento de la ruta
PLUCK([datos_csv], ',', 2)      -- Segunda columna CSV

Casos de Uso:

  • Analizar datos delimitados
  • Extraer componentes de nombres
  • Análisis de rutas de archivos
  • Extracción de datos CSV

REPLACE(cadena, texto_antiguo, texto_nuevo)

Reemplaza todas las ocurrencias de una subcadena por otra subcadena.

Sintaxis: REPLACE(cadena, subcadena_antigua, subcadena_nueva)

Ejemplos:

REPLACE([telefono], '-', '')         -- Elimina guiones del teléfono
REPLACE([descripcion], 'antiguo', 'nuevo')  -- Reemplaza texto
REPLACE([nombre_producto], '&', 'y')   -- Reemplaza el ampersand

Casos de Uso:

  • Limpieza y estandarización de datos
  • Normalización de texto
  • Conversión de formato

RIGHT(cadena, longitud)

Devuelve los caracteres más a la derecha de una cadena.

Sintaxis: RIGHT(cadena, numero_de_caracteres)

Ejemplos:

RIGHT([id_pedido], 4)      -- Últimos 4 caracteres
RIGHT([nombre_archivo], 3)     -- Extensión del archivo
RIGHT([cuenta], 2)       -- Sufijo de la cuenta

Casos de Uso:

  • Extraer sufijos y extensiones
  • Análisis de números de cuenta
  • Identificación de tipos de archivo

RTRIM(cadena)

Elimina los espacios en blanco del lado derecho de una cadena.

Sintaxis: RTRIM(cadena)

Ejemplos:

RTRIM([descripcion])      -- Elimina espacios finales
RTRIM([comentario_usuario])     -- Limpia la entrada del usuario

Casos de Uso:

  • Limpieza de datos
  • Sanitización de entradas
  • Estandarización de formatos

SUBSTR(cadena, inicio, longitud)

Extrae una subcadena de una cadena comenzando en una posición especificada.

Sintaxis: SUBSTR(cadena, posicion_inicio, longitud)

Ejemplos:

SUBSTR([codigo_producto], 2, 3)  -- Caracteres 2-4
SUBSTR([descripcion], 1, 50)  -- Primeros 50 caracteres
SUBSTR([cadena_fecha], 1, 4)   -- Extrae el año

Casos de Uso:

  • Extraer porciones específicas de texto
  • Analizar datos estructurados
  • Truncar descripciones largas

TRIM(cadena)

Elimina los espacios en blanco de ambos lados de una cadena.

Sintaxis: TRIM(cadena)

Ejemplos:

TRIM([entrada_cliente])    -- Elimina espacios iniciales/finales
TRIM([descripcion])       -- Limpia el campo de descripción

Casos de Uso:

  • Limpieza de datos
  • Sanitización de entradas
  • Formato consistente

UPPER(cadena)

Convierte una cadena a mayúsculas.

Sintaxis: UPPER(cadena)

Ejemplos:

UPPER([codigo_producto])     -- Estandariza los códigos de producto
UPPER([estado])            -- Estandariza las abreviaturas de estado

Casos de Uso:

  • Estandarización de datos
  • Normalización de códigos
  • Visualización consistente

Funciones de Fecha

DATEADD(parte_fecha, numero, fecha)

Agrega un intervalo de tiempo especificado a una fecha.

Sintaxis: DATEADD(parte_fecha, numero, fecha)

Partes de Fecha: 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second'

Ejemplos:

DATEADD('day', 30, [fecha_pedido])      -- 30 días después del pedido
DATEADD('month', -1, TODAY())         -- Hace un mes
DATEADD('year', 1, [fecha_inicio])      -- Un año después

Casos de Uso:

  • Calcular fechas futuras/pasadas
  • Fechas de vencimiento de suscripciones
  • Análisis de antigüedad
  • Pronósticos

DATEDIFF(parte_fecha, fecha_inicio, fecha_fin)

Calcula la diferencia entre dos fechas.

Sintaxis: DATEDIFF(parte_fecha, fecha_inicio, fecha_fin)

Ejemplos:

DATEDIFF('day', [fecha_pedido], [fecha_envio])    -- Días para enviar
DATEDIFF('month', [fecha_contratacion], TODAY())       -- Meses empleado
DATEDIFF('year', [fecha_nacimiento], TODAY())       -- Edad en años

Casos de Uso:

  • Calcular edad y antigüedad
  • Métricas de rendimiento (tiempo de envío, resolución, etc.)
  • Análisis de duración

DATEPART(parte_fecha, fecha)

Extrae una parte específica de una fecha.

Sintaxis: DATEPART(parte_fecha, fecha)

Ejemplos:

DATEPART('year', [fecha_pedido])        -- Extrae el año
DATEPART('month', [fecha_transaccion]) -- Extrae el mes (1-12)
DATEPART('dow', [fecha])               -- Día de la semana (1-7)
DATEPART('quarter', [fecha_ventas])     -- Trimestre (1-4)

Casos de Uso:

  • Agrupar datos por períodos de tiempo
  • Análisis estacional
  • Informes basados en tiempo

DATETRUNC(parte_fecha, fecha)

Trunca una fecha a la precisión especificada.

Sintaxis: DATETRUNC(parte_fecha, fecha)

Ejemplos:

DATETRUNC('month', [fecha_pedido])      -- Primer día del mes
DATETRUNC('year', [fecha_transaccion]) -- Primer día del año
DATETRUNC('week', [fecha_evento])       -- Primer día de la semana

Casos de Uso:

  • Agrupar transacciones por período
  • Crear cubos de tiempo
  • Análisis período sobre período

NOW()

Devuelve la fecha y hora actuales.

Sintaxis: NOW()

Ejemplos:

NOW()                                 -- Marca de tiempo actual
DATEDIFF('hour', [creado_en], NOW()) -- Horas desde la creación

Casos de Uso:

  • Calcular edad o duración actual
  • Cálculos en tiempo real
  • Operaciones con marcas de tiempo

TODAY()

Devuelve la fecha actual (sin hora).

Sintaxis: TODAY()

Ejemplos:

TODAY()                               -- Fecha actual
DATEDIFF('day', [fecha_vencimiento], TODAY())  -- Días vencidos

Casos de Uso:

  • Calcular días hasta/desde eventos
  • Comparaciones de fecha actual
  • Informes de antigüedad

Funciones de Conversión

DATE(expresion)

Convierte una expresión a formato de fecha.

Sintaxis: DATE(expresion)

Ejemplos:

DATE([campo_timestamp])              -- Extrae la fecha de un timestamp
DATE('2023-12-25')                   -- Convierte una cadena a fecha

Casos de Uso:

  • Extraer fecha de datetime
  • Convertir fechas de cadena
  • Normalización de fechas

DATETIME(expresion)

Convierte una expresión a formato de fecha y hora.

Sintaxis: DATETIME(expresion)

Ejemplos:

DATETIME([cadena_fecha])              -- Convierte una cadena a fecha y hora
DATETIME([timestamp_unix])           -- Convierte un timestamp

Casos de Uso:

  • Analizar cadenas de fecha
  • Convertir timestamps
  • Estandarización de fecha y hora

INT(expresion)

Convierte una expresión a un entero.

Sintaxis: INT(expresion)

Ejemplos:

INT([campo_decimal])                 -- Convierte a entero
INT([cadena_numero])                 -- Analiza una cadena numérica
INT([precio] / 100)                   -- Convierte centavos a dólares

Casos de Uso:

  • Eliminar decimales
  • Analizar cadenas numéricas
  • Cálculos con enteros

FLOAT(expresion)

Convierte una expresión a un número de punto flotante.

Sintaxis: FLOAT(expresion)

Ejemplos:

FLOAT([campo_entero])               -- Convierte a decimal
FLOAT([cadena_porcentaje])           -- Analiza un porcentaje

Casos de Uso:

  • Asegurar precisión decimal
  • Analizar cadenas numéricas
  • Cálculos matemáticos

Funciones Lógicas

AND

Operación lógica AND - devuelve verdadero si ambas condiciones son verdaderas.

Sintaxis: condicion1 AND condicion2

Ejemplos:

[edad] >= 18 AND [estado] == 'activo'          -- Adulto y activo
[ingresos] > 1000 AND [region] == 'Norte'      -- Altos ingresos en el Norte
[fecha] >= '2023-01-01' AND [fecha] <= '2023-12-31'  -- Rango de fechas

Casos de Uso:

  • Filtrado de múltiples condiciones
  • Reglas de negocio complejas
  • Validación de datos

OR

Operación lógica OR - devuelve verdadero si alguna de las condiciones es verdadera.

Sintaxis: condicion1 OR condicion2

Ejemplos:

[estado] == 'pendiente' OR [estado] == 'revision'     -- Cualquiera de los dos estados
[prioridad] == 'alta' OR [valor] > 10000           -- Alta prioridad o valor
[region] == 'Norte' OR [region] == 'Sur'        -- Múltiples regiones

Casos de Uso:

  • Condiciones alternativas
  • Agrupación de categorías
  • Filtrado flexible

IF...THEN...ELSE...END

Lógica condicional con operadores de comparación.

Sintaxis: IF condicion THEN valor1 ELSE valor2 END

Ejemplos:

IF [ganancia] > 0 THEN 'Rentable' ELSE 'Pérdida' END
IF [edad] >= 65 THEN 'Senior' ELSE 'Regular' END
IF [puntuacion] >= 90 THEN 'A' ELSE IF [puntuacion] >= 80 THEN 'B' ELSE 'C' END

Casos de Uso:

  • Categorización condicional
  • Implementación de reglas de negocio
  • Transformación de datos

CASE...WHEN...THEN...ELSE...END

Lógica condicional para comparaciones de igualdad.

Sintaxis: CASE campo WHEN valor THEN resultado ELSE alternativa END

Ejemplos:

CASE [estado] WHEN 'activo' THEN 1 ELSE 0 END
CASE [calificacion] WHEN 'A' THEN 4 WHEN 'B' THEN 3 WHEN 'C' THEN 2 ELSE 1 END
CASE [region] WHEN 'Norte' THEN 'N' WHEN 'Sur' THEN 'S' ELSE 'Otro' END

Casos de Uso:

  • Mapeo y traducción de valores
  • Puntuación de categorías
  • Indicadores de estado

ISNULL(expresion)

Prueba si una expresión es nula.

Sintaxis: ISNULL(expresion)

Ejemplos:

ISNULL([campo_opcional])             -- Comprueba si el campo es nulo
SUM(CASE WHEN ISNULL([valor]) THEN 0 ELSE 1 END)  -- Cuenta valores no nulos

Casos de Uso:

  • Comprobaciones de calidad de datos
  • Manejo de valores nulos
  • Cálculos condicionales

IFNULL(expresion, alternativa)

Devuelve la expresión si no es nula, de lo contrario devuelve la alternativa.

Sintaxis: IFNULL(expresion, valor_alternativo)

Ejemplos:

IFNULL([comision], 0)              -- Usa 0 si la comisión es nula
IFNULL([apodo], [nombre_completo])      -- Usa el apodo o el nombre completo
IFNULL([descuento], 0.0)              -- Descuento por defecto a 0

Casos de Uso:

  • Proporcionar valores por defecto
  • Manejar datos faltantes
  • Asegurar que los cálculos funcionen con nulos

Funciones de Agregación

AVG(expresion)

Calcula el promedio de todos los valores.

Sintaxis: AVG(campo_o_expresion)

Ejemplos:

AVG([ventas])                         -- Promedio de ventas
AVG([precio] * [cantidad])            -- Valor promedio del pedido
AVG(CASE [region] WHEN 'Norte' THEN [ventas] ELSE NULL END)  -- Promedio regional

Casos de Uso:

  • Benchmarking de rendimiento
  • Análisis de tendencia central
  • Cálculos de KPI

COUNT(expresion)

Cuenta valores no nulos.

Sintaxis: COUNT(campo_o_expresion)

Ejemplos:

COUNT([id_pedido])                    -- Conteo de pedidos
COUNT(CASE [estado] WHEN 'completo' THEN 1 ELSE NULL END)  -- Pedidos completados
COUNT(1)                             -- Cuenta todas las filas

Casos de Uso:

  • Conteo de registros
  • Tasas de finalización
  • Análisis de disponibilidad de datos

COUNTD(expresion)

Cuenta valores distintos (únicos).

Sintaxis: COUNTD(campo_o_expresion)

Ejemplos:

COUNTD([id_cliente])                -- Clientes únicos
COUNTD([categoria_producto])           -- Número de categorías
COUNTD([region])                     -- Número de regiones

Casos de Uso:

  • Conteo de entidades únicas
  • Análisis de diversidad
  • Medición de cardinalidad

MAX(expresion)

Devuelve el valor máximo.

Sintaxis: MAX(campo_o_expresion)

Ejemplos:

MAX([fecha_pedido])                    -- Pedido más reciente
MAX([precio])                         -- Precio más alto
MAX([puntuacion])                         -- Mejor puntuación

Casos de Uso:

  • Encontrar valores pico
  • Fechas más recientes
  • Máximos de rendimiento

MEDIAN(expresion)

Devuelve el valor mediano (central).

Sintaxis: MEDIAN(campo_o_expresion)

Ejemplos:

MEDIAN([salario])                     -- Salario medio
MEDIAN([tiempo_respuesta])              -- Tiempo de respuesta típico
MEDIAN([edad])                        -- Edad mediana

Casos de Uso:

  • Tendencia central robusta
  • Promedios resistentes a valores atípicos
  • Análisis de valor típico

MIN(expresion)

Devuelve el valor mínimo.

Sintaxis: MIN(campo_o_expresion)

Ejemplos:

MIN([fecha_pedido])                    -- Pedido más antiguo
MIN([precio])                         -- Precio más bajo
MIN([tiempo_respuesta])                 -- Respuesta más rápida

Casos de Uso:

  • Encontrar valores mínimos
  • Fechas más antiguas
  • Mínimos de rendimiento

MODE(expresion)

Devuelve el valor que ocurre con más frecuencia.

Sintaxis: MODE(campo_o_expresion)

Ejemplos:

MODE([categoria_producto])             -- Categoría más común
MODE([segmento_cliente])             -- Segmento más frecuente
MODE([dia_de_semana])                  -- Día más común

Casos de Uso:

  • Artículos más populares
  • Patrones de comportamiento típicos
  • Análisis de frecuencia

PERCENTILE_N(expresion)

Devuelve el N-ésimo percentil de los valores.

Funciones Disponibles: PERCENTILE_1, PERCENTILE_5, PERCENTILE_25, PERCENTILE_75, PERCENTILE_95, PERCENTILE_99

Ejemplos:

PERCENTILE_25([ingresos])              -- Percentil 25 (Q1)
PERCENTILE_75([ingresos])              -- Percentil 75 (Q3)
PERCENTILE_95([tiempo_respuesta])       -- Percentil 95
PERCENTILE_99([valor_transaccion])   -- Percentil 99

Casos de Uso:

  • Análisis de cuartiles
  • SLAs de rendimiento
  • Identificación de valores atípicos
  • Análisis de distribución

STDEV(expresion)

Calcula la desviación estándar de la muestra.

Sintaxis: STDEV(campo_o_expresion)

Ejemplos:

STDEV([ventas])                       -- Variabilidad de las ventas
STDEV([tiempo_respuesta])               -- Consistencia del tiempo de respuesta
STDEV([puntuaciones])                      -- Distribución de puntuaciones

Casos de Uso:

  • Medir la variabilidad
  • Control de calidad
  • Evaluación de riesgos

STDEVP(expresion)

Calcula la desviación estándar de la población.

Sintaxis: STDEVP(campo_o_expresion)

Ejemplos:

STDEVP([puntuaciones_examen])                -- Desviación estándar de la población
STDEVP([mediciones])               -- Variabilidad de la población completa

Casos de Uso:

  • Análisis de población completa
  • Métricas de calidad
  • Análisis estadístico

SUM(expresion)

Calcula la suma de todos los valores.

Sintaxis: SUM(campo_o_expresion)

Ejemplos:

SUM([ventas])                         -- Ventas totales
SUM([cantidad] * [precio])            -- Ingresos totales
SUM(CASE [estado] WHEN 'completo' THEN 1 ELSE 0 END)  -- Cuenta completados

Casos de Uso:

  • Cálculos totales
  • Suma de ingresos
  • Conteo condicional

VAR(expresion)

Calcula la varianza de la muestra.

Sintaxis: VAR(campo_o_expresion)

Ejemplos:

VAR([devoluciones])                       -- Variabilidad de las devoluciones
VAR([rendimiento])                   -- Varianza del rendimiento

Casos de Uso:

  • Medir la dispersión
  • Análisis de riesgos
  • Métricas de consistencia

VARP(expresion)

Calcula la varianza de la población.

Sintaxis: VARP(campo_o_expresion)

Ejemplos:

VARP([datos_poblacion])              -- Varianza de la población
VARP([conjunto_datos_completo])             -- Varianza del conjunto de datos completo

Casos de Uso:

  • Análisis de población completa
  • Cálculos estadísticos
  • Medición de calidad

Funciones Analíticas

FIRST()

Devuelve el número de filas desde la fila actual hasta la primera fila de la partición.

Sintaxis: FIRST()

Ejemplos:

FIRST()                              -- Distancia a la primera fila
[ventas] - LOOKUP([ventas], FIRST())   -- Diferencia con el primer valor

Casos de Uso:

  • Posicionamiento relativo
  • Comparación con la línea de base
  • Análisis de secuencias

INDEX()

Devuelve el índice (posición) de la fila actual.

Sintaxis: INDEX()

Ejemplos:

INDEX()                              -- Número de fila (basado en 1)
INDEX() / COUNT([id])                -- Posición relativa como porcentaje

Casos de Uso:

  • Numeración de filas
  • Cálculos basados en posición
  • Análisis de clasificación

LAST()

Devuelve el número de filas desde la fila actual hasta la última fila de la partición.

Sintaxis: LAST()

Ejemplos:

LAST()                               -- Distancia a la última fila
[ventas] - LOOKUP([ventas], LAST())    -- Diferencia con el último valor

Casos de Uso:

  • Comparaciones de fin de período
  • Posicionamiento relativo
  • Análisis de secuencias

LOOKUP(expresion, offset)

Devuelve el valor de una expresión en un desplazamiento de fila especificado.

Sintaxis: LOOKUP(expresion, offset)

Ejemplos:

LOOKUP([ventas], -1)                  -- Ventas de la fila anterior
LOOKUP([precio], 1)                   -- Precio de la fila siguiente
LOOKUP([valor], 0)                   -- Valor de la fila actual
[ventas] - LOOKUP([ventas], -1)        -- Cambio desde el período anterior

Casos de Uso:

  • Comparaciones período sobre período
  • Análisis de series temporales
  • Cálculos de tendencias

NTILE(expresion, tiles)

Distribuye las filas en un número especificado de grupos (tiles).

Sintaxis: NTILE(expresion, numero_de_tiles)

Ejemplos:

NTILE([ventas], 4)                    -- Cuartiles (1-4)
NTILE([rendimiento], 10)             -- Deciles (1-10)
NTILE([puntuacion], 5)                    -- Quintiles (1-5)

Casos de Uso:

  • Niveles de rendimiento
  • Segmentación de clientes
  • Cubos de percentiles

RANK(expresion)

Devuelve el rango de cada fila con huecos para valores empatados.

Sintaxis: RANK(expresion)

Ejemplos:

RANK([ventas])                        -- Clasificación de ventas con huecos
RANK([puntuacion])                        -- Clasificación de puntuaciones
21 - RANK([puntuacion])                   -- Clasificación inversa

Casos de Uso:

  • Clasificación de rendimiento
  • Tablas de clasificación
  • Análisis competitivo

RANK_DENSE(expresion)

Devuelve el rango de cada fila sin huecos para valores empatados.

Sintaxis: RANK_DENSE(expresion)

Ejemplos:

RANK_DENSE([ingresos])                -- Clasificación densa de ingresos
RANK_DENSE([rendimiento])            -- Clasificación de rendimiento sin huecos

Casos de Uso:

  • Clasificación continua
  • Niveles de rendimiento
  • Asignaciones de calificaciones

RUNNING_AVG(expresion)

Calcula un promedio móvil desde la primera fila hasta la fila actual.

Sintaxis: RUNNING_AVG(expresion)

Ejemplos:

RUNNING_AVG([ventas_diarias])           -- Promedio acumulado de ventas
RUNNING_AVG([tiempo_respuesta])         -- Promedio móvil del tiempo de respuesta

Casos de Uso:

  • Seguimiento de rendimiento acumulado
  • Suavizado de tendencias
  • Promedios progresivos

RUNNING_COUNT(expresion)

Calcula un conteo móvil desde la primera fila hasta la fila actual.

Sintaxis: RUNNING_COUNT(expresion)

Ejemplos:

RUNNING_COUNT([id_pedido])            -- Conteo acumulado de pedidos
RUNNING_COUNT([cliente])            -- Conteo móvil de clientes

Casos de Uso:

  • Contadores acumulativos
  • Seguimiento del progreso
  • Numeración secuencial

RUNNING_SUM(expresion)

Calcula una suma móvil desde la primera fila hasta la fila actual.

Sintaxis: RUNNING_SUM(expresion)

Ejemplos:

RUNNING_SUM([ingresos_diarios])         -- Ingresos acumulados
RUNNING_SUM([unidades_vendidas])            -- Total de unidades móviles
RUNNING_SUM([costos])                 -- Costos acumulados

Casos de Uso:

  • Totales acumulados
  • Cálculos de año a la fecha
  • Suma progresiva

TOTAL(expresion)

Calcula el total para toda la partición.

Sintaxis: TOTAL(expresion)

Ejemplos:

[ventas] / TOTAL([ventas])             -- Porcentaje del total
TOTAL([ingresos])                     -- Ingresos totales de la partición

Casos de Uso:

  • Cálculos de porcentaje
  • Análisis de proporciones
  • Comparaciones totales

WINDOW_AVG(expresion, inicio, fin)

Calcula un promedio sobre una ventana móvil de filas.

Sintaxis: WINDOW_AVG(expresion, offset_inicio, offset_fin)

Ejemplos:

WINDOW_AVG([ventas], -2, 2)           -- Promedio móvil de 5 días
WINDOW_AVG([precio], -6, 0)           -- Promedio móvil de 7 períodos
WINDOW_AVG([rendimiento], -1, 1)     -- Promedio centrado de 3 períodos

Casos de Uso:

  • Promedios móviles
  • Suavizado de tendencias
  • Ajustes estacionales

WINDOW_COUNT(expresion, inicio, fin)

Cuenta valores sobre una ventana móvil de filas.

Sintaxis: WINDOW_COUNT(expresion, offset_inicio, offset_fin)

Ejemplos:

WINDOW_COUNT([pedidos], -6, 0)        -- Pedidos en los últimos 7 períodos
WINDOW_COUNT([eventos], -1, 1)        -- Eventos en una ventana de 3 períodos

Casos de Uso:

  • Conteos móviles
  • Ventanas de actividad
  • Frecuencia de eventos

WINDOW_SUM(expresion, inicio, fin)

Calcula una suma sobre una ventana móvil de filas.

Sintaxis: WINDOW_SUM(expresion, offset_inicio, offset_fin)

Ejemplos:

WINDOW_SUM([ventas], -6, 0)           -- Suma móvil de 7 días
WINDOW_SUM([ingresos], -3, 3)         -- Suma centrada de 7 períodos
WINDOW_SUM([cantidad], -11, 0)       -- Total móvil de 12 meses

Casos de Uso:

  • Totales móviles
  • Sumas móviles
  • Análisis de tendencias

Ejemplos y Casos de Uso

Métricas de Negocio

Segmentación de Clientes

-- Cálculo de la puntuación RFM
CASE 
  WHEN [dias_recencia] <= 30 AND [frecuencia] >= 5 AND [monetario] >= 1000 THEN 'Campeones'
  WHEN [dias_recencia] <= 60 AND [frecuencia] >= 3 AND [monetario] >= 500 THEN 'Leales'
  WHEN [dias_recencia] <= 90 AND [frecuencia] >= 2 THEN 'Potenciales'
  ELSE 'En Riesgo'
END

Análisis de Margen de Beneficio

-- Calcular el porcentaje de margen de beneficio
ROUND(([ingresos] - [costo]) / [ingresos] * 100, 2)

-- Categorizar los niveles de beneficio
CASE 
  WHEN ([ingresos] - [costo]) / [ingresos] > 0.30 THEN 'Margen Alto'
  WHEN ([ingresos] - [costo]) / [ingresos] > 0.15 THEN 'Margen Medio'
  WHEN ([ingresos] - [costo]) / [ingresos] > 0 THEN 'Margen Bajo'
  ELSE 'Pérdida'
END

Rendimiento de Ventas

-- Tasa de crecimiento de las ventas
([ventas_actuales] - [ventas_anteriores]) / [ventas_anteriores] * 100

-- Alcance de la cuota
[ventas_reales] / [cuota] * 100

-- Rango de ventas dentro del equipo
RANK([ventas_totales])

Análisis Basado en el Tiempo

Cálculos de Edad

-- Edad del cliente
DATEDIFF('year', [fecha_nacimiento], TODAY())

-- Antigüedad de la cuenta en meses
DATEDIFF('month', [cuenta_creada], TODAY())

-- Días desde la última compra
DATEDIFF('day', [fecha_ultima_compra], TODAY())

Análisis Estacional

-- Trimestre del año
DATEPART('quarter', [fecha_transaccion])

-- Nombre del mes
CASE DATEPART('month', [fecha])
  WHEN 1 THEN 'Enero'
  WHEN 2 THEN 'Febrero'
  WHEN 3 THEN 'Marzo'
  -- ... continuar para todos los meses
  ELSE 'Desconocido'
END

-- ¿Es fin de semana?
CASE DATEPART('dow', [fecha])
  WHEN 1 THEN 'Fin de semana'  -- Domingo
  WHEN 7 THEN 'Fin de semana'  -- Sábado
  ELSE 'Día de semana'
END

Calidad y Limpieza de Datos

Validación de Correo Electrónico

-- Comprobación de formato de correo electrónico válido
CASE 
  WHEN CONTAINS([email], '@') AND CONTAINS([email], '.') THEN 'Válido'
  ELSE 'Inválido'
END

-- Extraer dominio
RIGHT([email], LEN([email]) - FIND([email], '@'))

Limpieza de Texto

-- Limpiar números de teléfono
REPLACE(REPLACE(REPLACE([telefono], '(', ''), ')', ''), '-', '')

-- Estandarizar nombres
TRIM(UPPER([apellido])) + ', ' + TRIM([primer_nombre])

-- Extraer iniciales
LEFT([primer_nombre], 1) + LEFT([apellido], 1)

Cálculos Avanzados

Análisis Estadístico

-- Cálculo de la puntuación Z
([valor] - AVG([valor])) / STDEV([valor])

-- Coeficiente de variación
STDEV([ventas]) / AVG([ventas]) * 100

-- Rango percentil
RANK([puntuacion]) / COUNT([puntuacion]) * 100

Cálculos Financieros

-- Retorno de la inversión
([valor_final] - [valor_inicial]) / [valor_inicial] * 100

-- Tasa de crecimiento anual compuesta
POWER([valor_final] / [valor_inicial], 1.0 / [años]) - 1

-- Valor presente
[valor_futuro] / POWER(1 + [tasa_interes], [periodos])

Agregaciones Condicionales

Conteos Complejos

-- Conteo de clientes de alto valor
SUM(CASE WHEN [compras_totales] > 10000 THEN 1 ELSE 0 END)

-- Porcentaje de pedidos completados
SUM(CASE [estado] WHEN 'completado' THEN 1 ELSE 0 END) / COUNT([id_pedido]) * 100

-- Edad promedio de los clientes activos
AVG(CASE [estado] WHEN 'activo' THEN [edad] ELSE NULL END)

Análisis de Ingresos

-- Ingresos de nuevos clientes
SUM(CASE WHEN [tipo_cliente] = 'nuevo' THEN [ingresos] ELSE 0 END)

-- Porcentaje de ingresos del producto principal
MAX([ingresos_producto]) / SUM([ingresos_producto]) * 100

-- Valor promedio del pedido por región
AVG(CASE [region] WHEN 'Norte' THEN [valor_pedido] ELSE NULL END)

Mejores Prácticas

Diseño de Fórmulas

  1. Usa Referencias de Campo Claras

    • Usa siempre corchetes: [nombre_campo]
    • Usa nombres de campo descriptivos
    • Evita caracteres especiales en los nombres de los campos
  2. Maneja Valores Nulos

    • Usa IFNULL() o ZN() para valores por defecto
    • Considera el comportamiento de los nulos en los cálculos
    • Prueba las fórmulas con datos faltantes
  3. Optimiza el Rendimiento

    • Usa funciones simples cuando sea posible
    • Evita operaciones de cadena innecesarias
    • Considera los tipos de datos en los cálculos

Legibilidad y Mantenimiento

  1. Formatea Fórmulas Complejas

    -- Bueno: Múltiples líneas con indentación
    CASE [nivel_cliente]
     WHEN 'Oro' THEN [descuento_base] * 1.5
     WHEN 'Plata' THEN [descuento_base] * 1.2
     ELSE [descuento_base]
    END
    
    -- Evitar: Una sola línea larga
    CASE [nivel_cliente] WHEN 'Oro' THEN [descuento_base] * 1.5 WHEN 'Plata' THEN [descuento_base] * 1.2 ELSE [descuento_base] END
  2. Usa Nombres Significativos

    • Elige nombres de campos calculados descriptivos
    • Evita abreviaturas a menos que sean comúnmente entendidas
    • Incluye unidades en los nombres cuando sea relevante (p. ej., "Dias_Desde_Compra")
  3. Documenta la Lógica Compleja

    • Agrega comentarios en las descripciones de los campos
    • Documenta las reglas de negocio
    • Explica la metodología de cálculo

Prevención de Errores

  1. Prueba con Datos de Muestra

    • Verifica los cálculos con resultados conocidos
    • Prueba casos extremos (ceros, nulos, extremos)
    • Valida contra los requisitos del negocio
  2. Usa Tipos de Datos Apropiados

    • Asegúrate de que los campos numéricos se usen para operaciones matemáticas
    • Convierte cadenas a números cuando sea necesario
    • Maneja los formatos de fecha de manera consistente
  3. Valida la Lógica de Negocio

    • Confirma que las fórmulas coincidan con las reglas de negocio
    • Prueba con las partes interesadas
    • Documenta las suposiciones

Consideraciones de Rendimiento

  1. Minimiza los Cálculos Complejos

    • Pre-calcula valores cuando sea posible
    • Usa alternativas más simples cuando estén disponibles
    • Considera el rendimiento de la base de datos
  2. Agregaciones Eficientes

    • Usa funciones de agregación apropiadas
    • Minimiza los cálculos anidados
    • Considera el impacto del volumen de datos
  3. Operaciones de Cadena

    • Usa funciones de cadena de manera eficiente
    • Evita conversiones de mayúsculas y minúsculas innecesarias
    • Considera regex para patrones complejos

Solución de Problemas

Errores Comunes

Errores de Sintaxis

-- Error: Faltan corchetes
ingresos - costo  -- Debería ser: [ingresos] - [costo]

-- Error: Paréntesis no coincidentes
SUM([ventas] * 1.1  -- Debería ser: SUM([ventas] * 1.1)

-- Error: Comillas inválidas
[estado] == "activo"  -- Debería ser: [estado] == 'activo'

Problemas de Conversión de Tipos

-- Error: Concatenación de cadenas con números
[nombre] + [edad]  -- Debería ser: [nombre] + ' (' + INT([edad]) + ')'

-- Error: Aritmética de fechas con cadenas
[fecha] + 30  -- Debería ser: DATEADD('day', 30, [fecha])

Problemas con Valores Nulos

-- Error: Propagación de nulos
[valor1] + [valor2]  -- Si alguno es nulo, el resultado es nulo
-- Solución: IFNULL([valor1], 0) + IFNULL([valor2], 0)

-- Error: División por cero
[numerador] / [denominador]  -- Puede causar un error si el denominador es 0
-- Solución: CASE WHEN [denominador] != 0 THEN [numerador] / [denominador] ELSE 0 END

Técnicas de Depuración

  1. Simplifica Fórmulas Complejas

    • Descompón en partes más pequeñas
    • Prueba cada componente por separado
    • Aumenta la complejidad gradualmente
  2. Usa Datos de Muestra

    • Prueba con valores conocidos
    • Verifica los resultados intermedios
    • Comprueba los casos extremos
  3. Valida los Tipos de Datos

    • Asegúrate de que los tipos de campo sean correctos
    • Convierte cuando sea necesario
    • Maneja los valores nulos apropiadamente

Problemas de Rendimiento

  1. Cálculos Lentos

    • Simplifica las funciones anidadas complejas
    • Pre-calcula las expresiones repetidas
    • Considera enfoques alternativos
  2. Problemas de Memoria

    • Limita las operaciones de cadena
    • Reduce el tamaño del conjunto de datos si es posible
    • Optimiza la lógica de agregación
  3. Errores de Tiempo de Espera

    • Descompón en cálculos más pequeños
    • Optimiza la lógica de la fórmula
    • Considera el pre-procesamiento de datos

Obtener Ayuda

Al solucionar problemas de campos calculados:

  1. Comprueba la Sintaxis Primero

    • Verifica la colocación de los corchetes
    • Confirma que las comillas coincidan
    • Valida los nombres de las funciones
  2. Prueba con Datos Simples

    • Usa casos de prueba mínimos
    • Verifica el comportamiento esperado
    • Aísla las áreas problemáticas
  3. Revisa la Documentación

    • Confirma la sintaxis de la función
    • Comprueba los requisitos de los parámetros
    • Verifica la compatibilidad de los tipos de datos
  4. Usa los Mensajes de Error

    • Lee los detalles del error cuidadosamente
    • Identifica las áreas problemáticas específicas
    • Aplica correcciones específicas

Recuerda: El motor de fórmulas proporciona validación en tiempo real y funcionalidad de vista previa para ayudar a detectar errores temprano en el proceso de desarrollo.