VALORCUBO devuelve vacío en vez de 0: cómo forzar el resultado numérico
Un miembro trabaja con funciones CUBO en Excel y se encuentra con un problema molesto: cuando VALORCUBO no encuentra datos que coincidan con los criterios, devuelve un vacío (no un 0, no un error), lo que hace imposible usar SI.ERROR para controlarlo.
Leo propone la solución en dos pasos: multiplicar el resultado por 1 para forzar un error, y luego capturarlo con SI.ERROR:
``
=SI.ERROR(1 VALORCUBO("ThisWorkbookDataModel"; "[Measures].[Mi_Medida]"; ...); 0)
`
El truco: 1 vacío genera un error #VALOR!, que sí puede ser capturado por SI.ERROR. Sin la multiplicación, el vacío pasa desapercibido porque no es un error real.
Sergio sugiere usar SI para comprobar si el resultado es vacío, pero Leo aclara que SI.ERROR envolviendo la multiplicación es más robusto, especialmente cuando VALORCUBO está dentro de MAP u otras funciones iteradoras.
La discusión también toca el uso de LET para simplificar la fórmula cuando hay que aplicar este patrón a múltiples celdas:
`
=LET(
resultado; VALORCUBO(...);
SI.ERROR(1 * resultado; 0)
)
``
Un patrón que cualquiera que trabaje con funciones cubo y modelos de datos va a necesitar tarde o temprano.
El problema: VALORCUBO no devuelve ni cero ni error
Cuando trabajas con funciones CUBO sobre un modelo de datos (Power Pivot, medidas DAX), VALORCUBO tiene un comportamiento que despista: si no encuentra ningún dato que case con los criterios, no devuelve un 0 ni un error, devuelve un vacío. Y ese vacío es especialmente molesto porque SI.ERROR no lo captura —al no ser un error real, pasa desapercibido— y acaba arrastrando huecos por todo el informe.
Un miembro de la comunidad se topó justo con esto: quería que las celdas sin datos mostraran un cero, pero por más que envolvía la fórmula en SI.ERROR, el vacío seguía colándose.
La solución de Leo: provocar el error a propósito
El truco es tan simple como elegante: multiplicar el resultado por 1.
=SI.ERROR(1 * VALORCUBO("ThisWorkbookDataModel"; "[Measures].[Mi_Medida]"; ...); 0)La lógica es la siguiente. Cuando VALORCUBO devuelve un número, 1 número sigue siendo ese número: no cambia nada. Pero cuando devuelve un vacío, la operación 1 vacío ya no es válida y genera un error #VALOR!. Y ese error sí lo caza SI.ERROR, que lo sustituye por el 0 que buscábamos.
En otras palabras: convertimos un vacío silencioso en un error explícito, precisamente para poder atraparlo. Sin la multiplicación, el vacío no es error y SI.ERROR lo ignora.
Por qué no basta con un SI
Sergio propuso comprobar directamente si el resultado es vacío con un SI. Funciona en casos sencillos, pero Leo aclaró por qué la multiplicación envuelta en SI.ERROR es más robusta: cuando VALORCUBO vive dentro de un MAP u otra función iteradora, comprobar celda a celda con SI se complica, mientras que el patrón SI.ERROR(1 * ...; 0) se aplica de forma uniforme a todo el array sin lógica adicional.
Ordenarlo con LET
Si el mismo patrón se repite en muchas celdas, conviene usar LET para no escribir dos veces la llamada al cubo:
=LET(
resultado; VALORCUBO(...);
SI.ERROR(1 * resultado; 0)
)Así VALORCUBO se evalúa una sola vez, la fórmula se lee mejor y el mantenimiento es trivial: si cambias la medida, la cambias en un único sitio.
Funciones clave
VALORCUBO: extrae un valor concreto del modelo de datos según una lista de criterios (medida y miembros de dimensión).SI.ERROR: sustituye un error por un valor alternativo. Aquí es la red que recoge el#VALOR!provocado a propósito.LET: nombra el resultado del cubo para reutilizarlo sin repetir la llamada.
Conclusión
Este es uno de esos patrones pequeños que ahorran horas de frustración. Cualquiera que trabaje con funciones cubo y modelos de datos se va a encontrar tarde o temprano con el vacío fantasma de VALORCUBO, y la respuesta es contraintuitiva pero infalible: fuerza un error multiplicando por 1 y deja que SI.ERROR haga el resto. De estos matices, que no salen en ningún manual, se habla cada semana en la comunidad de InflueXcel.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Del VBA a una sola fórmula: calcular el RFC mexicano con LET, MAP y expresiones regulares CasoHéctor llega al grupo con un problema que no se ve todos los días: tiene resuelto el cálculo del RFC mexicano, pero lo tiene en VBA, y quier
- Buscar prefijos de longitud variable en otra columna: BYROW, MAP, REGEX y COINCIDIRX CasoInteresante problema planteado por un miembro: tiene una columna A con ~1.200 referencias de longitud variable y una columna C con ~276 text
- Media móvil dinámica: 6 enfoques con SCAN, MMULT y MAP CasoUn miembro de la comunidad tiene un rango con ventas mensuales y necesita generar una columna con la media móvil de los últimos 3 meses usan
- Error #CALC! con MAP y AGRUPARPOR: solución con REDUCE+APILARV CasoNuevo reto de Excel resuelto por la comunidad: un usuario necesita aplicar AGRUPARPOR de forma iterativa sobre un rango de códigos de cuenta
- Repetir un rango N veces según marca con MAP y CONTAR.SI CasoUn usuario necesita repetir un listado de locales (D2:D10) un número variable de veces para cada marca de la columna B. El número de repetic
- Readmisión de pacientes en 48h: Power Query, LAMBDA/MAP y AGRUPARPOR CasoAndrés Rojas plantea un reto real de datos clínicos: a partir de una tabla con más de un millón de registros de urgencias (IdPaciente, Fecha
- ¿MAP o BYROW? Descubre cuándo usar cada una Tutorial¿MAP o BYROW? Descubre cuándo usar cada una y cómo estas funciones pueden transformar tu forma de trabajar en Excel. En este vídeo aprenderá
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- Obtener la última tarifa (valor más a la derecha) con 5 fórmulas distintas CasoInteresante problema planteado por un miembro de la comunidad que trabaja con una tabla de artículos textiles (manteles, delantales, etc.) c
- FILTRAR que devuelve múltiples filas: por qué falla y cómo resolverlo CasoInteresante problema que aparece con frecuencia cuando se combinan FILTRAR con funciones iterativas como MAP o BYROW. Un miembro tiene una t