Además de las fuentes de datos de texto, SQL, XML y web services, es posible definir campos virtuales.
Los campos virtuales se definen en el Panel de propiedades cuando esta elegido el nodo Fuentes en el Árbol de Diseño.
Como su nombre lo indica los campos virtuales pueden ser utilizados en los modelos como cualquier otro campo, aunque no se corresponden con campos físicos de ninguna de las fuentes de datos.
Ejemplos de utilización de campos virtuales son:
- Obtener medidas que no se encuentran en las fuentes
- Incluir cálculos complejos
- Crear niveles para las jerarquías y etiquetas para los valores
Los campos virtuales se calculan para todos los registros provenientes de fuentes de datos durante la creación del datamart. Una vez que los cálculos están completos, el campo virtual está disponible y no hay ninguna distinción entre éste y un campo físico.
Estos campos se definen con expresiones que pueden incluir:
- Campos de las fuentes de datos
- Campos de las tablas locales
- Operadores y funciones especificados
Es posible definir los campos virtuales con alguno de los siguientes tipos de datos:
- Integer
- Double
- String
- Date
Nota
Es importante tener en cuenta que no es posible usar un campo virtual en la expresión de otro campo virtual.
Los campos virtuales no están relacionados con una fuente de datos específica, pero pueden usarse con todas las fuentes de datos. Esto permite la definición de campos virtuales disponibles para más de una fuente.
Para determinar a cuáles fuentes de datos del modelo se agregarán campos virtuales, la lista completa de campos virtuales se verifica en todas las fuentes durante el proceso de construcción.
La expresión que define cada campo se analiza y si todos los campos a los que se hace referencia están disponibles en la fuente, el campo virtual se agrega a los registros obtenidos.
Si define un campo virtual con una expresión constante, este se agrega a todas las fuentes del modelo.
Si define un campo virtual,Campo_2 = Campo_1*0.10, luego el Campo_2 se agrega a los registros de todas las fuentes que incluyen un campo Campo_1. Si alguna de las fuentes con Campo_1 ya contiene un campo físico llamado Campo_2, el campo virtual Campo_2 no lo sobrescribe ya que los campos físicos tienen mayor prioridad.
Definiendo Campos Virtuales
Use el comando Agregar en el panel de propiedades de Fuentes para definir un campo virtual.
Para definir un campo virtual:
- Seleccionar la rama Fuentes en el Árbol de Diseño. El panel de propiedades se muestra con la página Campos Virtuales.
- Presionar el botón Nuevo Campo. Un nuevo campo se inserta al final de la lista de campos virtuales.
- Se puede editar el nombre del campo para cambiarlo con doble clic sobre el mismo.
- Hacer doble clic en el campo Definición.
- Ingresar la expresión que define el campo. Si se desea se puede invocar el dialogo de ayuda para ingresar la expresión por medio del botón .
- Hacer clic en el campo Tipo. Aparece una lista de los tipos disponibles.
- Seleccionar un tipo de la lista.
- Para continuar agregando campos virtuales, repetir los pasos 2 al 8.
Cuando construya la expresión, puede revisar los Operadores y las Funciones para la tabla de Expresiones.
Ejemplos de Uso de Campos Virtuales
Los siguientes son ejemplos de uso de campos virtuales. Representan sólo una muestra de las aplicaciones prácticas de esta funcionalidad.
Ejemplo I
Supongamos una fuente de datos contiene los siguientes campos físicos:
- VentaBruta
- Descuento
Es posible definir un campo virtual como
VentaNeta = (VentaBruta - Descuento) |
Luego, el campo virtual VentaNeta puede usarse en la definición de una nueva Medida en el modelo.
Ejemplo II
Supongamos que una fuente de datos contiene registros con la siguiente estructura:
(Fecha, Producto, TipoDeCliente, VentaBruta) |
donde el campo TipoDeCliente toma los siguientes valores:
- Cuentas grandes
- Cuentas medianas
- Cuentas pequeñas
Es posible definir un campo virtual que permita al usuario definir una medida llamada Comisión en el modelo:
Comision = (TipoDeCliente == "Cuentas Grandes") |
De esta forma creamos un campo que asigna una comisión de 5% para los clientes catalogados como "Cuentas Grandes" y una comisión de 10% para el resto de los clientes.
Ejemplo III
Los dos ejemplos previos están orientados hacia los cálculos de campos virtuales para usar en la definición de Medidas en el modelo. También se pueden definir campos virtuales que se usen posteriormente en la construcción de dimensiones.
La dimensión Fecha incluida en el O3 Designer permite la generación de jerarquías de tipo Año, Trimestre, Mes, Semana y Día. A continuación se describe la capacidad de definir jerarquías para las fechas que manejan otros tipos de jerarquías usando campos virtuales.
Supongamos que una fuente de datos contiene registros con la siguiente estructura:
(Fecha, Producto, TipoDeCliente, Cantidad) |
donde el campo TipoDeCliente toma los siguientes valores:
- Cuentas grandes
- Cuentas medianas
- Cuentas pequeñas
Es posible definir los siguientes campos virtuales
Año = Año(Fecha) |
Luego se puede crear una dimensión "Meses" con la siguiente jerarquía:
- Mes
- Año
Donde a cada uno de estos niveles se les definiría como clave los campos "Mes" y "Año" respectivamente.
Notar como el orden de los niveles es exactamente el opuesto al que se definiría para dimensiones de tipo Fecha.
De esta forma es posible comparar las cantidades vendidas por mes en los diferentes años. Esto no es posible con las dimensiones de tipo Fecha.
Ejemplo IV
También es posible usar los campos virtuales como un mecanismo para crear etiquetas de más de un campo básico para el usuario final del O3 Browser.
Supongamos que una fuente de datos contiene registros con la siguiente estructura:
(Fecha, CodProducto, EtiquetaProducto, Cliente, Cantidad) |
Es posible definir una descripción para el producto que incluya su código y una etiqueta con un campo virtual como:
ProductoDesc = Concatenar(CodProducto, " - ", EtiquetaProducto) |
Ejemplo V
Otro ejemplo típico de uso de campos virtuales es para generar etiquetas que no están almacenadas en ninguna fuente de datos.
Supongamos que existe una fuente que define el campo "Género" que puede tomar los valores "F" o "M" para el caso femenino y masculino respectivamente.
Si se generara un datamart directamente sobre este campo, los elementos de la dimensión "Género" serían F y M. Para lograr un cubo más amigable sería preferible mostrar las etiquetas "Femenino" y "Masculino" respectivamente.
Esto es posible creando el siguiente campo virtual
GeneroDesc = (Genero == "M") ? "Masculino" : "Femenino" |