Funciones Financieras
RATE, NPV, IRR, PMT, FV, PV, amortización, bonos y todos los instrumentos financieros disponibles en DAX
Para quién son estas funciones
Las funciones financieras de DAX son básicamente las mismas que tiene Excel desde hace décadas — si trabajas en banca, gestión de inversiones, contabilidad o análisis financiero y ya las conoces de Excel, en DAX funcionan exactamente igual. Si no tienes ese background, estas funciones son muy específicas y probablemente no las necesites para dashboards operativos. ¡Pero aquí están todas por si las necesitas! 💰
Clasificación de las 50 funciones por uso:
- DINERO EN EL TIEMPO (valor actual, valor futuro, VPN, TIR) — para inversiones y proyectos
- PRÉSTAMOS Y PAGOS (cuota, interés, principal, plazo) — para hipotecas y financiación
- DEPRECIACIÓN (amortización de activos) — para contabilidad
- BONOS Y RENTA FIJA (precio, rendimiento, cupón, accrual) — para tesorería y mercados
Todas estas funciones tienen equivalente exacto en Excel con el mismo nombre. Si ya sabes usarlas en Excel, en DAX son idénticas. La única diferencia es que en DAX las usas como medidas o columnas calculadas del modelo, no en celdas de hoja.
Valor del dinero en el tiempo
El concepto fundamental: ¿cuánto vale hoy el dinero del futuro?
El concepto central de las finanzas: 1.000 € hoy valen más que 1.000 € en el futuro, porque hoy podrías invertirlos y ganar intereses. Estas funciones calculan esas equivalencias.
- tasa — tasa de interés por período
- nper — número de períodos
- pmt — pago por período (negativo si es salida de dinero)
- fv — valor futuro al final (opcional, por defecto 0)
- tipo — 0=pago al final del período, 1=al inicio
// ¿Cuánto vale hoy recibir 1.000€ al mes durante 5 años con una tasa del 5% anual?
VP Pagos = PV(0.05/12, 60, -1000)
// Tasa mensual: 5%/12, Períodos: 60 meses, Pago: 1.000€/mes
// Resultado: aprox. 52.991€ (lo que deberías invertir hoy para recibir eso)
// Valor presente de una sola cantidad futura:
VP Unico = PV(0.08, 10, 0, -1000000)
// ¿Cuánto vale hoy 1.000.000€ en 10 años con 8% de rendimiento anual?
// Resultado: aprox. 463.193€
// Ahorro 500€/mes durante 20 años con rentabilidad del 7% anual:
Ahorro Final = FV(0.07/12, 240, -500)
// Resultado: aprox. 262.481€
// Plan de pensiones — valor al jubilarse:
Pensión Final =
FV(
'PlanPensión'[TasaAnual]/12,
'PlanPensión'[Meses],
-'PlanPensión'[AportaciónMensual]
)
// Inversión inicial: -100.000€
// Flujos anuales: año 1=20.000, año 2=30.000, año 3=40.000, año 4=50.000
// Tasa de descuento: 10%
VPN Proyecto = NPV(0.10, 20000, 30000, 40000, 50000) - 100000
// Resultado positivo = proyecto viable, negativo = destruye valor
// Tabla 'FlujosProyecto' con columnas Fecha e Importe:
VPN Real =
XNPV(
0.10, -- tasa de descuento
'FlujosProyecto'[Importe],
'FlujosProyecto'[Fecha]
)
Tasas y rendimientos
// Préstamo de 10.000€ a pagar en 36 cuotas de 320€:
Tasa Mensual = RATE(36, -320, 10000)
Tasa Anual = RATE(36, -320, 10000) * 12
// Resultado: aprox. 1.07% mensual = 12.84% anual (TAE aproximada)
XIRR(<valores>, <fechas>, [<estimar>])
XIRR: TIR para flujos con fechas irregulares
Una inversión es atractiva cuando TIR > tasa de descuento (coste del capital).
// TIR de un proyecto con flujos anuales:
// Año 0: -50.000 (inversión inicial)
// Años 1-5: +15.000, +20.000, +25.000, +20.000, +15.000
TIR Proyecto = IRR({-50000, 15000, 20000, 25000, 20000, 15000})
// Si TIR > coste del capital → proyecto viable
// TIR con fechas reales:
TIR Real = XIRR('Flujos'[Importe], 'Flujos'[Fecha])
Otras funciones de rendimiento:
YIELDDISC— rendimiento de un bono con descuento (letra del tesoro)YIELDMAT— rendimiento a vencimiento con interés en vencimiento
Préstamos y pagos — Hipotecas y financiación
// Hipoteca de 200.000€ a 30 años al 3.5% anual:
Cuota Mensual = ABS(PMT(0.035/12, 360, 200000))
// ABS porque PMT devuelve valor negativo (es un pago)
// Resultado: aprox. 897€/mes
// Cuota dinámica (con parámetros del modelo):
Cuota Hipoteca =
ABS(PMT(
'Hipoteca'[TasaAnual] / 12, -- tasa mensual
'Hipoteca'[Años] * 12, -- número de cuotas
'Hipoteca'[Capital] -- capital prestado
))
PPMT(<tasa>, <período>, <nper>, <va>)
PPMT: la parte de CAPITAL (principal) de una cuota específica
Juntas permiten construir una tabla de amortización completa.
// Para el mes número N de la hipoteca:
Intereses Cuota N = ABS(IPMT(0.035/12, [NúmeroCuota], 360, 200000))
Principal Cuota N = ABS(PPMT(0.035/12, [NúmeroCuota], 360, 200000))
// Cuota N = Intereses N + Principal N (siempre igual a PMT)
// Tabla de amortización completa (tabla calculada):
Amortización =
ADDCOLUMNS(
GENERATESERIES(1, 360, 1), -- 360 meses
"Cuota Total", ABS(PMT(0.035/12, 360, 200000)),
"Interés", ABS(IPMT(0.035/12, [Value], 360, 200000)),
"Principal", ABS(PPMT(0.035/12, [Value], 360, 200000))
)
Otras funciones de préstamos:
NPER(<tasa>, <pmt>, <va>)— calcula el número de períodos necesarios para pagar un préstamoCUMIPMT(<tasa>, <nper>, <va>, <inicio>, <fin>, <tipo>)— intereses acumulados entre dos períodosCUMPRINC(<tasa>, <nper>, <va>, <inicio>, <fin>, <tipo>)— principal amortizado entre dos períodos
Depreciación y amortización de activos
| FUNCIÓN | MÉTODO | DESCRIPCIÓN |
|---|---|---|
SLN |
Línea recta | Deprecia igual cada año |
SYD |
Suma de dígitos | Más depreciación al inicio |
DB |
Saldo decreciente fijo | % fijo sobre valor residual |
DDB |
Doble saldo decreciente | Como DB pero el doble de rápido |
VDB |
Saldo decreciente variable | El más flexible, permite cambiar métodos |
// Maquinaria: 50.000€, valor residual 5.000€, vida útil 10 años:
Depreciación Anual = SLN(50000, 5000, 10)
// (50.000 - 5.000) / 10 = 4.500€ por año
// Mismo activo, depreciación del primer año:
Dep Año 1 = DB(50000, 5000, 10, 1)
Bonos y letras del Tesoro — Renta fija
Estas funciones son específicas para análisis de renta fija — bonos, letras del tesoro, pagarés. Si trabajas en tesorería corporativa, gestión de activos o análisis de deuda pública, estas son tus funciones. Si tu ámbito es BI empresarial operativo, probablemente no las necesites.
| FUNCIÓN | DESCRIPCIÓN |
|---|---|
ACCRINT |
Interés acumulado de un valor con pagos de interés periódicos |
ACCRINTM |
Interés acumulado de un valor que paga interés al vencimiento |
RECEIVED |
Importe recibido al vencimiento de un valor totalmente invertido |
DISC |
Tasa de descuento de un valor |
INTRATE |
Tipo de interés para un valor totalmente invertido |
// Ejemplo ACCRINT — interés acumulado de un bono:
// Bono: emitido el 1/1/2024, primer cupón el 1/7/2024
// Liquidación: 31/3/2024, tasa 5%, valor nominal 1.000€, semestral
Interés Acumulado =
ACCRINT(
DATE(2024,1,1), -- emisión
DATE(2024,7,1), -- primer interés
DATE(2024,3,31), -- liquidación (hoy)
0.05, -- tasa del 5%
1000, -- valor nominal
2 -- frecuencia semestral
)
// Resultado: interés acumulado desde emisión hasta liquidación
Cupones de bonos
| FUNCIÓN | DESCRIPCIÓN |
|---|---|
COUPDAYBS |
Días desde inicio del período de cupón hasta liquidación |
COUPDAYS |
Días en el período del cupón actual |
COUPDAYSNC |
Días desde liquidación hasta el próximo cupón |
COUPNCD |
Fecha del próximo cupón después de la liquidación |
COUPNUM |
Número de cupones pendientes entre liquidación y vencimiento |
COUPPCD |
Fecha del último cupón antes de la liquidación |
// Ejemplo COUPNUM — cuántos cupones quedan:
Cupones Restantes = COUPNUM(TODAY(), DATE(2030,1,1), 2)
// Bono con vencimiento 1/1/2030, semestral: cuántos cupones quedan hasta hoy
Precio y rendimiento
| FUNCIÓN | DESCRIPCIÓN |
|---|---|
PRICE |
Precio por 100€ de valor nominal de un bono con pagos periódicos |
PRICEDISC |
Precio de un valor con descuento (sin cupones) |
PRICEMAT |
Precio de un valor que paga interés al vencimiento |
YIELD |
Rendimiento de un bono con pagos periódicos |
// Ejemplo PRICE — precio de un bono:
// Bono al 6% anual con pagos semestrales, rendimiento de mercado 7%, 5 años
Precio Bono =
PRICE(
TODAY(), -- liquidación
DATE(2029,1,1), -- vencimiento
0.06, -- tasa del cupón
0.07, -- rendimiento de mercado
100, -- valor de rescate
2 -- frecuencia semestral
)
// Precio < 100 porque el rendimiento de mercado (7%) > tasa del cupón (6%)
Conversiones de tasa
NOMINAL(<tasa_efectiva>, <npery>)
NOMINAL: La inversa — de tasa efectiva a nominal
// Un depósito al 5% nominal capitalizado mensualmente:
TAE = EFFECT(0.05, 12)
// Resultado: 5.116% (la rentabilidad real incluyendo el efecto de la capitalización compuesta)
// Si la TAE es 5.116%, ¿cuál es la tasa nominal mensualizada?
Tasa Nominal = NOMINAL(0.05116, 12)
// Resultado: 5% (la tasa nominal original)
DOLLARFR(<precio_decimal>, <fracción>)
DOLLARDE: fraccionario a decimal
DOLLARFR: decimal a fraccionario
// En mercados de bonos USA, los precios se cotizan en 32avos:
// "100 y 16/32" se escribe como 100.16 en ese formato
DOLLARDE(100.16, 32) -- 100.5 (el decimal real: 100 + 16/32 = 100.5)
DOLLARFR(100.5, 32) -- 100.16 (de vuelta a formato de bonos)
Casos de uso reales en Power BI
Patrón 1 — Dashboard de hipoteca interactivo
// Con parámetros What-If para capital, tasa y plazo:
Cuota Mensual =
ABS(PMT('Tasa'[Valor]/12, 'Plazo'[Valor]*12, 'Capital'[Valor]))
Total Intereses =
([Cuota Mensual] * 'Plazo'[Valor] * 12) - 'Capital'[Valor]
Coste Total Hipoteca = 'Capital'[Valor] + [Total Intereses]
Patrón 2 — Análisis de inversión
VAN = XNPV('TasaDescuento'[Valor], 'Flujos'[Importe], 'Flujos'[Fecha])
TIR = XIRR('Flujos'[Importe], 'Flujos'[Fecha])
Decisión =
IF(
[VAN] > 0 && [TIR] > 'TasaDescuento'[Valor],
"✅ Inversión viable",
"❌ No viable"
)
Patrón 3 — Tabla de amortización dinámica
// Tabla calculada con toda la amortización de una hipoteca:
Plan Amortización =
VAR Capital = 200000
VAR Tasa = 0.035/12
VAR NPer = 360
VAR Cuota = ABS(PMT(Tasa, NPer, Capital))
RETURN
ADDCOLUMNS(
GENERATESERIES(1, NPer, 1),
"Mes", [Value],
"Cuota", Cuota,
"Interés", ABS(IPMT(Tasa, [Value], NPer, Capital)),
"Principal", ABS(PPMT(Tasa, [Value], NPer, Capital))
)
¡Las finanzas cuantitativas de DAX ya son tuyas! Cerramos la guía DAX con la categoría más especializada: las funciones Padre-Hijo para jerarquías irregulares como organigramas o estructuras de cuentas contables. 🚀