Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un valor vacío indica que un miembro, tupla o celda específica está vacío. Un valor de celda vacío indica o bien que los datos de la celda especificada no pueden encontrarse en la tabla de hechos subyacente, o que la tupla de la celda especificada representa una combinación de miembros que no es aplicable para el cubo.
Note
Aunque un valor vacío es diferente de un valor de cero, un valor vacío suele tratarse como cero la mayoría de las veces.
La siguiente consulta ilustra el comportamiento de los valores vacíos y cero:
WITH
//A calculated Product Category that always returns 0
MEMBER [Product].[Category].[All Products].ReturnZero AS 0
//Will return true for any null value
MEMBER MEASURES.ISEMPTYDemo AS ISEMPTY([Measures].[Internet Tax Amount])
//Will true for any null or zero value
//To be clear: the expression 0=null always returns true in MDX
MEMBER MEASURES.IsZero AS [Measures].[Internet Tax Amount]=0
SELECT
{[Measures].[Internet Tax Amount],MEASURES.ISEMPTYDemo,MEASURES.IsZero}
ON COLUMNS,
[Product].[Category].[Category].ALLMEMBERS
ON ROWS
FROM [Adventure Works]
WHERE([Date].[Calendar].[Calendar Year].&[2001])
La siguiente información se aplica a los valores vacíos:
La función IsEmpty devuelve TRUE si y solo si la celda identificada por la tupla especificada en la función está vacía. De lo contrario, la función devuelve FALSE.
Note
La función IsEmpty no puede determinar si una expresión miembro devuelve un valor nulo. Para determinar si un miembro nulo es devuelto desde una expresión, se utiliza el operador IS .
Cuando el valor de la celda vacía es un operando para cualquiera de los operadores numéricos (+, -, *, /), el valor de la celda vacía se trata como cero si el otro operando es un valor no vacío. Si ambos operandos están vacíos, el operador numérico devuelve el valor de la celda vacía.
Cuando el valor de la celda vacía es un operando para el operador de concatenación de cadenas (+), el valor de la celda vacía se trata como una cadena vacía si el otro operando es un valor no vacío. Si ambos operandos están vacíos, el operador de concatenación de cadenas devuelve el valor de la celda vacía.
Cuando el valor de la celda vacía es un operando para cualquiera de los operadores de comparación (=. <>, >=, <=, >, <, ), el valor de la celda vacía se trata como cero o cadena vacía, dependiendo de si el tipo de dato del otro operando es numérico o de cadena, respectivamente. Si ambos operandos están vacíos, ambos operandos se tratan como cero.
Al compilar valores numéricos, el valor de la celda vacía se coloca en el mismo lugar que cero. Entre el valor de la celda vacía y cero, vacío se agrupa antes de cero.
Al compilar valores de cadena, el valor de la celda vacía se coloca en el mismo lugar que la cadena vacía. Entre el valor de la celda vacía y la cadena vacía, empty se coloca antes de una cadena vacía.
Manejo de valores vacíos en sentencias y cubos MDX
En las sentencias de Expresiones Multidimensionales (MDX), puedes buscar valores vacíos y luego realizar ciertos cálculos en celdas con datos válidos (es decir, no vacíos). Eliminar los valores vacíos al realizar cálculos puede ser importante porque ciertos cálculos, como un promedio, pueden ser inexactos si se incluyen los valores de celdas vacías.
Si los valores vacíos se almacenan en los datos subyacentes de la tabla de hechos, por defecto se convertirán en ceros cuando el cubo sea procesado. Puedes usar la opción de Procesamiento Nulo en una medida para controlar si los hechos nulos se convierten en 0, se convierten en un valor vacío o incluso generan un error durante el procesamiento. Si no quieres que los valores vacíos aparezcan en los resultados de tu consulta, deberías crear consultas, miembros calculados o sentencias MDX Script que eliminen los valores vacíos o los sustituyan por otro valor.
Para eliminar filas o columnas vacías de una consulta, puedes usar la sentencia NON EMPTY antes de la definición del conjunto de ejes. Por ejemplo, la siguiente consulta solo devuelve la categoría de Producto Bicicletas porque es la única categoría que se vendió en el año natural 2001:
SELECT
{[Measures].[Internet Tax Amount]}
ON COLUMNS,
//Comment out the following line to display all the empty rows for other Categories
NON EMPTY
[Product].[Category].[Category].MEMBERS
ON ROWS
FROM [Adventure Works]
WHERE([Date].[Calendar].[Calendar Year].&[2001])
De forma más general, para eliminar tuplas vacías de un conjunto puedes usar la función NonVoid. La siguiente consulta muestra dos medidas calculadas, una de las cuales cuenta el número de Categorías de Producto y la segunda muestra el número de Categorías de Producto que tienen valores para la medida [Importe del Impuesto de Internet] y el Año Calendario 2001:
WITH
MEMBER MEASURES.CategoryCount AS
COUNT([Product].[Category].[Category].MEMBERS)
MEMBER MEASURES.NonEmptyCategoryCountFor2001 AS
COUNT(
NONEMPTY(
[Product].[Category].[Category].MEMBERS
,([Date].[Calendar].[Calendar Year].&[2001], [Measures].[Internet Tax Amount])
))
SELECT
{MEASURES.CategoryCount,MEASURES.NonEmptyCategoryCountFor2001 }
ON COLUMNS
FROM [Adventure Works]
Para más información, véase NonEmpty (MDX).
Valores vacíos y operadores de comparación
Cuando hay valores vacíos presentes en los datos, los operadores lógicos y de comparación pueden devolver potencialmente un tercer resultado de VACÍO en lugar de solo VERDADERO o FALSO. Esta necesidad de una lógica de tres valores es el origen de muchos errores de la aplicación. Estas tablas describen el efecto de introducir comparaciones de valores vacíos.
Esta tabla muestra los resultados de aplicar un operador AND a dos operandos booleanos.
| AND | VERDADERO | EMPTY | FALSO |
|---|---|---|---|
| VERDADERO | VERDADERO | FALSO | FALSO |
| VACÍO | FALSO | EMPTY | FALSO |
| FALSO | FALSO | FALSO | FALSO |
Esta tabla muestra los resultados de aplicar un operador OR a dos operandos booleanos.
| OR | VERDADERO | FALSO |
|---|---|---|
| VERDADERO | VERDADERO | VERDADERO |
| VACÍO | VERDADERO | VERDADERO |
| FALSO | VERDADERO | FALSO |
Esta tabla muestra cómo el operador NOT niega, o revierte, el resultado de un operador booleano.
| Expresión booleana a la que se aplica el operador NOT | Se evalúa como |
|---|---|
| VERDADERO | FALSO |
| EMPTY | EMPTY |
| FALSO | VERDADERO |