...
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.
Note
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.
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
Code Block |
---|
VentaNeta = (VentaBruta - Descuento)
{code}
|
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:
...
Code Block |
---|
Comision = (TipoDeCliente == "Cuentas Grandes")
? (VentaBruta * 0.05)
: (VentaBruta * 0.10)
{code}
|
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
...
Code Block |
---|
Año = Año(Fecha)
Mes = NombreDelMes(Fecha)
{code}
|
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:
Code Block |
---|
ProductoDesc = Concatenar(CodProducto, " - ", EtiquetaProducto)
{code}
h4. 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
{code}
|
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
Code Block |
---|
GeneroDesc = (Genero == "M") ? "Masculino" : "Femenino"
{code}
----
{scrollbar}
{children} |
...
Child pages (Children Display) |
---|