Índices multidimensionales (MDI)

En esta sección:

 

Un índice multidimensional (MDI) le permite recuperar eficaz y flexiblemente la información que necesita para el análisis de empresa. Observa los datos de manera diferente a los sistemas de procesamiento de transacción cuya meta es recuperar los registros basados en una clave. (WebFOCUS emplea un índice de árbol B para este tipo de recuperación). El MDI es sólo para recuperación. No se utiliza para solicitudes MODIFY o Maintain.

Los analistas de empresa pueden estar interesados en datos específicos (valores de datos, también llamados medidas) sobre categorías múltiples de datos en el origen de datos. A las categorías de datos, tales como región o departamento, se les refiere como dimensiones. Un índice multidimensional utiliza dimensiones y todas sus otras relaciones jerárquicas para apuntar a datos especificos.

El MDI es un índice multidimensional que contiene al menos dos dimensiones. Este índice se comporta como un cubo virtual de valores que se intersectan en medidas de interés. Entre más dimensiones se utilizan en una consulta, mejor el rendimiento de recuperación.

Por ejemplo, suponga que el origen de datos CENTORD tiene un MDI con dimensiones STATE, REGION y PRODCAT. Se utiliza el MDI para recuperar los datos (datos LINEPRICE y QUANTITY) que yacen en la intersección de los valores de dimensión en la solicitud siguiente:

TABLE FILE CENTORD
SUM QUANTITY LINEPRICE
WHERE REGION EQ 'EAST'
WHERE STATE EQ 'DC'
WHERE PRODCAT EQ 'Cameras'
END

El MDI también proporciona las siguientes características de recuperación mejorada, adicionales: MDI JOIN, JOIN dimensional, MDI WITHIN, MAXVALUES, codificación MDI y AUTOINDEX para MDI.


Principio de página

x
Especificación de un MDI en el archivo Access

Cómo:

Todos los atributos MDI se especifican en el archivo Access para el origen de datos. El único atributo necesario en el archivo máster es el atributo ACCESSFILE para apuntar al archivo Access que contiene especificaciones MDI.

Se puede dividir un MDI en múltiples archivos MDI. Sin embargo, aun si se divide el origen de datos sobre el cual se construye el MDI, cada división MDI abarca todas las divisiones de origen de datos.



x
Sintaxis: Cómo Especificar un MDI en un archivo Access
MASTER = masterfile ,$
    DATA = database_filename1 ,$
     .
     .
     .
    DATA = database_filenamen ,$
    MDI = mdiname, 
        TARGET_OF = segname ,$
        DIM = field1 [MAXVALUES = n1] [WITHIN = dimname1],$
          .
          .
          .
        DIM = fieldn [MAXVALUES = nn] [WITHIN = dimnamen],$
 
        MDIDATA = mdifile1 ,$
          .
          .
          .
        MDIDATA = mdifilen,$

donde:

masterfile

Es el nombre del archivo máster.

database_filename1, ..., database_filenamen

Son nombres de archivos físicos completamente calificados en la sintaxis. nativo para su entorno operativo. Si el nombre contiene caracteres especiales o en blanco, debe estar encerrado entre comillas sencillas. Las distintas declaraciones de DATA describen las divisiones concatenadas.

mdiname

Es el nombre lógico del MDI.

segname

Es el segmento que contiene los datos apuntados por el MDI. Si los datos objetivo se distribuyen a través de varios segmentos, el objetivo debe ser el segmento superior que contiene datos MDI para evitar el efecto multiplicativo.

field1, ..., fieldn

Todos los campos que se utilizarán como dimensiones. Se requieren al menos dos dimensiones para un MDI.

mdifile1, ..., mdifilen

Son nombres de archivos físicos completamente calificados para el MDI en la sintaxis. nativo para su entorno operativo. Si el nombre contiene caracteres especiales o en blanco, debe estar encerrado entre comillas sencillas. Las distintas declaraciones de MDIDATA describen las divisiones concatenadas.

n1, ..., nn

Es el número de valores distintos que el campo puede tener. Este número debe ser un número completo positivo.

dimname1, ..., dimnamen

Define una jerarquía de dimensiones. Esta dimensión está definida dentro de dimname la dimensión. Por ejemplo, CITY WITHIN STATE.



Ejemplo: Definición de un MDI en UNIX

Este ejemplo muestra un MDI con dos divisiones:

MASTERNAME = CAR,$
 DATA = /user1/car.foc,$
 MDI = carmdi,
   TARGET_OF = ORIGIN,$
   DIM = CAR,$
   DIM = COUNTRY,$
   DIM = MODEL,$
   MDIDATA = /user1/car1.mdi,$
   MDIDATA = /user1/car2.mdi,$


Ejemplo: Definición de un MDI en Windows

Este ejemplo muestra un MDI con dos divisiones:

MASTERNAME = CAR,$
 DATA = c:\user1\car.foc,$
 MDI = carmdi,
   TARGET_OF = ORIGIN,$
   DIM = CAR,$
   DIM = COUNTRY,$
   DIM = MODEL,$
   MDIDATA = c:\user1\car1.mdi,$
   MDIDATA = c:\user1\car2.mdi,$


Ejemplo: Cómo definir un MDI en z/OS

Este ejemplo muestra un MDI con dos divisiones:

MASTER = CAR,$
 DATA = USER1.CAR.FOCUS,$
 MDI = CARMDI,
   TARGET_OF = ORIGIN,$
   DIM = CAR,$
   DIM = COUNTRY,$
   DIM = MODEL,$
   MDIDATA = USER1.CAR1.MDI,$
   MDIDATA = USER1.CAR2.MDI,$

Principio de página

x
Generación de un índice multidimensional

Se especifica cada MDI en un archivo Access para el origen de datos. WebFOCUS usa el archivo de acceso en el análisis de recuperación de cada solicitud de TABLE.

Ud. después utiliza el comando REBUILD MDINDEX para construir el MDI. El MDI tiene los atributos DCB que siguen: RECFM=F,LRECL=4096,BLKSIZE=4096.

Un índice multidimensional otorga acceso a consultas complejas de alta velocidad a combinaciones de dimensiones a través de orígenes de datos. Puede hacer elecciones intelligentes sobre dimensiones de índice si conoce que información los usuarios desean recuperar y porqué.

Un archivo Access puede definir más de un MDI. Si el archivo Access define MDIs múltiples, para cada consulta la facilidad AUTOINDEX elige utilizar el mejor índice.

El primer paso para utilizar un MDI es encontrar que clase de información los usuarios necesitan desde el origen de datos. Puede obtener información sobre sus MDIs directamente desde WebFOCUS.


Principio de página

x
Elección de dimensiones para su índice

Referencia:

La selección de dimensiones de índice depende del conocimiento sobre los datos y del análisis de lo que se necesita de estos datos. Examine las pruebas de selección de registro (IF y WHERE) en sus consultas para ver cuantas dimensiones de índice cada aplicación utiliza actualmente para seleccionar registros. Si aplicaciones distintas necesitan subconjuntos diferentes de dimensiones, considere MDIs separados para los subconjuntos separados. Aunque WebFOCUS puede producir informes de alta velocidad mediante índices de hasta 30 dimensiones, los índices más pequeños suelen generar menos carga de recuperación. Puede generar un número sin límite de MDIs.

Los siguientes son buenos candidatos para dimensiones en un MDI:

Incluyendo un valor que se actualiza frecuentemente (tal como un campo AUTODATE) en el MDI, que requiere la reconstrucción frecuente del MDI para mantenerlo al día. WebFOCUS puede indicarle acerca de la selección de dimensiones de MDI.

Se pueden utilizar los campos DEFINE descritos en el archivo máster como dimensiones. Los campos dinámicos DEFINE no pueden ser dimensiones.

Un MDI es solamente para recuperación; no es compatible con FIND y LOOKUP.



x
Referencia: Directrices para un índice multidimensional

Las directrices que siguen le aplican a cada MDI:



x
Construcción y mantenimiento de un índice multidimensional

Se utiliza el comando REBUILD para generar o mantener un índice multidimensional. Puede emitir este comando en una FOCEXEC.

El mejor MDI se construye al especificar las dimensiones en el orden de la mejor cardinalidad (los valores más distintivos).

Para emitir el comando REBUILD en un FOCEXEC, coloque el comando REBUILD y la información proporcionada por el usuario, necesaria para procesar REBUILD en el FOCEXEC.

Si el archivo MDI puede ser más de dos gigabytes o si planea añadirle más divisiones de datos, se debe dividir el archivo índice de MDI desde la fase REBUILD inicial. Después de crear el índice, puede utilizarlo en una solicitud de recuperación. No puede utilizar un MDI para modificar el origen de datos. Si actualiza el origen de datos sin reconstruir el MDI y luego intenta usarlo para recuperar datos, WebFOCUS muestra un mensaje que indica que el MDI ha caducado. Luego debe reconstruir el MDI.



Ejemplo: Cómo crear un índice multidimensional

El siguiente FOCEXEC genera el MDI CARMDI y contiene los valores proporcionados por el usuario, necesarios para el procesamiento de REBUILD en una línea independiente al FOCEXEC, en mayúsculas:

REBUILD
MDINDEX
NEW
CAR
CARMDI
NO

Principio de página

x
Uso de índice multidimensional en una consulta

WebFOCUS permite utilizar un MDI en una consulta de TABLE o SQL. El rendimiento mejora cuando se utilizan todas las dimensiones en el MDI en el criterio de selección para la consulta.

Hay dos formas de utilizar un MDI con una consulta TABLE:

Puede utilizar un MDI con una consulta SQL emitiendo una oración SQL SELECT con una prueba WHERE que utiliza un campo del MDI. Por ejemplo,

SELECT field_1, field_2 FROM table WHERE field_3 = value;

donde field_3 es una dimensión de un MDI.

Nota: Debe estar activado AUTOINDEX para poder usar esta característica.


Principio de página

x
Consultación de un índice multidimensional

Cómo:

WebFOCUS proporciona un comando de consulta que genera estadísticas y descripciones para sus MDIs. El comando ? MDI permite mostrar información sobre los MDIs, para un archivo máster FOCUS/XFOCUS determinado, que albergue el destino de su MDI.



x
Sintaxis: Cómo Consultar un índice multidimensional
? MDI mastername {mdiname|*} [HOLD [AS holdfile]]

donde:

mastername

Es el nombre lógico del archivo máster. Si no incluye otros parámetros, aparece una lista de todos los nombres MDI especificados, junto con el comando TARGET_OF del archivo de acceso de este mastername. Si el archivo de acceso del mastername no incluye información sobre el MDI, aparece un mensaje.

mdiname

Es el nombre lógico de un MDI. Al especificar este parámetro muestra todas las dimensiones que pertenecen a este MDI.

Debe especificar mdiname como TARGET_OF en el archivo de acceso de este mastername; de lo contrario aparecerá un mensaje. Si alguna de las dimensiones pertenece a una estructura principal-secundario, aparecerá la imagen de un árbol.

*

Muestra una lista de todas las dimensiones, por MDI, cuyos destinos aparecen especificados dentro del archivo de acceso de este mastername.

HOLD

Guarda el resultado en un archivo de texto.

holdfile

Es el archivo donde se guarda el resultado. Si esto no se incluye con la frase AS, el archivo se nombra HOLD.


Principio de página

x
Uso de AUTOINDEX para elegir un MDI

Cómo:

Cuando un archivo Access define múltiples MDIs, la eficiencia de recuperación para una consulta se puede convertir en una función del índice que utiliza para acceder el origen de datos. La facilidad AUTOINDEX analiza cada solicitud de recuperación y elige el MDI o el índice de árbol B que proporciona el mejor acceso a los datos. Puede emitir el comando AUTOINDEX en un FOCEXEC o en un perfil. Se puede habilitar o deshabilitar la facilidad AUTOINDEX. La opción por defecto consiste en desactivar AUTOINDEX en plataformas de byte invertido y activarlo en plataformas de byte hacia adelante.

En su análisis, AUTOINDEX considera los factores siguientes:

Si los criterios de selección en una solicitud no incluyen ningún campo MDI, WebFOCUS busca un índice de árbol B, apropiado para su uso en la recuperación. Si un campo es ambos un índice de árbol B y una dimensión en un MDI, se utiliza el MDI para recuperar si dos tercios de los campos en las pruebas de selección son dimensiones en el MDI. Si es menos de dos tercios, se utiliza el índice de árbol B. Si hay múltiples índices de árbol B, se utiliza el de mayor jerarquía.

Si no se produce ninguna otra modificación, WebFOCUS usa el primer MDI que encuentre en el archivo de acceso.



x
Sintaxis: Cómo Habilitar o deshabilitar AUTOINDEX para recuperación
SET AUTOINDEX = {ON|OFF}

donde:

ON

Optimiza la recuperación MDI. AUTOINDEX sólo se puede ajustar a ON cuando el parámetro ALL se ajusta a OFF.

OFF

Deshabilita la facilidad AUTOINDEX. No se utilizará ningun MDI para recuperación.

Nota: AUTOINDEX utiliza la opción por defecto, ON, en plataformas de byte inverso, y OFF, en las plataformas de byte hacia adelante.

Nota: Las solicitudes de WebFOCUS TABLE pueden desactivar AUTOINDEX automáticamente, y seleccionar el índice correspondiente para la recuperación, mediante la indicación del nombre del índice en la propia solicitud:

TABLE FILE filename.mdiname

También puede asegurar el acceso con un MDI específico al generar un archivo Access que sólo describe ese índice.


Principio de página

x
Unión a un índice multidimensional.

Cómo:

Referencia:

El unir a un MDI utiliza el poder del MDI para producir una join rápida y eficaz. En vez de unir un campo en el archivo de origen a un campo indexado en el archivo objetivo, puede unir dimensiones múltiples del MDI.

Cuando se implementa la join, se genera el conjunto de respuesta desde el archivo de origen y los valores recuperados para los campos de origen sirven como los valores de índice para las dimensiones correspondientes en el MDI objetivo.

Puede unirse a un MDI de dos maneras:

Los campos de origen deben formar correspondencia de uno a uno con las dimensiones objetivo. El motor MDI utiliza los valores de campo de origen para obtener indicadores al segmento objetivo del MDI, acelerando la recuperación de datos desde el archivo objetivo.

Imagine los campos de origen como dimensiones de espejo. Si establece restricciones más rigurosas en las dimensiones de espejo, se recupera un conjunto de respuesta más pequeño desde el archivo de origen y se necesitan menos índices I/Os para ubicar los registros desde el archivo objetivo. Se incrementa dramáticamente la velocidad de la join con la velocidad de recuperación del conjunto de respuesta del archivo de origen. Por lo tanto, puede acelerar cualquier solicitud TABLE contra el archivo de origen al incorporar criterios de selección en campos que participan en ya sea árbol B o MDI.

La fórmula que sigue calcula la hora para una solicitud TABLE que utiliza una join MDI:

Total Time = Time to Retrieve the answer set from the source file (Ts)
+ Time to retrieve the MD index pointers (Tp)
+ Time to retrieve data from the target file (Tt)

Al usar un índice de árbol B o MDI en recuperación de datos reduce todos los tipos de hora de recuperación, reduciendo la hora total de recuperación.



x
Sintaxis: Cómo Unir con todas las dimensiones de un índice multidimensional
JOIN field_1 [AND field_2 ...] IN sfile [TAG tag_1]
TO ALL mdiname IN tfile [TAG tag_2] [AS joinname]
[END]

donde:

field_1, field_2

Son los campos de join del archivo de origen.

sfile

Es el archivo máster de origen.

tag_1, tag_2

Son nombres de uno a ocho caracteres, que pueden servir como calificadores únicos para los nombres de los campos de una solicitud.

mdiname

Es el nombre lógico del MDI, construido sobre tfile, que se va a usar en el join.

tfile

Es el archivo máster objetivo.

joinname

Es un nombre de uno a ocho caracteres para el join. Un nombre único de join previene que una join posterior anule una join existente, le permite borrar la join selectivamente y sirve como un prefijo para Los nombres de campo duplicados en una join recurrente.

END

Se necesita para terminar el comando JOIN si es más de una línea de largo.



x
Sintaxis: Cómo Generar una join dimensional
JOIN field_1 [AND field_2 ...] IN sfile [TAG tag_1]
TO ALL dim_1 [AND dim_2 ...] IN tfile [TAG tag_2] [AS joinname]
[END]

donde:

field_1, field_2

Son los campos de join del archivo de origen.

sfile

Es el archivo máster de origen.

tag_1, tag_2

Son nombres de uno a ocho caracteres, que pueden servir como calificadores únicos para los nombres de los campos de una solicitud.

dim_1, dim_2

Son las dimensiones de tfile.

tfile

Es el archivo máster objetivo.

joinname

Es un nombre de uno a ocho caracteres para el join. Un nombre único de join previene que una join posterior anule una join existente, le permite borrar la join selectivamente y sirve como un prefijo para Los nombres de campo duplicados en una join recurrente.

END

Se necesita para terminar el comando JOIN si es más de una línea de largo.



x
Referencia: Directrices para elegir un campo de origen (sólo joins dimensionales)

Principio de página

x
Los valores de codificación de un índice multidimensional

Cómo:

Referencia:

WebFOCUS codifica los valores indexados, cada vez que un campo o dimensión de un MDI presente un atributo MAXVALUES especificado o pertenezca a una relación principal-secundario. Los valores codificados se almacenan en el archivo MDI a la hora de reconstrucción y se pueden recuperar y descifrar de nuevo con una solicitud TABLE que especifica el comando MDIENCODING. El comando MDIENCODING permite que el usuario obtenga salida a partir del archivo MDI mismo, sin tener que leer el origen de datos.



x
Referencia: Normas para codificar un índice multidimensional

Los campos de una solicitud de TABLE que utilice MDIENCODING, deben seguir estas dos reglas:



x
Sintaxis: Cómo Recuperar el resultado desde un índice multidimensional
SET MDIENCODING = {ON|OFF}

donde:

ON

Permite la recuperación de resultado desde el archivo MDI sin leer los datos de origen.

OFF

Necesita el acceso del origen de datos para permitir la recuperación de valores del MDI.



x
Sintaxis: Cómo Codificar un índice multidimensional
TABLE FILE mastername.mdiname 
request 
ON TABLE SET MDIENCODING ON
END

donde:

mastername

Es el archivo máster.

mdiname

Es el nombre lógico del MDI.

request

Es la solicitud TABLE que descrifra el MDI.



Ejemplo: Codificación de un índice multidimensional

Los ejemplos que siguen muestran el código MDI correcto:

TABLE FILE COMPANY.I DATA1
PRINT CITY BY STATE
ON TABLE SET MDIENCODING ON
END
TABLE FILE COMPANY.I DATA1
COUNT CITY
IF STATE EQ NY
ON TABLE SET MDIENCODING ON
END
TABLE FILE COMPANY.I DATA1
PRINT CATEGORY
ON TABLE SET MDIENCODING ON
END

El ejemplo que siguen es incorrecto porque CATEGORY no pertenece a la jerarquía CITY-STATE.

TABLE FILE COMPANY.I DATA1
PRINT CITY BY STATE
IF STATE EQ NY
IF CATEGORY EQ RESTAURANT
ON TABLE SET MDIENCODING ON
END


Ejemplo: Uso de un índice multidimensional

La solicitud TABLE que sigue accede el origen de datos CAR. Utiliza el índice CARMDI para la recuperación, ya que se trata del único MDI descrito en el archivo máster:

TABLE FILE CAR
SUM RETAIL_COST DEALER_COST
BY BODYTYPE
-* WHERE Condition utilizing MDI fields:
WHERE (COUNTRY EQ 'JAPAN' OR 'ENGLAND')
AND (CAR EQ 'TOYOTA' OR 'JENSEN' OR 'TRIUMPH')
AND (MODEL EQ 'COROLLA 4 DOOR DIX AUTO'
OR 'INTERCEPTOR III' OR 'TR7')
END

Principio de página

x
División de un índice multidimensional

Si el origen de datos ha crecido debido a la suma de nuevas divisiones de datos y se necesita añadir estas divisiones al MDI, debe realizar los pasos que siguen:

  1. Actualice el archivo Access para que incluya las nuevas divisiones de datos.
  2. Confirme que su MDI está dividido. Recuerde que no se puede ejecutar la función ADD de la utilidad REBUILD en un MDI no dividido.
  3. Ejecute el REBUILD, MDINDEX y ADD en el MDI.


Ejemplo: Cómo añadir una división a un índice multidimensional

El siguiente FOCEXEC incluye comandos que añaden una división a un índice multidimensional, llamado CARMDI y definido en el origen de datos CAR:

REBUILD
MDINDEX
ADD
CAR
CARMDI
NO

Después de reconstruir el MDI para que incluya las nuevas divisiones de datos, cualquier consulta de recuperación que emplee el MDI, también utilizará las divisiones de datos añadidas recientemente, dentro de dicho MDI.


Principio de página

x
Solicitar el progreso de un índice multidimensional

Cómo:

Utilizar el comando SET MDIPROGRESS para ver mensajes sobre el progreso de su construcción MDI. Los mensajes muestran el número de registros de datos acumulados por cada n registros insertados en el MDI, durante su procesamiento.



x
Sintaxis: Cómo Solicitar el progreso de un índice multidimensional
SET MDIPROGRESS = {0|n}

donde:

n

Es un número completo superior a 1000, que muestra un mensaje de progreso por cada n registros acumulados durante la generación de MDI. 100,000 es el valor predeterminado.

0

Desactiva los mensajes de progreso.


Principio de página

x
Muestra de un mensaje de aviso

Cómo:

El comando SET MDICARDWARN muestra un mensaje de aviso cada vez que la cardinalidad de una dimensión excede un valor especificado, ofreciéndole la oportunidad de estudiar la compilación MDI. Cuando el número de valores iguales de una dimensión de datos alcanza un porcentaje determinado, se emite un mensaje de advertencia. Para que MDICARDWARN sea confiado, el origen de datos debe contener al menos 100,000 registros.

Nota: Además del mensaje de advertencia, se muestra un número entre corchetes. Este número es el menor número de valores iguales para la dimensión mencionada en el texto del mensaje de aviso.



x
Sintaxis: Cómo Mostrar un mensaje de aviso
SET MDICARDWARN = n

donde:

n

Es un valor de porcentaje del 0 al 50.


WebFOCUS