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