Cómo describir un origen de datos FOCUS dividido

En esta sección:

Los orígenes de datos de FOCUS pueden incluir hasta 1022 archivos físicos. La división horizontal es una parte de uno o varios segmentos de la totalidad de la estructura del origen de datos. Observe, sin embargo, que el número de archivos físicos, asociado a un origen de datos de FOCUS, es la suma de sus divisiones y archivos LOCATION. La suma debe ser inferior o igual a 1022. A lo largo del tiempo, según va aumentando el tamaño de los orígenes de datos de FOCUS, puede introducir nuevas divisiones de acorde a los requisitos de la aplicación.


Principio de página

x
División inteligente

El origen de datos de FOCUS es compatible con la división inteligente, donde cada división vertical contiene la totalidad de la estructura del origen de datos para valores de datos específicos o para un rango de valores. La división inteligente no sólo permite separar los datos en 1022 archivos diferentes, sino que también permite crear un archivo de acceso, con descripciones de los valores de datos reales basadas en criterios WHERE. Al procesar una solicitud de informe, los criterios de selección de la solicitud se comparan con los criterios de WHERE, en el archivo de acceso, para determinar las divisiones necesarias para la recuperación.

Para seleccionar las aplicaciones que mejor puedan aprovechar la división, busque las que empleen los comandos USE para concatenar orígenes de datos, o busque datos que se presten a la separación en base a valores o rangos de valores, como los datos almacenados por mes o departamento. La división inteligente funciona a modo de un comando USE inteligente. Examina el archivo de acceso al procesar una solicitud de informe, para determinar las divisiones que va a leer, mientras que el comando USE lee todos los archivos de la lista. Esta inteligencia reduce el I/O y mejora el rendimiento.

Para aprovechar la característica de división, debe:

La concatenación de múltiples divisiones sólo funciona para la generación de informes. Debe cargar o reconstruir cada división física por separado. Puede crear un archivo máster independiente para hacer referencia a cada división en el procedimiento de carga, o puede utilizar el archivo máster individual, creado para la generación de informes, en base al origen de datos dividido, si:

Nota: Las solicitudes de informes leen automáticamente todas las divisiones necesarias, sin la intervención del usuario.


Principio de página

x
Cómo especificar un archivo de acceso en un archivo máster FOCUS

Cómo:

Referencia:

Para aprovechar la característica de división, modifique el archivo máster y añada el atributo ACCESSFILE:

El nombre del archivo de acceso debe coincidir con el del archivo máster y debe especificarse con el ACCESS=attribute en el archivo máster.



x
Sintaxis: Cómo Especificar un archivo de acceso para un origen de datos FOCUS
FILENAME=filename, SUFFIX=FOC, ACCESS[FILE]=accessfile,
.
.
.

donde:

filename

Es el nombre del archivo del origen de datos dividido.

accessfile

Es el nombre del archivo de acceso. Debe ser el mismo que el del archivo máster.



Ejemplo: Archivo máster para el origen de datos dividido VIDEOTR2
FILENAME=VIDEOTR2,  SUFFIX=FOC,
 ACCESS=VIDEOACX,  $
  SEGNAME=CUST,       SEGTYPE=S1
   FIELDNAME=CUSTID,     ALIAS=CIN,         FORMAT=A4,          $
   FIELDNAME=LASTNAME,   ALIAS=LN,          FORMAT=A15,         $
   FIELDNAME=FIRSTNAME,  ALIAS=FN,          FORMAT=A10,         $
   FIELDNAME=EXPDATE,    ALIAS=EXDAT,       FORMAT=YMD,         $
   FIELDNAME=PHONE,      ALIAS=TEL,         FORMAT=A10,         $
   FIELDNAME=STREET,     ALIAS=STR,         FORMAT=A20,         $
   FIELDNAME=CITY,       ALIAS=CITY,        FORMAT=A20,         $
   FIELDNAME=STATE,      ALIAS=PROV,        FORMAT=A4,          $
   FIELDNAME=ZIP,        ALIAS=POSTAL_CODE, FORMAT=A9,          $
  SEGNAME=TRANSDAT, SEGTYPE=SH1,  PARENT=CUST
   FIELDNAME=TRANSDATE,  ALIAS=OUTDATE,     FORMAT=HYYMDI,      $
  SEGNAME=SALES,    SEGTYPE=S2,   PARENT=TRANSDAT
   FIELDNAME=TRANSCODE,  ALIAS=TCOD,        FORMAT=I3,          $
   FIELDNAME=QUANTITY,   ALIAS=NO,          FORMAT=I3S,         $
   FIELDNAME=TRANSTOT,   ALIAS=TTOT,        FORMAT=F7.2S,       $
  SEGNAME=RENTALS,  SEGTYPE=S2,   PARENT=TRANSDAT
   FIELDNAME=MOVIECODE,  ALIAS=MCOD,        FORMAT=A6, INDEX=I, $
   FIELDNAME=COPY,       ALIAS=COPY,        FORMAT=I2,          $
   FIELDNAME=RETURNDATE, ALIAS=INDATE,      FORMAT=YMD,         $
   FIELDNAME=FEE,        ALIAS=FEE,         FORMAT=F5.2S,       $
 DEFINE DATE/I4 = HPART(TRANSDATE, 'YEAR', 'I4');


x
Referencia: Cómo usar un origen de datos dividido

El siguiente ejemplo explica cómo usar un origen de datos dividido de forma inteligente. El archivo de acceso del origen de datos VIDEOTR2 describe tres divisiones, en base a DATE:

TABLE FILE VIDEOTR2
PRINT LASTNAME FIRSTNAME DATE
WHERE DATE FROM 1996 TO 1997
END

La salida es:

LASTNAME         FIRSTNAME   DATE
--------         ---------   ----
HANDLER          EVAN        1996
JOSEPH           JAMES       1997
HARRIS           JESSICA     1997
HARRIS           JESSICA     1996
MCMAHON          JOHN        1996
WU               MARTHA      1997
CHANG            ROBERT      1996

No hay nada en la solicitud ni en la salida que indique que se está usando un origen de datos dividido. Aunque sólo se recupera la segunda división, lo que ayuda a reducir el I/O y mejorar el rendimiento.



x
Referencia: Notas de uso de orígenes de datos FOCUS divididos

Principio de página

x
Atributos de archivo de acceso FOCUS

Cómo:

Referencia:

Cada solicitud incluye el nombre del archivo máster. Se lee el archivo máster y sus declaraciones se utilizan para acceder al origen de datos. Si el archivo máster contiene un atributo ACCESS=, se lee el archivo de acceso, que se usa para localizar los orígenes de datos correctos. El archivo de acceso debe tener el mismo nombre que el archivo máster. Si no existe un archivo de acceso con el mismo nombre que el atributo ACCESS=, en el archivo máster, la solicitud se procesa con el archivo máster, únicamente.



x
Referencia: Atributos de archivo de acceso para un archivo de acceso FOCUS

Cada archivo de acceso de FOCUS describe los archivos y MDIs de un archivo máster, que debe tener el mismo nombre que el archivo de acceso.

Todos los emparejamientos de atributos y valores están separados por un signo de igualdad (=), mientras que los de las declaraciones se separan mediante comas (,). Cada declaración termina con una coma y el símbolo de dólar (,$).

  1. Cada archivo de acceso comienza por una declaración que nombra a su archivo máster correspondiente.
  2. A continuación viene una declaración de DATA, que describe la ubicación del archivo físico. Si el archivo está dividido, incluye varias declaraciones de DATA.

    Si el archivo se ha dividido de forma inteligente para que la expresión indique qué valores de datos residen en cada partición, la declaración de DATA incluirá una frase WHERE, que especifica su expresión.

  3. Si el origen de datos tiene segmentos LOCATION, la declaración de LOCATION nombra un segmento de ubicación. Su declaración de DATA correspondiente apunta al archivo LOCATION físico.
  4. Si el origen de datos tiene un MDI, el archivo de acceso también tendrá un MDI, que nombra al MDI y a su segmento de destino, seguidos de las declaraciones que nombran las dimensiones del MDI, y de la declaración MDIDATA, que apunta hacia el archivo MDI físico. Si el MDI está dividido, habrá varias declaraciones de MDIDATA para el MDI.


x
Sintaxis: Cómo Crear un archivo de acceso FOCUS

Declaración del archivo máster:

MASTER=mastername,$

donde:

mastername

Indica el nombre del archivo máster al que está asociado este archivo de acceso. Es el mismo valor incluido en el atributo ACCESS=filename del archivo máster, que se usa para indicar la existencia y el nombre del archivo de acceso.

DATA=file_specification, 
   [WHERE= expression; ,]$
[DATA=file_specification, 
   [WHERE= expression; ,]$ ...]

donde:

file_specification

Apunta a la ubicación del archivo. Es la especificación completa de un archivo. Puede haber un máximo de 1022 declaraciones (divisiones) de DATA en un solo archivo de acceso. La cláusula WHERE es la base de la característica de división inteligente. La expresión termina con un punto y coma, mientras que la declaración completa lo hace con el signo coma/dólar. Se admite el uso de las siguientes expresiones WHERE:

WHERE = field  operator value1 [ OR  value2...]; ,$
WHERE = field FROM value1 TO value2 [AND FROM value3 TO value4];,$

Puede combinar las expresiones con el operador AND.

Declaraciones de ubicación de archivo:

LOCATION=location_segment_name,
  DATA=location_segment_file_specification,$

donde:

location_segment_name

Es el nombre del segmento almacenado en el archivo de ubicación.

location_segment_file_specification

Es la especificación completa del archivo físico en que se encuentra situado el segmento.

Declaraciones de MDI:

MDI=mdiname, TARGET_OF = segname,$
   DIM = [filename.]fieldname [, MAXVALUES = n] [, WITHIN = dimname1],$
   [DIM = [filename.]fieldname [, MAXVALUES = n] [, WITHIN = dimname1] ,$ ...]
 MDIDATA=mdi_file_specification,$
 [MDIDATA=mdi_file_specification,$ ...]

donde:

mdiname

Es el nombre del MDI.

segname

Es el nombre del segmento de destino.

filename

Es el nombre del archivo en que reside una dimensión de MDI.

fieldname

Es el nombre de un campo dimensional del MDI.

n

Es el número de valores distintos en la dimensión. Al crearse el MDI el valor real de la dimensión queda convertido en un número entero, con una longitud de 1, 2 o 4 bytes, que se almacena en la hoja del índice.

mdi_file_specification

Es la especificación completamente cualificada del archivo MDI físico. Si el MDI está dividido, se trata de la especificación de una división del MDI. Un MDI puede tener hasta 250 declaraciones de MDIDATA (divisiones). Un archivo de acceso puede tener un número ilimitado de MDIs.

dimname

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



Ejemplo: Archivo de acceso para el origen de datos VIDEOTR2

VIDEOTR2 es un origen de datos de FOCUS dividido de forma inteligente. El archivo máster tiene un atributo ACCESS=VIDEOTR2:

FILENAME=VIDEOTR2,  SUFFIX=FOC,    ACCESS=VIDEOTR2             
SEGNAME=CUST,       SEGTYPE=S1                                 
 FIELDNAME=CUSTID,       ALIAS=CIN,          FORMAT=A4,       $
 FIELDNAME=LASTNAME,     ALIAS=LN,           FORMAT=A15,      $
 FIELDNAME=FIRSTNAME,    ALIAS=FN,           FORMAT=A10,      $
 FIELDNAME=EXPDATE,      ALIAS=EXDAT,        FORMAT=YMD,      $
 FIELDNAME=PHONE,        ALIAS=TEL,          FORMAT=A10,      $
 FIELDNAME=STREET,       ALIAS=STR,          FORMAT=A20,      $
 FIELDNAME=CITY,         ALIAS=CITY,         FORMAT=A20,      $
 FIELDNAME=STATE,        ALIAS=PROV,         FORMAT=A4,       $
 FIELDNAME=ZIP,          ALIAS=POSTAL_CODE,  FORMAT=A9,       $
 FIELDNAME=EMAIL,        ALIAS=EMAIL,        FORMAT=A18,      $
SEGNAME=TRANSDAT, SEGTYPE=SH1,  PARENT=CUST                    
 FIELDNAME=TRANSDATE,    ALIAS=OUTDATE,   FORMAT=HYYMDI,       
   MISSING=ON, $                                               
SEGNAME=SALES,    SEGTYPE=S2,   PARENT=TRANSDAT                
 FIELDNAME=TRANSCODE,    ALIAS=TCOD,    FORMAT=I3,            $
 FIELDNAME=QUANTITY,     ALIAS=NO,      FORMAT=I3S,           $
 FIELDNAME=TRANSTOT,     ALIAS=TTOT,    FORMAT=F7.2S,         $
SEGNAME=RENTALS,  SEGTYPE=S2,   PARENT=TRANSDAT                
 FIELDNAME=MOVIECODE,    ALIAS=MCOD,      FORMAT=A6, INDEX=I, $
 FIELDNAME=COPY,         ALIAS=COPY,      FORMAT=I2,          $
 FIELDNAME=RETURNDATE,   ALIAS=INDATE,    FORMAT=YMD,         $
 FIELDNAME=FEE,          ALIAS=FEE,       FORMAT=F5.2S,       $
 DEFINE DATE/I4 = HPART(TRANSDATE, 'YEAR', 'I4');              

El siguiente ejemplo muestra el archivo de acceso, llamado VIDEOTR2, en z/OS:

MASTER=VIDEOTR2 ,$            
  DATA=USER1.VIDPART1.FOCUS,    
    WHERE=DATE EQ 1991;,$           
                                  
  DATA=USER1.VIDPART2.FOCUS,    
    WHERE=DATE FROM 1996 TO 1998; ,$
                                  
  DATA=USER1.VIDPART3.FOCUS,    
   WHERE=DATE FROM 1999 TO 2000;,$ 

El siguiente ejemplo muestra el archivo de acceso, llamado VIDEOTR2, en UNIX:

MASTER=VIDEOTR2 ,$            
  DATA=/user1/vidpart1.foc,    
    WHERE=DATE EQ 1991;,$           
                                  
  DATA=/user1/vidpart2.foc,    
    WHERE=DATE FROM 1996 TO 1998; ,$
                                  
  DATA=/user1/vidpart3.foc,    
   WHERE=DATE FROM 1999 TO 2000;,$ 

El siguiente ejemplo muestra el archivo de acceso, llamado VIDEOTR2, en Windows:

MASTER=VIDEOTR2 ,$            
  DATA=c:\user1\vidpart1.foc,    
    WHERE=DATE EQ 1991;,$           
                                  
  DATA=c:\user1\vidpart2.foc,    
    WHERE=DATE FROM 1996 TO 1998; ,$
                                  
  DATA=c:\user1\vidpart3.foc,    
   WHERE=DATE FROM 1999 TO 2000;,$ 

WebFOCUS