You are on page 1of 271

ShareVideos

SQL Server 2008 R2para una solución de


Business Intelligence
Este libro sobre SQL Server 2008 R2 se dirige a todas aquellas personas que deseen aplicar
las técnicas de informática decisional (o BI, Business Intelligence) con ayuda de las
herramientas ofrecidas por la suite Microsoft SQL Server 2008 R2: la base de datos SQL
relacional, ETL Integration Services, servidor OLAP Analysis Services e informes
basados en Reporting Services. Los requisitos para sacar el máximo partido del libro
incluyen un sólido conocimiento de la base de datos relacional SQL Server y su
administración.
El libro presenta los principios universales del BI, y cada pieza de la suite SQL Server
desde la óptica de proporcionar al lector las claves para crear la solución más adaptada
sus necesidades reales. En efecto, la riqueza funcional que proporciona la oferta de
Microsoft permite responder a una arquitectura clásica (ETL, DataWarehouse relacional,
cubo OLAP…) y a otras menos ambiciosas.
La primera parte del libro presenta el BI, sus objetivos, los conceptos principales y las
soluciones que aporta Microsoft como fabricante de software. La segunda parte del libro
detalla la implementación y los fundamentos de cada pieza e introduce aquellas
funcionalidades avanzadas que permiten abordar la problemática de la explotación de
un entorno de producción. El libro termina con un capítulo acerca de la gran novedad de
SQL Server 2008 R2: PowerPivot y el BI en autoservicio.
Al terminar de leer este libro, será capaz de implementar y desplegar una solución de BI a
partir de los cuatro productos que conforman la suite SQL Server, definir su arquitectura y
desarrollar el primer proyecto robusto para desplegar en producción en la empresa.
El código fuente de los ejemplos del libro está disponible para su descarga en el sitio Web
www.ediciones-eni.com.

Los capítulos del libro:


Prólogo – Introducción al Business Intelligence – Teorías de Business Intelligence -
Business Intelligence de Microsoft – Modelizar el Data Mart – Crear el cubo – Crear
informes OLAP – Alimentar el Data Mart – Sacar provecho al motor SQL – Ultimar la base
de datos SSAS – Explotación de SSRS – SSIS Avanzado – PowerPivot
Thomas GAUCHET
Thomas GAUCHET es arquitecto en BI de Microsoft, independiente, certificado en
MCITP Business Intelligence Developer 2008. Tras varios años, su carrera profesional le
conduce a participar en proyectos decisionales de naturaleza variada (diseño de la
arquitectura funcional, creación de un Data Warehouse, responsable de los proyectos de
desarrollo asociados…). A través de este libro comparte con los lectores su valiosa
experiencia en la materia.

¿A quién se dirige este libro?

ShareVideos
Este libro se dirige a aquellas personas que quieran aprender cómo poner en marcha
técnicas de informática decisional o de BI (Business Intelligence) con la ayuda de las
herramientas de la suite de Microsoft SQL Server 2008 R2: base de datos SQL relacional,
ETL Integration Services, servidor OLAP Analysis Services (fuera del data-mining) e
informes basados en Reporting Services.

Requisitos previos
Los requisitos previos para abordar este libro incluyen un sólido conocimiento de la base de
datos relacional SQL Server y su administración.

Para aplicar todo lo que se expone en este libro y ponerlo en práctica, deberá instalar SQL
Server 2008 R2 (véase http://technet.microsoft.com/es-es/evalcenter/ee315247.aspx), con
todos sus componentes y los ejemplos colectivos que acompañan esta edición (véase el
capítulo Business Intelligence de Microsoft, sección Primeros pasos con SQL Server - El
ejemplo Adventure Works).

Objetivos de este libro


Este libro tiene como objetivo guiar a expertos en SQL en su camino y experiencia en
Business Intelligence con SQL Server. En primer lugar se presentan los principios
universales de BI, y a continuación se profundiza en cada bloque de la suite SQL Server
bajo la óptica de proporcionar al lector las claves que le permitan crear la solución más
adaptada a sus necesidades. Mucha gente considera que la solución de BI es un almacén de
datos relacionales alimentado por un flujo de integración, un cubo y aplicaciones de
presentación de datos. Este libro intenta presentar la riqueza funcional de la oferta de
Microsoft y mostrar cómo permite responder a esta arquitectura clásica pero también a
otras menos ambiciosas.

Cada bloque de la suite SQL Server podría fácilmente ser objeto de un libro entero a parte,
aunque sería un compendio de artículos y manuales disponibles en Internet. Esta obra trata
de hacer una síntesis pragmática de lo que un profesional del desarrollo debe conocer para
lanzarse en un proyecto de BI con Microsoft, proporcionando no obstante las referencias de
aquellas páginas web que permitan profundizar ciertos aspectos.

La primera parte del libro presenta el BI, sus objetivos, los conceptos principales y las
soluciones aportadas por el fabricante de software Microsoft. En la segunda parte se detalla
la implementación y los fundamentos de cada uno de los bloques de la suite SQL Server
2008 R2. Por último, la tercera parte vuelve sobre cada bloque para explicar las
funcionalidades avanzadas y abordar las problemáticas de la explotación en el entorno de
producción. El libro finaliza con un capítulo sobre la gran novedad en SQL Server 2008
R2: power pivot y el BI en autoservicio.

ShareVideos
Al finalizar esta obra usted será capaz de implementar y desplegar una solución de BI a
partir de los cuatro productos de SQL Server, definir su arquitectura y desarrollar un primer
proyecto robusto para desplegarlo en producción en un entorno empresarial.

Notación
A lo largo de la obra se adopta la siguiente notación para designar los bloques de la suite
SQL Server:

 MSSQL para el SGBDR (Sistema de Gestión de Bases de Datos Relacionales) SQL


Server.
 SSAS para SQL Server Analysis Services.
 SSRS para SQL Server Reporting Services.
 SSIS para SQL Server Integration Services.

Del transaccional al decisional


Desde hace aproximadamente medio siglo la informática acapara nuestras actividades y nos
ayuda a mejorar nuestra productividad. Con la aparición de la informática de gestión los
años 60 vieron nacer las primeras bases de datos. Las empresas tratan de comprender cómo
funciona nuestra sociedad y todo lo que la informática le puede aportar. La introducción de
registros, de archivos o de transacciones en la memoria del ordenador permite a la empresa
funcionar más rápidamente, gestionar mayor volumen de actividad y aumentar sus
beneficios. En 1970 el célebre Edgar Frank Codd, investigador en IBM, enuncia 8 formas
normales para diseñar un sistema transaccional robusto. Acaba de inventar el SGBDR
(Sistema de Gestión de Bases de Datos Relacionales, RDBMS en inglés) que rápidamente
se convertirá en la pieza indispensable para el OLTP (On Line Transaction Processing, o en
castellano: procesamiento de transacciones en línea). Todas las operaciones de gestión de la
empresa pueden modelizarse como transacciones: cobrar un artículo en una tienda, añadir
un cliente a un archivo, realizar un inventario, registrar las vacaciones en un salario... Una
transacción es una operación atómica: forma un conjunto indivisible. Una transacción es
una operación coherente: modifica los objetos de la base de datos de tal forma que queden
en un estado funcionalmente coherente a su fin. Una transacción se aisla de las demás
transacciones: ni las ve ni es vista por ellas mientras está en curso. Por último, una
transacción es una operación durable: el estado del sistema se graba a su fin. Este modelo
gestiona de forma muy eficaz los accesos concurrentes y la integridad de datos de la
empresa. Sus diferentes implementaciones comerciales (IBM, Oracle...) rápidamente
conocerán un gran éxito que el desarrollo de los microprocesadores en los años 70, y
después de los micro-ordenadores en los años 80, reforzará.

Literalmente se puede decir que los sistemas OLTP y los SGBDR han invadido la empresa
moderna, que ya no puede funcionar sin un ERP (Enterprise Resource Planning o sistema
de Planificación de Recursos Empresariales), sin un CRM (Customer Relationship
Management o Gestor de la Relación con los Clientes), sin gestión de stocks, contabilidad,
cajas electrónicas... Todas estas aplicaciones contienen bases de datos transaccionales:

ShareVideos
millones de registros, miles de transacciones, en miles de tablas a veces relacionadas las
unas con las otras mediante un esquema complejo, normalizado, que responde
perfectamente a la necesidad de gestión de la actividad, pero que es opaco para los gestores
de la empresa.

¿Es a partir de esta mina de información como tratamos de aumentar nuestro conocimiento
sobre el funcionamiento de la empresa? ¿Sobre las acciones que son más rentables? ¿Sobre
los productos en crecimiento? ¿Sobre los gustos de nuestros clientes? ¿Sobre los niveles de
producción? ¿Sobre los niveles de stock? La clave es aumentar el conocimiento para
mejorar los procesos de toma de decisiones: decidir mejor y más rápido.

Los servicios informáticos tienden a responder a estas preguntas programando algoritmos,


consultas que van a leer de las bases de datos transaccionales. Pero obtener información
requiere recorrer numerosas tablas, siguiendo sus complejas relaciones, y esperar a que
finalicen las transacciones en curso durante las cuales la información no puede explotarse
por ser incoherente... La lectura misma tiene como efecto un bloqueo de la actividad de
gestión puesto que lo que va a leerse debe ser coherente. Los datos son volátiles, no se
conservan en línea sino en sistemas de copia de seguridad, cintas archivadas en lugar
seguro. Por último, cada lógica posee su esquema de base de datos, su ficha de producto, su
ficha de cliente. ¿Cómo cotejar toda esta información?

En estas condiciones, responder a las preguntas que se plantean los directivos de la empresa
puede ser un verdadero rompecabezas.

El decisional, o la informática decisional, es el conjunto de respuestas a esta necesidad.


Comprende diversas técnicas que permiten a una organización disponer de la información
justo a tiempo para tomar decisiones y medir los resultados.

Su principio es la modelización OLAP (On Line Analytical Processing, en castellano:


procesamiento analítico en línea), formalizado nuevamente por E. F. Codd a finales del año
1993. Su objetivo es proporcionar a los usuarios finales la información oculta en los
sistemas de información de la empresa, « ser capaz de distribuir los datos a los usuarios sin
obligarles a conocer los lenguajes de programación y de consulta y sin que tengan que
programar sus hojas de cálculo ». Sus principios descansan sobre una revisión aplanada del
esquema normalizado, la desnormalización, creación de ejes de análisis simples y
orientados a su objetivo: las dimensiones.

El segundo principio es una distribución de la información fácilmente accesible a un


usuario no iniciado. Los datos se le proporcionan automáticamente o bien se acceden bajo
demanda. El análisis es y estático o y dinámico. Del mismo modo que el OLTP ha invadido
poco a poco nuestro universo, el usuario puede acceder fácilmente a la modelización
OLAP. Incluso realiza su aparición de manera progresiva en nuestro entorno cotidiano: los
clientes que han solicitado tal producto también han pedido este otro...

El tercer principio es el de conservar los datos producidos por las transacciones en una base
de datos aislada de los sistemas de producción: el almacén o depósito de datos. Permite
conservar un histórico mayor y fusionar en una misma entidad datos de sistemas diferentes.

ShareVideos
Constituye un bloque esencial para realizar todos los análisis deseados sin impactar ni verse
incomodado por las miles de transacciones que actúan sobre el núcleo de los sistemas de
gestión de la empresa. Por último, es la fuente única de información para los distintos
decisores en la empresa. Esto permite poner a todo el mundo de acuerdo sobre las cifras y
evitar que se lance un análisis cada vez que haya alguien a quien concierna el resultado.

Business Intelligence
Si bien la realidad es más compleja, en general la informática decisional se constituye en
dos partes:

 La preparación y el almacenamiento de los datos, siendo en su parte más habitual la


construcción y alimentación de un almacén de datos, el DW (Data Warehouse). Esta
actividad a menudo se conoce como Data Warehousing. Comprende la creación de
bases de datos normalizadas y desnormalizadas y la alimentación de estas bases de
datos mediante herramientas dedicadas: los ETL (Extract, Transform and Load, o en
castellano Extraer, Transformar y Cargar). Esta parte constituye el Back-End del
sistema decisional.

El objetivo es archivar en la misma entidad los datos del negocio provenientes de


las distintas cadenas transaccionales con una profundidad de histórico mayor que en
sus fuentes originales, limpiar estos datos de información inútil o incoherente,
identificar y crear los enlaces entre las distintas bases de datos usadas en la empresa
y proponer un bloque dedicado a las operaciones de análisis.

 La distribución de los datos a los usuarios de negocio. Este dominio se designa a


menudo con la expresión específica aplicaciones de BI (Business Intelligence), o
incluso BI de forma abreviada. Cubre la creación de los ejes de negocio, las
dimensiones, que servirán como ejes para el análisis, el tratamiento de los datos con
vistas a la creación de valor añadido y la puesta a disposición del usuario final de
los indicadores de negocio. Esta parte constituye el Front-End. La palabra clave es
Business (negocio): se trata de poner al alcance de los expertos de negocio toda la
información oculta en los sistemas informáticos.

El objetivo es proporcionar una información comprensible, orientada al negocio y


que pueda ser explotada por un público específico (de forma similar al parte
meteorológico en televisión), crear una fuente de datos única, oficial y segura de
resultados, disponer de los análisis en el momento en que van a ser utilizados y
hacerlos accesibles a un público de usuarios finales sin conocimientos informáticos
particulares.

Para construir una solución de BI no existe un método único y cada solución tiene sus
propias características. De este modo, según el caso la frontera entre el Back-End y el
Front-End puede variar.

No todos los Back-End descansan sobre un DW. Existen varios tipos de DW.

ShareVideos
A menudo los Front-End tienen portales Web a modo de punto de entrada, pero también
pueden tomar la forma de clientes pesados. Los informes pueden ser simples tablas o
gráficos pero también verdaderas aplicaciones que permitan al usuario simular previsiones
de venta, estudiar sus datos navegando dinámicamente sobre los distintos niveles de los ejes
de negocio o incluso cuadros de mando en tiempo real. Cada ves más los indicadores o los
mini informes proporcionados por las aplicaciones de BI se integran con las aplicaciones
transaccionales: sitios web comerciales, ERP, sistemas de gestión de stocks. Las
herramientas de ayuda a la decisión se distribuyen hacia todos los actores en la empresa,
hacia todos los operacionales.

Arquitecturas de los sistemas decisionales


Tras aquellas primeras consultas a las fuentes de datos OLTP consolidadas en una hoja de
cálculo se han desarrollado numerosos sistemas decisionales y éstos han tomado muchas
formas. Pero si la constitución de un DW (Data Warehouse) en una empresa se considera
como un must, esta solución a menudo está sobredimensionada.

1. Variedad de sistemas decisionales

La informática decisional tiene como objetivo poner aquella información de negocio oculta
en los sistemas operacionales al alcance de los decisores, siendo ellos mismos usuarios
operacionales. Cada empresa posee su propia experiencia de negocio, su propia
infraestructura operacional, su propia organización y sus propios objetivos. No existe una
receta milagrosa. El sistema decisional debe por ello adaptarse a las necesidades de los
usuarios.

Si el sistema operacional está lejos de sobrecargarse, y la estructura del almacenamiento de


los datos es conocida, crear una herramienta sencilla puede ser suficiente.

Si los clientes de esta herramienta realizan muchas consultas a la base de datos, se verá que
a menudo muchos de ellos piden la misma información en el momento, justo antes de una
reunión por ejemplo. En este caso publicar esta información en la intranet, o dejarla en su
bandeja de correo, permite disminuir el número de solicitudes.

Cuando las extracciones se hacen muy grandes o provocan una disminución en la actividad,
una simple réplica síncrona o asíncrona de la base de datos operacional puede servir de
fuente de datos para los análisis, suprimiendo esta sobrecarga. Y ciertas soluciones
prefieren replicar el esquema de datos OLTP en un esquema dedicado al reporting que se
mantiene actualizado automáticamente.

Si esta réplica no es óptima porque varias bases de datos puedan verse involucradas, es
posible plantear la puesta en marcha de un ODS (Operational Data Store). El ODS es una
base de datos donde se replican varias bases de datos operacionales. La réplica aporta un
valor añadido: permite identificar los enlaces entre las distintas fuentes, suprimir datos

ShareVideos
incoherentes... Resulta útil para el reporting operacional y sirve de fuente de datos para los
sistemas decisionales.

En el seno del ODS los datos son volátiles: tienen la misma profundidad de histórico que en
los sistemas réplica. Si este histórico no fuera suficiente a ojos de los decisores es posible
iniciar un proyecto de DW operacional. El almacén de datos operacional es muy similar al
del ODS, pero la profundidad del histórico es mucho mayor.

El DW operacional aisla a los sistemas origen del tratamiento analítico de los datos, aunque
del hecho de que su estructura sea próxima a la de los sistemas OLTP se deriva que no
exista un nivel mayor de complejidad en las respuestas que es capaz de dar.

Una capa de aplicativo, a menudo llamada universo, puede ser suficiente para enmascarar
esta complejidad a través de objetos de negocio familiares a los usuarios finales.

Pero para ciertos usuarios finales los volúmenes de datos a tratar son tales que una única
capa lógica de negocio no es suficiente. Por ello, es posible crear un DM (Data Mart), un
cubo o bien ambos.

El DM es un conjunto de tablas de información organizadas en una estructura que favorece


el reporting analítico y la lectura de información sobre un histórico mayor que el que se
conserva en producción. El DM está realmente orientado al usuario final y los datos y ejes
de análisis se preparan según sus necesidades.

Un cubo es algo muy próximo a un DM, pero contiene además datos que han sido
agregados previamente sobre los distintos niveles según los ejes de análisis. Estos
agregados, calculados previamente, permiten reducir considerablemente el tiempo de
respuesta en las peticiones de los usuarios. Existen varios tipos de agregado, siendo la suma
el más corriente de ellos. Todo dato que pueda sumarse sobre no importa qué eje de análisis
supondrá una gran ventaja por parte del cubo, pues donde antes se tenían millones de líneas
ahora se tiene un valor agregado.

El cubo puede construirse a partir de un DM o directamente a partir de otra fuente de


información.

La reunión en una misma base de datos de varios DM toma a menudo el nombre de DW


decisional (Data Warehouse decisional).

Por último, a la unión de varios cubos se la conoce a veces con el nombre de hipercubo.

Para llevar a buen término un proyecto de DM, de DW o de cubo es preciso pensar desde
su comienzo en cómo se va a distribuir la información analítica a los usuarios finales. La
interacción entre el Back-End y el Front-End es a menudo más importante de lo que se
había previsto. Es necesario definir distintas categorías de usuarios, definir sus perfiles, sus
necesidades y la herramienta que van a utilizar. Hay quienes querrán profundizar en la base
de datos decisional para descubrir modelos estadísticos (data mining), otros pedirán ver un

ShareVideos
gráfico en su smartphone, por no hablar de aquellos usuarios que querrán trabajar con las
cifras en su hoja de cálculo favorita... El sistema se apoyará en aplicaciones de Business
Intelligence (BI application) usadas para distribuir la información almacenada en el
sistema.

Las aplicaciones de BI son soluciones del mercado o bien desarrollos a medida. Pueden
tomar la forma de un portal web, de un cliente pesado, de un componente reutilizable en el
sistema de información de la empresa...

La informática decisional es por tanto muy variada y no resulta posible tratar aquí todos sus
aspectos. Nosotros vamos a desarrollar los puntos claves en este capítulo, de modo que el
lector pueda comprender bien los capítulos siguientes.

2. Data Mart y Data Warehouse

Una de las primeras actividades cuando se lanza un proyecto de BI consiste en clarificar el


sentido que tienen los términos DM (Data Mart) y DW (Data Warehouse). La definición de
estas dos expresiones siempre da lugar a incesantes debates.

Data Mart

Un DM es un conjunto de datos aislado de los sistemas operacionales, dedicado a la ayuda


en la toma de decisiones, cuyo perímetro funcional está generalmente focalizado sobre un
punto concreto de la actividad de la empresa. Los datos del DM se expresan, entre otros, en
base a un eje temporal y con una profundidad definida.

Por ejemplo, la expresión de las ventas a mayoristas en Europa por día durante los tres
últimos años es un DM. Interesará todavía más a los usuarios si contiene información sobre
los productos vendidos, las promociones relacionadas, las regiones de los clientes... Otro
ejemplo de DM es la cantidad de SMS escritos en el último mes hora a hora.

Como el DM se crea para que pueda leerse desde herramientas especializadas de decisión,
los datos y su estructura están adaptados de alguna manera a esta lectura. Mientras que los
creadores del sistema OLTP normalizan las tablas, los del sistema decisional efectúan la
operación inversa: la desnormalización.

El DM puede consolidar varias fuentes de datos OLTP. Para ello, los datos preferiblemente
se limpian y toman un nuevo enfoque.

Data Warehouse

Si generalmente existe un consenso en torno al DM, las cosas se complican cuando


hablamos de DW. Existen DW operacionales y DW decisionales. El perímetro de un DW
se define según dos categorías: el DW de empresa y el DW de aplicación...

ShareVideos
El DW operacional está normalizado lógicamente igual que las aplicaciones origen y
conserva un histórico de datos. Contiene información preciosa como fuente de construcción
de los DM.

El DW decisional está desnormalizado. Es un conjunto coherente de DM.

El DW de empresa tiene como perímetro el conjunto de operaciones de la empresa:


actividades comerciales, recursos humanos, contabilidad, gestión del parque de
automóviles... La gestión de un DW de empresa no tiene fin, pues la empresa evoluciona.

El DW de aplicación tiene una única fuente de datos, por ejemplo un ERP. De forma más
genérica, numerosos DW poseen un perímetro funcional limitado a una aplicación, a una
actividad, a una entidad jurídica...

Peces y Ballenas

En el origen de esta confusión en los vocablos aparecen dos grandes maestros del BI con
teorías opuestas.

Para Bill Inmon, el DW consolida los datos detallados de toda la empresa. Los DM se
construyen a continuación según la demanda de los usuarios de negocio a partir de esta
fuente de datos única.

Para Ralph Kimball, el DW es el conjunto de DM; cada nuevo Data Mart llega para
enriquecer el DW.

Ambas escuelas jamás han encontrado un punto de encuentro sobre de la noción de DM.
Mientras que Kimball afirma que « the Data Warehouse is nothing more than the union of
all the Data Marts » (el DW no es sino la unión de todos los DM), Inmon le responde: «
You can catch all the minnows in the ocean and stack them together and they still do not
make a whale » (Se puede pescar todos los peces del océano y juntarlos, que jamás
formarán una ballena)...

Escoger uno u otro enfoque tiene consecuencias importantes para el proyecto.

El método Inmon precisa crear en primer lugar el famoso DW, y a continuación ir


entregando los DM. El principal inconveniente es que la creación del DW supone un
trabajo importante, y la entrega del primer DM se hará de esperar. La principal ventaja es
que una vez se ha finalizado la construcción del DW completo es posible construir
rápidamente cualquier DM que se desee, incluso si contiene requisitos que no se expresaron
durante el inicio del proyecto.

El enfoque Kimball permite reducir la duración global del proyecto decisional,


disminuyendo así su coste. Los usuarios ven llegar los primeros cuadros de mando más
rápidamente. Por el contrario, los datos no integrados en los DM no se almacenan en el
histórico.

ShareVideos
Por suerte, la suite de herramientas de SQL Server 2008 R2 se adaptan a ambas visiones.

Modelización OLAP
Existe no obstante consenso en torno al DM. El DM se construye desnormalizando los
datos OLTP para obtener una estructura legible próxima al negocio. Centrémonos en los
principios de la modelización OLAP.

1. Esquema en estrella y esquema en copo de nieve

El esquema de referencia para los DM es el modelo llamado en estrella.

El corazón del sistema es la tabla de hechos. Los hechos son las operaciones que se va a
analizar, que han sido registradas por las transacciones de los sistemas OLTP y que son
numerables, cuantificables numéricamente, o ambas. Cada registro de la tabla de hechos
representa un hecho.

La finalidad del DM consiste en permitir el análisis de los hechos a través de los ejes de
análisis, llamados dimensiones. En el esquema en estrella cada dimensión se reduce a una
tabla y cada registro de la tabla de hechos está ligada a cada dimensión.

Tomemos el ejemplo de los pedidos de un comercio. Por cada línea que representa un
pedido presente en el sistema OLTP es posible definir el cliente que ha hecho el pedido, la
fecha del pedido, el producto y el fabricante del producto. Y por cada línea se conocen la
cantidad y el importe. La tabla de hechos contiene seis datos: el cliente, la fecha, el
producto, el fabricante, la cantidad y el importe. La dimensión cliente contiene información
acerca del cliente útil para el análisis. Ocurre del mismo modo para las otras tres
dimensiones.

Esquema en estrella para los pedidos

La característica principal del esquema en estrella es el hecho de aplanar cada dimensión en


una tabla única como resultado de la desnormalización. En el sistema OLTP, cada
dimensión es objeto de multitud de tablas normalizadas. Por ejemplo el producto se
modela, como mínimo, con tres tablas.

Modelo de producto en la base de datos OLTP

Mientras que la modelización OLTP normalizada se concibe para la escritura, la


modelización en estrella se crea para la lectura. Solamente debe crearse y actualizarse el
DM. Cuando una categoría A de productos se desplaza a una nueva categoría en el sistema

ShareVideos
operacional, la actualización del esquema en estrella debe efectuarse para todos los
productos de la subcategoría A.

En el caso de un DM que se actualice de forma periódica, la desnormalización no debería


suponer un problema. No obstante, a menudo se prefiere un esquema semi-desnormalizado.
Un esquema de este tipo se conoce como esquema en copo de nieve.

Esquema en copo de nieve para los pedidos

La cantidad y el importe son las medidas de los hechos. Cada línea de un pedido representa
un hecho; también es posible contar las líneas de un pedido: el número de líneas de un
pedido es también una medida.

2. Dimensiones

Las dimensiones son el fundamento del sistema decisional. Es preciso prestar la máxima
atención en el momento de su concepción.

a. Atributos

Una dimensión se compone de atributos. El nombre del cliente, su dirección, la ciudad, su


código postal, su franja de edad son atributos de la dimensión cliente. Cuando un atributo
es padre de otro, como el código postal para la ciudad, se usa el término jerarquía. Una
jerarquía puede estar constituida por más de dos atributos. Es el caso por ejemplo de la
jerarquía de un calendario: año, semestre, trimestre, mes, día.

Por último, será preciso distinguir de entre los atributos de la dimensión aquellos que
servirán para el análisis, como la ciudad o el código postal, de aquellos que son únicamente
información, como por ejemplo la dirección.

b. Claves

Toda dimensión tiene como mínimo una clave común con el sistema OLTP. La clave
funcional u operacional se usa para actualizar la dimensión e identifica de forma única cada
línea de dimensión en la fuente y en la dimensión.

Lo normal es que alguna clave primaria propia del entorno decisional se sustituya por la
clave funcional. Esta clave a menudo se genera mediante una secuencia en el motor de base
de datos: no tiene por tanto ningún sentido funcional. Se la suele designar por el término
clave técnica, clave de sustitución o surrogate key y permanece oculta a los usuarios del
DM.

Entre los muchos intereses de la clave de sustitución es preciso destacar que:

ShareVideos
 Estas claves son números enteros de pequeño tamaño. Las uniones entre las tablas
de hechos y las dimensiones se encuentran así considerablemente optimizadas.
 Dado que una dimensión posee un atributo evolutivo, esta clave permite seguir su
evolución. Por ejemplo, en la dimensión de cliente, un cliente puede cambiar de
residencia. Sus primeros pedidos deben estar ligados a su ciudad anterior mientras
que los nuevos pedidos estarán ligados a la nueva localidad. El cliente debe por
tanto dividirse en dos clientes, cada uno con su clave propia, por fuerza diferente de
la clave funcional: la clave de sustitución.
 La clave de sustitución es independiente de la fuente de información y por tanto no
varía si cambia la fuente. Dado que puede haber varias fuentes para la misma
dimensión, estas fuentes de información pueden contener claves comunes para
registros diferentes.

La clave de sustitución tiene a su vez ciertas desventajas:

 Se acompaña a menudo de un índice suplementario.


 El modelo es más complejo y las peticiones a la base de datos son a su vez más
complejas y, en ocasiones, menos óptimas.

La clave de sustitución es normalmente una secuencia. No obstante, en ciertos casos se


permite que la clave de sustitución pueda ser el resultado de un cálculo o de una conversión
a partir de la clave funcional. Por ejemplo, en la dimensión de calendario la clave funcional
es la fecha y la clave técnica almacenada podría ser un valor entero con el formato
AAAAMMDD.

c. Variación de las dimensiones

La dimensión se construye a partir de atributos. Los atributos pueden evolucionar en el


tiempo. Por ejemplo la fecha de nacimiento de un cliente puede ser objeto de una
corrección, o el cliente se puede mudar, y esta información debe reportarse en el sistema
decisional. Es preciso determinar para cada atributo la frecuencia y la forma en que los
análisis deben reflejar esta evolución: cuando un cliente se muda, por ejemplo, de Madrid a
Barcelona, si simplemente se actualiza el atributo ciudad de la dimensión cliente, todos los
hechos anteriores se encontrarán bruscamente anclados a la ciudad de Barcelona, y es
posible que los usuarios de negocio no quieran verlo así.

Tras la modificación de un atributo, el sistema decisional puede:

 No tenerlo en cuenta, ignorarlo. Los hechos se atribuirán automáticamente al valor


original del atributo.
 Trazar esta modificación de tal forma que los hechos se contabilicen sobre el valor
preciso del atributo.

En este caso, es preciso interesarse por la frecuencia de cambio del atributo:

ShareVideos
o Si las frecuencia de modificación es baja: se habla de dimensiones de
variación lenta (Slow Changing Dimension), y la solución consiste en crear
para cada ocurrencia un registro nuevo en la dimensión que va a memorizar
esta modificación. Los nuevos hechos se asociarán al nuevo registro. Se dice
entonces que es un atributo de tipo 2.
o Si la frecuencia de modificación es alta: conviene crear una o varias
dimensiones nuevas con los atributos implicados y modelizar el enlace
directamente en la tabla de hechos.
 Borrar el valor antiguo del atributo para conservar únicamente el último valor, o el
valor corriente. Los hechos se contabilizarán en el último valor tomado por el
atributo. Poco importa entonces la frecuencia de las modificaciones: hablamos de
atributos de tipo 1.

La evolución de un atributo de tipo 1 sólo precisa que se actualice la dimensión.

La evolución de un atributo de tipo 2 es más compleja.

Considere el siguiente cliente en la dimensión Cliente:

Clave de Cliente Clave funcional Nombre Ciudad Franja de edad


4556 QJ45 Juan Valencia 30-60 años

Este cliente ha realizado varios pedidos que han sido registrados en la tabla de Pedidos:

Clave de Cliente Fecha Clave de Producto Cantidad Importe


4556 10/10/2005 15865 2 1,80
4556 05/01/2009 25424 1 36,40

En el último pedido, el cliente señala que ha cambiado de domicilio a Sevilla. Se crea


entonces un nuevo cliente en la dimensión, a partir del antiguo valor.

Clave de Clave Franja de Válido Válido


Nombre Ciudad
Cliente funcional edad desde hasta
4556 QJ45 Juan Valencia 30-60 años 10/10/2005 02/04/2010
9755 QJ45 Juan Sevilla 30-60 años 03/04/2010 31/12/9999

Y el nuevo pedido se registra en la tabla de hechos de la siguiente forma:

Clave de Cliente Fecha Clave de Producto Cantidad Importe


4556 10/10/2005 15865 2 1,80
4556 05/01/2009 25424 1 36,40
9755 03/04/2010 5468 3 33,00

ShareVideos
Para gestionar los atributos de tipo 2 es preciso incluir una o varias columnas dedicadas en la tabla
de dimensión. En el ejemplo, las columnas "Válido desde" y "Válido hasta" determinan el intervalo
de tiempo en que es válido cada registro. Es fácil encontrar el registro concreto buscando por
clave funcional según el intervalo de tiempo que comprenda la fecha concreta.

3. Hechos, agregaciones y cubos

Al nivel de los hechos en el sistema origen operacional se le llama nivel atómico o


granular. Por ejemplo, en la tabla de hechos de los pedidos antes expuesta el nivel de los
hechos es el nivel atómico: la línea de pedido. Una tabla de hechos no tiene que serlo
necesariamente a nivel atómico, sino que puede crearse en un nivel ya agregado.

Tabla de hechos agregada por Mes y por Ciudad

El esquema en estrella permite leer los hechos según los ejes de análisis con el objetivo de
obtener agregados a nivel de ciertos atributos, principalmente aquellos que constituyan
jerarquías. Un agregado es un valor que se obtiene mediante la combinación de varios
valores según un operador matemático. En el caso de una tabla de hechos atómicos que
contenga miles de filas calcular una medida agregada, por ejemplo el volumen de negocio
generado en el primer trimestre de 2011 por los clientes de la región sur de España, puede
tomar cierto tiempo, incluso si este tipo de esquema está optimizado para la lectura, pues el
tiempo necesario para este mismo cálculo en el sistema OLTP será mucho mayor.

Para calcular el volumen de negocio, basta con recorrer las decenas de miles de líneas de
hechos que correspondan a los días de los tres primeros meses de 2011 para todos los
clientes que hayan notificado una dirección de facturación en la región sur de España, y
hacer la suma de los importes...

Si el sistema hubiera precalculado este volumen de negocio por ciudad, el mismo cálculo
podría realizarse mucho más rápido.

Un cubo es un esquema en estrella o en copo de nieve en el que se han precalculado de


antemano un grupo de agregados. El cubo también ofrece una capa de negocio por encima
de los datos almacenados en el esquema en estrella.

El cubo tiene un rendimiento particularmente bueno en ciertos casos. Para empezar, debe
usarse bajo el principio de que se desea extraer y leer los resultados agregados y no los
hechos detallados atómicamente, como por ejemplo las líneas de facturación. De este modo
la aportación del cubo depende de la naturaleza de las medidas de negocio que se quiera
analizar. Por cada medida es preciso definir un operador agregado en términos de negocio:
por ejemplo, para el volumen de negocio el valor agregado se obtiene realizando la suma,
para la fecha de venta el valor agregado puede ser el valor mínimo, para el cálculo de una
tasa no conviene aplicar ninguna agregación y para un nivel de stock se puede aplicar la
suma pero sólo en la dimensión temporal definida por el calendario. No tendría sentido

ShareVideos
sumar los niveles de stock de marzo y abril. El uso del cubo se recomienda especialmente
para medidas del tipo suma o recuento (número de registros) sobre el conjunto de ejes de
análisis.

Un cubo puede perfectamente tener más de 3 dimensiones, por ello suele usarse a menudo
el término base de datos multidimensional.

Metodología de concepción
Existen muchas obras que tratan sobre las distintas formas de llevar a cabo proyectos
decisionales. Tanto si su visión de partida es más próxima a la de Inmon como si lo es a la
de Kimball, los principios que se exponen a continuación pueden resultarle de utilidad.

1. Puesta en marcha iterativa

Construir un DW de empresa y las aplicaciones de BI que le acompañan es un proyecto


colosal. A menudo se aconseja acometerlo en iteraciones por dominio funcional.

Esta puesta en marcha tiene varias ventajas: permite dividir el proyecto en lotes de menor
tamaño, satisfacer desde el principio a una parte de los usuarios finales, y planificar un
crecimiento progresivo del sistema decisional.

2. Etapas de concepción del Data Mart

Cada iteración comienza por la modelización del DM. Esta operación puede llevarse a cabo
siguiendo las etapas descritas a continuación.

 Escoger el proceso de negocio que se quiere analizar:

Es preciso comenzar eligiendo el perímetro funcional del DM que se desea crear.


Cierta información tiene más importancia que otra para la empresa, o un interés
mayor para la gran mayoría de usuarios finales. Ciertos usuarios finales son más
estratégicos que otros: es importante afinar sus necesidades en la primera iteración.

Por ejemplo, el DM sobre los pedidos de los clientes.

 Definir la granularidad del DM:

La granularidad del DM es el nivel de detalle de los datos archivados en la tabla de


hechos. En un proyecto de DW decisional en ausencia de un DW operacional se
aconseja escoger el nivel atómico de los hechos del sistema operacional origen.

Por ejemplo, el DM sobre los pedidos de los clientes contendrá las filas con los
pedidos.

ShareVideos
 Definir las dimensiones:

Es preciso definir los ejes de análisis útiles para los decisores. Para cada dimensión
se listarán los atributos y las jerarquías. Conviene distinguir los atributos utilizados
para el análisis de la información, tales como la dirección postal.

En el ejemplo anterior de los pedidos comerciales, las siguientes dimensiones son


indispensables para realizar un análisis: el calendario organizado según dos
jerarquías "día - mes - año" y "día - semana - año", los clientes organizados según
una jerarquía geográfica "ciudad - región - país" y los productos por subcategorías y
categorías. Como cada producto puede tener varios fabricantes, es preciso añadir
una dimensión por fabricante.

 Definir las medidas de los hechos:

Es preciso definir las medidas de los hechos registrados en la tabla de hechos.

Cada registro por pedido de cliente tiene una cantidad y un importe. La información
almacenada hasta el momento no permite calcular un importe medio por pedido. Es
preciso añadir una medida número distinto de pedido. Para ello, es preciso incluir
una columna que identifique al pedido en la tabla de hechos.

 Definir la frecuencia y el modo de alimentación:

¿Con qué frescura esperan los datos los usuarios finales? ¿Se trata de tiempo real,
de datos del día anterior? ¿Cuáles son las posibilidades para alimentar el esquema
en estrella a partir de las fuentes de información? ¿Es posible realizar una
alimentación diferencial?

 Definir la profundidad del histórico disponible en línea:

La profundidad del histórico se mide en número de unidades de tiempo: número de


años, número de meses... Es importante definirla con los usuarios al comienzo del
proceso para poder estimar la volumetría de los datos tratados.

Oferta general
Microsoft propone una oferta de soluciones de Business Intelligence rica y que se adapta a
numerosos escenarios, sea cual sea el tamaño del proyecto o la arquitectura escogida. La
oferta se divide principalmente en dos ramas complementarias: una constituida por SQL
Server y otra por Office.

SQL Server está dedicado principalmente a la construcción, consolidación y preparación de


datos decisionales. Contiene además la solución de Reporting, que permite construir una
solución de BI que cubra el perímetro completo: desde el almacenamiento del histórico de

ShareVideos
datos operacionales hasta su distribución en forma de información decisional a los usuarios
finales.

Office es principalmente una solución dedicada a la explotación de datos decisionales. Para


empezar, Microsoft ha escogido a Excel como su cliente pesado de BI. Muchos usuarios ya
están habituados a sus conceptos básicos gracias a las tablas de referencias cruzadas
(PivotTable). Tras las dos últimas versiones, 2007 y 2010, la hoja de cálculo de Microsoft
se ha transformado en una verdadera herramienta de restitución de datos OLAP. Office ha
diseñado toda una gama de productos que van más allá de la suite de escritorio gracias a
tecnologías SharePoint. SharePoint permite poner en marcha soluciones intranet o extranet,
cubriendo así la gestión colaborativa del contenido y el desarrollo de aplicaciones. Integra
el acceso a la solución de reporting de SQL Server. Puede entenderse como la publicación
de carpetas Excel en línea, de cuadros de mando BI que ofrecen una mayor difusión de
datos decisionales.

Con la versión 2008 R2 de SQL Server y la versión 2010 de SharePoint, Microsoft aporta
además una revolución en su oferta: PowerPivot o el BI en autoservicio gestionado
(Managed Self Service Business Intelligence). Con esta tecnología, todos los usuarios
pueden manipular desde su puesto de trabajo volúmenes de datos impresionantes para
construir ellos mismos su cubo, sin pasar por un equipo dedicado y, por ello, sin tener que
esperar, usando únicamente los recursos locales. Si se despliega el conjunto de la
arquitectura PowerPivot será posible publicar este cubo en línea y compartir, junto a los
administradores, su gestión: reparto, actualización...

1. Posicionamiento
a. BI para todos

En las últimas décadas se ha producido una explosión en el uso de bases de datos


operacionales, lo que ha dado lugar a importantes éxitos comerciales. La predicción de que
pueda ocurrir lo mismo con las bases de datos decisionales, que a principios de los años
1990 todavía eran relativamente confidenciales, ha dado a Microsoft el impulso necesario
para invertir en este tipo de tecnologías. Mientras los actores históricos proponen precios
exorbitados para proyectos de tamaño medio, Microsoft compra el motor OLAP de
Panorama para integrarlo en SQL Server 7 y sacar al mercado una solución muy
económica. Si bien la estrategia de Microsoft se basa en este concepto de una solución
económica accesible para todos (BI for everyone), el fabricante de software enriquece su
oferta en base a servicios y adaptabilidad para proyectos de gran envergadura.

b. Oferta evolutiva

Cada servidor que compone la oferta de BI es evolutivo (escalable).

Por ejemplo, existe el servidor de bases de datos relacionales en versión portátil pero
también en una versión que permite dar servicio a cientos de usuarios para consultar
centenares de terabytes. De la misma forma, el motor OLAP que se usa para leer un fichero

ShareVideos
cubo local en el portátil de un comercial que no está conectado a la red, también puede dar
soporte a un cubo de enormes dimensiones que permita consultar miles de líneas de hechos.

c. Oferta extensible

Microsoft ha escogido el camino de la apertura, y todos sus productos se pueden enriquecer


con funcionalidades desarrolladas por otros fabricantes de software o incluso por equipos
del propio cliente. El entorno de desarrollo .NET permite desarrollar nuevos componentes,
automatizar el funcionamiento de los servidores o incluso integrar en nuestras aplicaciones
las funcionalidades de BI.

Es posible crear componentes para leer nuestras propias bases de datos. Es posible crear un
Add-In en Excel para explotar nuestro cubo. Este Add-In puede generar un archivo de tipo
RDL, que describa un nuevo informe, y desplegarlo en el servidor de informes. Es posible
crear en SharePoint nuestras propias aplicaciones, por ejemplo para la introducción manual
de objetivos de venta, que se integrarán en el cubo. Resulta complicado enumerar todas las
posibilidades...

No obstante esta apertura tiene un coste, de modo que ciertas funcionalidades que formaban
parte de la oferta original ahora es preciso desarrollarlas.

2. Modelo unificado
a. Todas las fuentes de datos de la empresa

SSAS, el motor OLAP de Microsoft, puede implementarse por encima de todas las fuentes
de datos de la empresa ya sean operacionales o desnormalizadas. Es capaz de leer bases de
datos SQL Server, Oracle, DB2, SAP y Teradata. Ofrece a los usuarios finales un punto de
acceso a los datos decisionales de la empresa único y optimizado sin tener que recurrir a un
almacén de datos relacionales universal.

b. Un portal único

El uso de SharePoint como portal de acceso permite a la empresa proveer un único frontal
web ya sea para la parte decisional o para otras actividades.

Este portal SharePoint puede dar acceso a los informes, cuadros de mando, carpetas de
Excel en línea con carpetas de PowerPivot...

La suite SQL Server


SQL Server 2008 R2 contiene cuatro componentes principales:

ShareVideos
 MSSQL: el servidor de bases de datos relacionales SQL Server. Concebido en su
origen para aplicaciones transaccionales, el motor relacional se ha optimizado para
gestionar eficazmente esquemas en estrella.

La expresión SQL Server designa al motor relacional.

 SSAS: SQL Server Analysis Services, el servidor de bases de datos


multidimensionales y de data mining. En este libro hablaremos del aspecto
multidimensional, aunque SSAS cuenta igualmente con un motor de data mining
optimizado que se integra perfectamente en el motor multidimensional.
 SSRS: SQL Server Reporting Services, el servidor de informes, concebido para
trabajar sobre bases de datos relacionales. Permite a su vez leer la base de datos
SSAS y producir informes integrando las principales demandas del reporting
estadístico de Business Intelligence: tablas, gráficos, indicadores de nivel,
indicadores visuales y cartografía.
 SSIS: SQL Server Integration Services, los servicios ETL. Reemplaza a los antiguos
DTS (Data Transformation Services), sirve para alimentar los almacenes de datos y
automatizar tareas de administración.

Estos cuatro componentes están construidos sobre cuatro potentes motores de datos cada uno de
ellos optimizado para realizar una función concreta, y que poseen arquitecturas, características y
rendimientos muy diferentes. Conocer en detalle uno de los cuatro componentes ya es raro, con lo
que conocer los cuatro...

SQL Server 2008 R2 incluye un producto nuevo llamado MDS (Master Data Services)
dedicado a la gestión de datos maestros (MDM, Master Data Management), y que jugará su
papel en grandes sistemas decisionales de grandes sociedades. Los datos maestros son las
referencias de la empresa, los clientes, los productos... que constituyen igualmente las
dimensiones del sistema decisional. Del mismo modo que la multiplicidad de fuentes de
información para una misma referencia es una problemática en el sistema de BI, lo es para
el conjunto de la empresa: ¿qué hacemos cuando tenemos dos direcciones postales para el
mismo cliente? ¿Cómo detectar la presencia de errores en las referencias? MDM da
respuesta a toda esta problemática estratégica y permite al sistema decisional aprovechar
dimensiones ya preparadas. Aunque pertenece a SQL Server 2008 R2, no vamos a tratar
esta aplicación en el libro.

El fabricante de software Microsoft clasifica MDM como parte del BI. En efecto, su puesta en
marcha es una decisión inteligente, optimiza el negocio y es un buen paso previo para alimentar la
base de datos del DW. No obstante tiene un fuerte vínculo con la parte operacional y su
implantación puede considerarse sin necesidad de un sistema de BI.

ShareVideos
1. SQL Server

El uso de una base de datos relacional es prácticamente obligatorio para construir una
solución de BI. Raras son las arquitecturas que no utilizan al menos una. De forma general
el motor relacional se utiliza para almacenar los esquema en estrella. Habida cuenta de que
la profundidad del histórico es más importante que en los sistemas operacionales, la tabla
de hechos puede contener volúmenes de datos importantes.

SQL Server se presenta en varias ediciones que permiten alcanzar un Data Warehouse de
varios petabytes con la edición Parallel Data Warehouse.

2. Analysis Services

Toda solución de Business Intelligence necesita una capa de negocio por encima de los
esquema relacionales en estrella. Esta capa puede limitarse al reporting, pero a menudo los
usuarios tienen la necesidad de ejecutar consultas ad hoc o de centralizar fórmulas de
cálculo comunes. El perímetro de los datos puede variar de un usuario a otro, por ejemplo
los usuarios españoles no verían más que los datos españoles y los totales del conjunto del
país. Por último, los usuarios exigen un funcionamiento óptimo. Todos estos requisitos
justifican la elección de Analysis Services como componente de la arquitectura decisional.

SSAS aporta a su vez un lenguaje de consultas, MDX, que facilita la extracción y los cálculos sobre
los datos.

Además de la parte OLAP, SSAS está dotado de funcionalidades avanzadas de data mining.
El data mining puede verse como aquellas búsquedas o correlaciones entre datos que
puedan ser útiles a la empresa.

a. OLAP

El servidor OLAP de SSAS es una pieza fundamental del sistema decisional. Asume las
siguientes funciones:

 Reúne en el mismo modelo de datos informaciones heterogéneas. La arquitectura


clásica pide que todos los datos estén agregados en el DW, pero este no es siempre
el caso y la construcción de un DW es una tarea larga y costosa. SSAS permite leer
numerosas bases de datos. También existen herramientas, como SSIS, que permiten
escribir datos directamente en la base de datos SSAS.
 Ofrece objetos de negocio a los usuarios para consultar el contenido de los datos.
Proporciona un sistema de navegación de los datos sobre los ejes de negocio que es
útil para realizar consultas dinámicas de forma muy intuitiva.
 Precalcula y almacena las agregaciones. Esta funcionalidad permite a los usuarios
acceder a los resultados semanales, mensuales, trimestrales... con el mismo tiempo
de respuesta que se accede a los resultados cotidianos.

ShareVideos
 Centraliza una inteligencia de negocio a través de las dimensiones, pero también de
las fórmulas de cálculo y de los indicadores clave de desempeño (KPI).

Una base de datos OLAP puede estar formada, al igual que una base de datos SQL Server,
por varios Data Mart. Las dimensiones están ligadas a los DM con varios tipos de relación
y ofrecen gran flexibilidad en la modelización de la base de datos multidimensional.

El criterio determinante para escoger SSAS debe ser la necesidad de datos agregados. Es cuando
los usuarios finales interrogan datos agregados en un 90% de los casos cuando el motor SSAS
resulta interesante. Si los usuarios no piden más que datos atómicos, SSAS no igualará jamás el
rendimiento de SQL Server. Los datos agregados se escriben en el disco dentro de las particiones
SSAS. Aun así ciertos valores agregados se calculan dinámicamente durante la ejecución de la
consulta si el modelo de datos no está lo suficientemente desnormalizado. En este caso, el motor
seguramente tenga que ir a buscar los datos atómicos.

b. OLAP en tiempo real

En la mayoría de empresas existe la necesidad de contar con cuadros de mando de gestión


en tiempo real cada vez con más frecuencia, para renovar existencias en el momento justo o
tomar las decisiones lo más rápidamente posible.

La posibilidad de crear un almacén de datos y alimentarlo mediante un ETL permite


abordar escenarios de BI casi en tiempo real, pues el motor OLAP está directamente
conectado a la fuente mediante una tecnología de caché proactiva (Proactive caching).

De este modo los volúmenes de datos procesados serán menores y el modelo trabajará más
cercano al tiempo real. El sistema de particionamiento permite seleccionar una partición en
tiempo real y las demás de forma normal.

SQL Server 2008 R2 incluye una nueva tecnología, StreamInsight, que le permite acercarse
todavía más al tiempo real. Esta tecnología está dedicada al análisis en tiempo real del flujo
de datos incluso antes de que se procese en el resto del sistema de información.
StreamInsight está adaptado, por ejemplo, al análisis de los clics en línea de los grandes
sitios web comerciales, a los mercados financieros o incluso al tratamiento de los datos
captados por los sensores en las grandes cadenas industriales de montaje. StreamInsight no
se aborda en este libro.

c. Data Mining

El data mining está pensado para usos estadísticos. Su presencia tiene un motivo concreto
en una solución de Business Intelligence pues toma en cuenta datos de toda la empresa,

ShareVideos
preparados previamente, y proporciona como salida información útil para mejorar los
procesos de negocio de la empresa.

El motor de data mining SSAS usa algoritmos específicos para identificar grupos
homogéneos entre los datos de la empresa (segmentación automática) o predecir resultados
(análisis predictivo).

La segmentación automática permite reagrupar los miembros de cada dimensión, por


ejemplo los clientes o los productos, para facilitar a continuación su gestión, si el grupo de
datos presenta un comportamiento homogéneo. Además, esta segmentación se utiliza en el
cubo como un eje de análisis.

El análisis predictivo se usa para predecir algún dato que falta. Por ejemplo, ¿cuáles son los
potenciales clientes que comprarán un producto? ¿Cuántos productos venderemos en el
próximo mes?

Junto al componente SSIS Transformación y Extracción de términos, el data mining permite


implementar una solución de Text Mining.

Una ventaja del motor de data mining de SSAS consiste en utilizar la potencia del motor
OLAP para leer los datos.

Microsoft proporciona accesorios y Add-In de Excel y Visio para facilitar el uso del data mining
(véase http://www.sqlserverdatamining.com).

d. PowerPivot

La gran novedad de SQL Server 2008 R2 consiste en la capacidad añadida del motor OLAP
SSAS de gestionar el OLAP en memoria (In Memory OLAP). Esta tecnología presenta un
rendimiento asombroso en comparación con el MOLAP (Multidimensionnal OLAP),
aunque no permite trabajar sobre volúmenes de datos tan grandes.

Esta novedad se integra con la tecnología SSAS, bajo el nombre VertiPaq, y su uso se
asocia al de PowerPivot. El predecesor de PowerPivot es la tabla de referencias cruzadas en
Excel (PivotTable). Como su nombre indica, el PowerPivot es una potente tabla de
referencias cruzadas con mejores funcionalidades y que puede manipular volúmenes de
datos mucho mayores teniendo, según la cantidad de memoria disponible en el puesto de
trabajo, hasta un centenar de millones de líneas de hechos.

Igual que la tabla de referencias cruzadas, PowerPivot tiene un uso sencillo y pueden
crearlo los usuarios avanzados de Excel 2010, y no tiene por qué ser creado por un
desarrollador. El objetivo que persigue el fabricante de software es, por un lado, responder
a la oferta de la competencia, pero también proponer a los usuarios la posibilidad de crear

ShareVideos
sus propias aplicaciones de Business Intelligence, de proporcionar un BI en autoservicio,
sin tener que pasar por costosos procesos de desarrollo.

Por ello, Microsoft le propone al usuario que cree y publique sus propias hojas de cálculo
PowerPivot en una granja de servidores (Microsoft SharePoint Server, Excel Services y
SSAS) que mantendrá actualizados sus datos y compartirá la carpeta. Sin tener que crear
una arquitectura así, esta carpeta PowerPivot puede distribuirse en la empresa como una
simple carpeta compartida.

Si bien aparece etiquetado como SQL Server, el Add-In PowerPivot para Microsoft Excel
2010 puede usarse sin SQL Server. La información, demostración y descargas están
disponibles en su sitio web dedicado (véase http://www.powerpivot.com/).

Si bien el uso básico de este Add-In de Excel es gratuito (únicamente el precio de Excel), el paso a
la solución de un servidor de empresa debe basarse en una edición Enterprise.

3. Reporting Services

La plataforma de BI tiene como finalidad distribuir información concreta entre los usuarios
adecuados. Reporting Services permite diseñar informes y ponerlos a disposición de los
usuarios en un servidor de informes. Éste gestiona la caché para limitar las lecturas en las
bases de datos origen y se suscribe para recibir los informes regularmente.

La gran mayoría de usuarios de la plataforma de BI deben acceder a los datos a través de los
informes predefinidos y disponibles en el portal SSRS o SharePoint. Únicamente una minoría
puede realizar análisis ad hoc en Excel, por ejemplo.

La herramienta de creación de informes SQL Server Report Builder 3.0 permite a los
usuarios, fuera del equipo de desarrollo, acceder al diseño de informes. También permite
por otro lado trabajar en modo desconectado del servidor de informes y ejecutar un informe
sin conexión al servidor. A su vez, permite publicar en el servidor de informes un informe
creado en local.

Si bien se proporciona directamente a los usuarios finales, la creación de los informes con Report
Builder 3.0 es una actividad de desarrollo puro.

El servidor de informes es distribuido y cuenta con un portal web de gestión que permite su
uso como tal en la empresa. Del mismo modo puede integrarse con tecnologías SharePoint
gracias al Add-In Reporting Services for SharePoint Technologies, bien sea Microsoft
SharePoint Foundation o Microsoft SharePoint Server.

ShareVideos
La última edición de SSRS comprende el acceso a numerosos tipos de fuentes de datos,
incluidos los nuevos PowerPivot, y numerosos componentes de elaboración de informes
como tablas en columnas, tablas matriciales, gráficos, indicadores o incluso mapas.

Si bien podemos considerar que SSRS ejecuta un Reporting estático, también incluye varias
funcionalidades que crean una experiencia dinámica tales como los parámetros, la
posibilidad de enmascarar o de incluir zonas, o de crear acciones que abran otro informe.

4. Integration Services

El ETL de la solución SQL Server es más que un simple ETL. Puede usarse en otros
escenarios tales como tareas de administración del motor SQL. No obstante su motor está
optimizado para la manipulación de datos con el objetivo de cargar el DW.

SSIS puede leer y escribir en numerosas tablas de fuentes de datos.

Un flujo ETL se construye en un archivo llamado paquete, que contiene un flujo de control
de las diferentes operaciones. Entre las operaciones disponibles, SSIS propone un tipo
particular: el flujo de datos, que constituye el núcleo de la rutina ETL. Cada flujo de datos
relaciona las fuentes con los destinos realizando una transformación de datos entre ambos.
También existen otras operaciones secundarias tales como el envío de datos mediante
correo electrónico, o por FTP.

SSIS es una herramienta muy potente, pero debemos señalar la carencia de estructuras y la
ausencia de una plataforma para hacer seguimiento de los despliegues en producción. Será
preciso adquirir o desarrollar herramientas que normalmente vienen incluidas en las ofertas de
otros competidores.

5. Ediciones de SQL Server


a. Gama de productos

SQL Server existe en distintas ediciones comerciales con precios diferentes y que
responden a necesidades concretas.

Las ediciones principales son:

 Standard: edición básica que contiene los cuatro servidores que son útiles para el BI.
Su cometido son las aplicaciones OLTP de tamaño medio, una solución OLAP
básica y el reporting.
 Enterprise: esta solución contiene todas las funcionalidades para el BI, gestión de
alta disponibilidad y la posibilidad de evolucionar hasta un DW. Comprende la
tecnología StreamInsight, el MDS (Master Data Services) y el componente
PowerPivot para SharePoint.

ShareVideos
Existen dos ediciones premium:

 Datacenter: edición que extiende la versión Enterprise a 256 procesadores y hasta 2


terabytes de memoria RAM. Esta edición no se dirige a ningún dominio particular
del BI.
 Parallel Data Warehouse: esta edición está destinada a la gestión de enormes Data
Warehouse gracias a una arquitectura de procesamiento paralelo masivo (MPP,
Massively Parallel Processing). Permite llegar más allá del petabyte.

Existen otras ediciones especializadas:

 Developer: equivalente a la edición Datacenter, pero que no debe ponerse en


producción. Su uso está limitado al desarrollo, pruebas piloto y demostraciones.
 Workgroup: esta edición permite crear aplicaciones centradas en el servidor de base
de datos y/o en el servidor de reporting.
 Web: una edición especial para aplicaciones Web.
 Express: una edición gratuita para construir pequeñas aplicaciones cliente servidor.
 Compact: una edición gratuita y ligera para los dispositivos móviles o los clientes
Web.
 SQL Azure: proporciona las posibilidades de un motor relacional sin tener que
instalar nada pues la base de datos se almacena en la nube, es decir en los servidores
de Microsoft.

Para llevar a cabo proyectos decisionales se recomienda el uso de las versiones 64 bits.

Para obtener mayor detalle acerca de estas ediciones:

 http://www.microsoft.com/sqlserver/2008/en/us/R2-editions.aspx
 http://download.microsoft.com/download/7/B/6/7B65BDD8-9D5E-42A5-A8AA-
AD61FD8265E2/SQLServer2008R2EditionsDatasheet.pdf

b. Licenciamiento

El conjunto de productos forma un paquete comercial pero, según el despliegue escogido,


es probable que una licencia no sea suficiente. Microsoft propone de forma esquemática
tres modos de licenciamiento para SQL Server:

 Licenciamiento por procesador: el cliente adquiere una licencia por procesador


físico o lógico utilizado por el sistema operativo sobre el que se ejecuta al menos
uno de los servidores SQL Server.
 Servidor más licencia CAL por puesto cliente: el cliente adquiere una licencia de
servidor por cada sistema operativo sobre el que se ejecuta una instancia de alguno
de los servidores SQL Server y adquiere además una licencia de acceso de cliente

ShareVideos
(CAL) por cada puesto cliente que accede al servidor sobre el que se ejecuta SQL
Server.
 Servidor más licencia CAL por usuario: el cliente adquiere una licencia de servidor
por cada sistema operativo sobre el que se ejecuta una instancia de alguno de los
servidores SQL Server y adquiere además una licencia de acceso de cliente (CAL)
por cada usuario que accede al servidor sobre el que se ejecuta SQL Server.

No es sencillo escoger la mejor forma de licenciamiento: es preciso tener en cuenta el número de


servidores y los procesadores utilizados en la arquitectura así como el número de usuarios
(individuales y puestos de cliente).

Para hacerse una idea del coste de las licencias:

 http://www.microsoft.com/sqlserver/2008/en/us/licensing.aspx
 http://www.microsoft.com/sqlserver/2008/en/us/pricing.aspx

Consulte con su comercial de Microsoft para conocer más sobre los costes y los modos de
licenciamiento para su proyecto.

La idea de que en la caja se incluyen todas las licencias es una idea destinada al olvido:

 El modo de licenciamiento descrito arriba demuestra que esto es falso si se instala


sobre varios servidores o varios procesadores, lo que por otra parte resulta
imprescindible en un DW empresarial.
 El coste de la licencia no incluye el coste de los servicios de desarrollo, de
mantenimiento y de administración (conocer SQL no basta para implementar SSIS,
por ejemplo).

Muchas de las funcionalidades de la versión Enterprise pueden reemplazarse con una edición
Standard más un pequeño desarrollo que proporcione un resultado equivalente aun con
rendimiento menor. El criterio para tomar esta decisión no será la funcionalidad sino la volumetría
y el rendimiento equivalente en el entorno de desarrollo con esta volumetría. Considere que más
allá de los 100 millones de registros es preciso utilizar una versión Enterprise.

Si parte de la edición Standard, tenga precaución durante el desarrollo de no utilizar


funcionalidades de la versión Enterprise
(http://www.microsoft.com/sqlserver/2008/en/us/editions-compare.aspx).

ShareVideos
c. Configuración del sistema

No existe una arquitectura única para crear una solución de BI. Es preciso, desde el
comienzo del proyecto, hacerse la pregunta sobre esta necesidad, las posibles arquitecturas
y sus costes de adquisición, explotación y mantenimiento. Aunque sobre el papel pueda ser
tentador poner en producción una arquitectura total, un Data Warehouse alimentado por
SSIS con una capa SSAS, el reporting y un portal SharePoint con gestión de PowerPivot,
hay que tener en mente que todos estos son elementos comerciales, que se trata de
diferentes tecnologías que requieren competencias muy distintas, que siempre se tiene la
problemática de la explotación y que un DW vive con la empresa y la necesidad de nuevos
desarrollos será recurrente.

Las arquitecturas clásicas responden a la separación, en dos servidores distintos, de


servicios de Back-End (MSSQL, SSAS y SSIS) y de servicios de Front-End (SSRS y
SharePoint). Aun así, una vez más, no existe una regla universal. Para definir la
arquitectura es preciso comenzar por tener una idea precisa del perímetro del proyecto y
saber responder a las siguientes cuestiones:

 ¿Cuáles serán los volúmenes de datos de las tablas de hechos de los Data Marts (en
millones de líneas)? ¿Con qué profundidad de histórico? ¿Cuál será la granularidad
de los hechos?
 ¿Qué formas deben tomar las aplicaciones de BI? ¿Querremos reporting estático, o
tablas dinámicas? ¿Páginas Web? ¿Documentos Word? ¿Distribuidos por correo
electrónico?
 ¿Existen jerarquías naturales en las bases de datos? ¿Tiene sentido agregar los datos
sobre otros ejes distintos al eje temporal?
 ¿Qué tipos de informes y de análisis se pondrán en producción? ¿Con qué
frecuencia?
 ¿Con qué intervalo de tiempo se quiere actualizar las fuentes de información
operacionales y la distribución de la información decisional? ¿Tenemos como
objetivo el tiempo real? ¿Sobre qué subconjunto de los datos?
 ¿Cuántos usuarios van a existir? ¿Es posible distinguir los siguientes perfiles:
consumidores de informes, usuarios del análisis dinámico, creadores de informes o
de análisis dinámicos? ¿Incluso nombrarlos?

Recuerde a los usuarios, desde la fase de diseño, que el sistema de BI no tiene la vocación de
realizar un reporting operacional. Si esta fuera la necesidad, el sistema de BI puede tenerlo en
cuenta pero con un coste suplementario.

 ¿Qué tolerancia podemos asumir para la interrupción del servicio debido a un


incidente: una interrupción de 24h es asumible?
 ¿Qué herramientas tenemos actualmente en producción en la empresa: portal
intranet, soluciones de escritorio, aplicaciones .NET?

ShareVideos
 ¿Podemos considerar la actualización de las bases de datos para producir informes y
análisis en una franja horaria diferente (por la noche por ejemplo) de la que acceden
los usuarios?
 ¿A qué recursos van a acceder los usuarios? ¿Qué tipo de seguridad se quiere
implementar? ¿Vamos a usar el identificador de usuario en Windows, u otros...?

Del mismo modo existen otras cuestiones y problemáticas que tendrán su importancia en la
elección de su arquitectura. No obstante, una de las ventajas de la oferta de Microsoft es
precisamente su modularidad, tan amplia que resulta imposible presentar aquí el conjunto
de todas las combinaciones posibles.

Anticípese a las necesidades. Habitualmente el DW se comienza con un perímetro restringido: un


simple Data Mart en un único lugar; que a medio plazo puede volverse gigantesco y utilizarse en
todas las filiales internacionales.

Microsoft propone una guía para ayudarle a escoger la edición y la arquitectura que mejor
se adapte a su problemática: Infrastructure Planning and Design:
http://www.microsoft.com/downloads/details.aspx?FamilyId=ad3921fb-8224-4681-9064-
075fdf042b0c& displaylang=en, escoja SQL Server.zip.

Office
La suite Office cuenta con dos tecnologías que juegan un papel directo en las soluciones
decisionales de Microsoft: Excel y SharePoint.

1. Excel

Excel es mucho más que una simple hoja de cálculo. Se ha convertido en la herramienta
multipropósito del puesto de escritorio: permite realizar cálculos, tratar y consolidar datos,
realizar el control de gestión, crear cuadros de mando... Muchas de estas actividades que
han encontrado su lugar natural dentro de Excel se aplican de forma lógica en el sistema
decisional. Aun así Excel es la herramienta ideal para el puesto de trabajo en lo que
respecta al consumo de datos decisionales: su interfaz es conocida, posee una gran potencia
de cálculo y de formateo de datos orientada al Business Intelligence. Por último, es capaz
de conectarse a orígenes de datos relacionales o decisionales.

Una fuente de datos a partir de una consulta o de una vista sobre el DW es suficiente para
crear una tabla, una tabla de referencias cruzadas, o una gráfica de referencias cruzadas.

Una fuente de datos a partir de una base de datos Analysis Services puede alimentar una
tabla de referencias cruzadas, una gráfica de referencias cruzadas o una fórmula de cubo.

ShareVideos
Las fórmulas permiten ejecutar una expresión MDX sobre el cubo y recuperar su resultado en la
celda. Son muy prácticas para realizar cuadros de mando estadísticos. La mejor forma de descubrir
esta funcionalidad nacida con Excel 2007 consiste en crear una tabla dinámica a partir de una base
de datos SSAS y seleccionar la opción en Opciones - Herramientas - Herramientas OLAP - Convertir
en fórmulas teniendo seleccionada la tabla.

Conversión de una tabla dinámica en fórmulas de cubo

Una vez creados estos elementos, es fácil asignarles forma gráfica: indicadores y barras de
Excel; y también crear un cuadro de mando o un informe.

La mayoría de las opciones de formato de Excel son compatibles con la actualización de los
orígenes de datos, lo que significa que una actualización de la tabla a partir de su origen de datos
provoca una actualización en la forma gráfica creada.

Teniendo habilidades de desarrollo en .NET, un equipo puede crear rápidamente Add-In


muy útiles. En la red pueden encontrarse algunos Add-In propuestos por Microsoft u otros
fabricantes de software:

 Microsoft SQL Server Data Mining Add-Ins for Microsoft Office: permite utilizar
funciones de data mining desde Excel, y documentar los modelos en Visio
(http://www.microsoft.com/downloads/details.aspx?FamilyId=7c76e8df-8674-
4c3b-a99b-55b17f3c4c51),
 PowerPivot (http://www.powerpivot.com/): con SQL Server 2008 R2, Microsoft
pone a disposición de los usuarios de Excel un Add-In PowerPivot que transforma
Excel en toda una herramienta de BI en autoservicio, autónoma, con rendimientos
sorprendentes y una interfaz gráfica enriquecida... En este libro dedicaremos un
capítulo a esta tecnología (véase el capítulo PowerPivot).

2. SharePoint

SharePoint es una solución de portal Web colaborativo. En él encuentran su lugar los datos
producidos por el sistema de Business Intelligence.

La tecnología SharePoint se divide en dos productos: Microsoft SharePoint Foundation y


Microsoft SharePoint Server.

Algunos otros componentes dedicados al BI son:

 SSRS Add-In For SharePoint Technologies


 Excel Services
 Performance Point Server

ShareVideos
 PowerPivot for SharePoint

a. SharePoint Foundation

SharePoint Foundation 2010 es el sucesor de Windows SharePoint Services 3.0 (WSS). Se


trata de la solución económica de Microsoft destinada a las PYMES o asociaciones que
quieren crear su primer portal Web colaborativo.

Foundation se distribuye con la licencia Windows Server. Su coste está por tanto comprendido en
el de Windows Server.

Para obtener más información acerca de este producto: http://sharepoint.microsoft.com/en-


us/product/Related-Technologies/Pages/SharePoint-Foundation.aspx

b. Microsoft SharePoint Server

El servidor SharePoint destinado a proyectos de gran envergadura se comercializa en dos


ediciones: Standard y Enterprise. Para guiarle en la elección de la edición adecuada visite la
dirección: http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx.

Como acabamos de explicar la mayoría de funcionalidades de BI están comprendidas en la edición


Enterprise.

c. SSRS Add-In For SharePoint Technologies

Este Add-In permite hacer accesibles desde el portal SharePoint todos los informes
desplegados sobre el servidor de informes y, de este modo, reemplazar cualquier sitio Web
de gestión de informes.

Este Add-In funciona tanto con SharePoint Foundation como con SharePoint Server.

Del mismo modo, podemos descargarlo de la siguiente dirección:


http://www.microsoft.com/downloads/details.aspx?FamilyID=b3bebf9d-d86d-48cd-94e2-
0639a846be80& displaylang=en

d. Excel Services

Excel Services es un servicio que permite publicar en línea las hojas de cálculo Excel para
acceder a ellas dinámicamente en modo Web, desde un cliente ligero, como se haría desde
una hoja Excel.

ShareVideos
La conexión a las fuentes de datos definidas en la hoja de cálculo Excel se conservan y se
refrescan en la versión publicada en Excel Services. Así, un usuario de Excel puede
construir un cuadro de mando BI sobre Excel y compartirlo gracias a Excel Services.

Esta funcionalidad se incluye únicamente en la versión Enterprise.

e. Performance Point Server

Performance Point Server aparece como resultado de la adquisición de las soluciones


Proclarity por parte de Microsoft. Es interesante por un lado para todos aquellos usuarios de
Proclarity, y por otro lado para las empresas en las que los programas SSRS y Excel sean
insuficientes para elaborar cuadros de mando.

Permite crear cuadros de mando ricos y contextualizados que agregan la información del
cubo. El contenido del cuadro de mando proporciona una vista sobre el rendimiento de la
empresa según los distintos niveles de la organización. Se presenta como la solución más
eficaz para la creación de cuadros de mando dinámicos en el portal SharePoint. La idea
consiste en proporcionar a los decisores un verdadero cockpit para controlar su actividad.
Los indicadores y contadores mejoran la navegación OLAP: es intuitivo acceder al detalle
de la información.

Esta funcionalidad se incluye con la edición Enterprise. Utiliza únicamente orígenes de datos de
Analysis Services.

f. PowerPivot para SharePoint

Como hemos mencionando anteriormente, un usuario de Excel puede crear una pequeña
solución de BI en Excel, usando únicamente los recursos de su puesto local, gracias a la
tecnología OLAP en memoria. La hoja de cálculo Excel se convierte en una pequeña base
de datos Analysis Services que se comporta como un cubo local pero que tiene un buen
rendimiento y está acoplado a una interfaz gráfica en Excel que constituye toda una
aplicación de BI.

La hoja de cálculo puede distribuirse entre los usuarios como un simple archivo, aunque
también puede publicarse en PowerPivot para SharePoint. El servidor SharePoint se
encarga de la gestión completa de la aplicación de BI, crea una base de datos en su servidor
SSAS, realiza su actualización, provee estadísticas de uso... Todo ello sin tener que pasar
por el servicio informático. Ciertos usuarios verán aquí un medio para proponer nuevas
funcionalidades al equipo informático a partir de maquetas y pequeños desarrollos. Otros
verán en PowerPivot para SharePoint una solución de BI OLAP sobre un DW, que podría
reemplazar la solución SSAS elaborada por el servicio decisional.

ShareVideos
Esta es una funcionalidad accesible únicamente en la edición Enterprise. Se basa en el servidor de
Analysis Services para tratar la información.

Primeros pasos con SQL Server


Antes de entrar a ver en detalle los cuatro grandes servicios de SQL Server, es importante
familiarizarse con las dos herramientas principales: BIDS (Business Intelligence
Development Studio) y SSMS (SQL Server Management Studio), y a continuación conocer
la sociedad Adventure Works, el ejemplo propuesto por Microsoft sobre el que nos
apoyamos a lo largo de este libro.

BIDS es la interfaz dedicada al desarrollo.

SSMS está dedicado a la gestión de los servidores, o de instancias de servidores.

Durante la instalación de SQL Server se crea una instancia para cada servidor seleccionado
(MSSQL, SSRS, SSAS, SSIS). Si lanzamos la instalación por segunda vez, SQL Server le autoriza a
crear otras instancias de servidores, con la excepción de SSIS que es mono-instancia. Las instancias
son prácticas para disponer de varios entornos (desarrollo y pruebas) sobre el mismo servidor
físico o para hacer convivir dos versiones distintas del mismo servidor.

1. BIDS

El estudio de desarrollo de Business Intelligence es un entorno de desarrollo dedicado al


BI. Se trata de una edición de Microsoft Visual Studio dedicada al BI.

Visual Studio permite desarrollar proyectos de BI. El proyecto es un componente aplicativo


con un tipo: una base de datos, una aplicación Windows o hasta un conjunto de flujos ETL.
Visual Studio permite reagrupar proyectos dentro de soluciones. La solución permite
agrupar varios componentes de proyecto de una aplicación que son de tipos distintos. Así,
permite agrupar distintos componentes de la arquitectura BI: la base de datos DW, la base
de datos Staging, la base de datos OLAP, los flujos ETL, los informes del servidor de
informes y las aplicaciones .NET a medida.

La posibilidad de agrupar proyectos dentro de una solución única no tiene por sí misma un interés
evidente. Usted podrá trabajar sin problema con soluciones monoproyecto.

Los aportes de Visual Studio en el desarrollo de soluciones de BI son evidentes. El equipo


que tenga un entorno de desarrollo único puede estar familiarizado con ello. Si quisiera
ampliar las funcionalidades de SQL Server gracias a .NET, puede hacerlo en el mismo
entorno de desarrollo. Visual Studio es una herramienta de desarrollo sobradamente

ShareVideos
probada que integra el conjunto de funcionalidades de este tipo de productos: depuración,
coloreado sintáctico... Por último, permite llevar a cabo desarrollos colaborativos gracias a
un gestor de código fuente integrado en la interfaz del programa.

Para abrir BIDS, basta con ir al menú: Inicio - Microsoft SQL Server 2008 R2 - SQL
Server Business Intelligence Development Studio.

Puede crear un proyecto nuevo con la opción del menú Archivo - Nuevo - Proyecto... o
abrir uno ya existente con la opción Archivo - Abrir - Proyecto/Solución.

Es posible modificar la ruta por defecto donde el programa crea los proyectos y las soluciones.
Para ello, escoja en el menú Herramientas - Opciones, y a continuación en la ventana Opciones
escoja Proyectos y soluciones.

BIDS le permite crear los siguientes tipos de proyecto BI:

 Proyecto de Analysis Services: permite crear un proyecto nuevo de desarrollo de


una base de datos SSAS.
 Importar base de datos Analysis Services: permite crear un proyecto de desarrollo
de una base de datos SSAS a partir de una base de datos ya existente. El usuario
debe tener permisos de lectura sobre el modelo de la base de datos existente a la
hora de crear el proyecto. Al inicio, el proyecto contiene una copia de todos los
objetos de la base de datos modelo.
 Proyecto de Integration Services: permite crear un proyecto nuevo de desarrollo
ETL SSIS.
 Asistente de proyectos de conexiones Integration Services: tiene el mismo objetivo
que el anterior, pero inicia un asistente sin mucho interés para la creación de nuestro
primer paquete ETL.
 Proyecto Report Server: permite crear un nuevo proyecto de desarrollo de objetos
(fuentes de información, informes, partes de informes, datasets) y desplegarlo sobre
el servidor de informes SSRS.
 Asistente de proyectos Report Server: tiene el mismo objetivo que el anterior, pero
inicia un asistente de creación de informes. Este asistente puede iniciarse
manualmente. Es preferible escoger la opción anterior a la hora de crear sus fuentes
de datos y los datasets compartidos antes de lanzarse a la creación del primer
informe.
 Proyecto de modelos de informe: permite crear un nuevo proyecto de desarrollo de
un modelo de informes SSRS. Hay que tener en cuenta que existen otros medios
para crear un modelo de informe, en concreto se pueden crear de forma directa
estando conectado al gestor de informes. El modelo de informe creado en Visual
Studio se limitará a orígenes de datos relacionales SQL Server y Oracle. En el
gestor de informes, en la edición de una fuente de datos SSAS, el botón Generar el
modelo permite crear un modelo sobre la propia base de datos SSAS.

ShareVideos
Tenga en cuenta que instalando únicamente SQL Server y las herramientas de cliente BIDS no se
proporciona ningún modelo de proyecto de creación de una base de datos SQL Server. El modelo
puede instalarse a parte.

BIDS es una herramienta rica en funcionalidades y cada tipo de proyecto en BIDS cuenta
con las suyas propias, que se abordan en este libro en los capítulos correspondientes. No
obstante es importante conocer las funcionalidades estándar, aun sabiendo que estarán
accesibles u ocultas según la configuración contextual de nuestro Visual Studio.

Explorador de soluciones [Ctrl][Alt] L

El Explorador de soluciones es la herramienta clave de BIDS para explorar el proyecto.


Reagrupa todos los componentes del proyecto y permite añadir o suprimir otros. Del mismo
modo, es útil para acceder a las propiedades del proyecto.

Explorador de soluciones de un proyecto SSIS

Uno de los botones permite Mostrar todos los archivos. En efecto, existen ciertos archivos que
están ligados a la solución pero que normalmente no son editables por el usuario y por defecto
están ocultos.

Ventana Propiedades [F4]

En BIDS existen dos formas de acceder a las propiedades de los objetos. En ocasiones
BIDS pone a nuestra disposición algún editor especial. En cualquier caso, existe una
Ventana Propiedades. Permite acceder a todas las propiedades contextualmente.

Propiedades de un componente de flujo de datos SSIS

Usted elige, según las opciones, mostrar las propiedades por orden alfabético o agrupadas por
categoría. Ciertos objetos poseen tantas propiedades que puede llegar a ser difícil encontrarlas.

Cuadro de herramientas [Ctrl][Alt] X

ShareVideos
En BIDS, no hay mucho código que generar. La mayor parte de la actividad de desarrollo
es gráfica o consiste en asignar propiedades. El Cuadro de herramientas agrupa los
elementos básicos de desarrollo gráfico que deslizaremos al área de diseño.

Cuadro de herramientas SSIS

El Cuadro de herramientas es personalizable. Puede cambiar el orden de las herramientas,


suprimir o añadir nuevas.

Depuración

Visual Studio incluye funciones de depuración con puntos de ruptura e inspección de


variables que son muy prácticas a lo largo del ciclo de desarrollo. Estas funcionalidades se
acceden mediante el menú Depurar.

2. SSMS

SSMS (SQL Server Management Studio) es la interfaz de gestión de los principales


servicios incluidos en la suite SQL Server: instancias de bases de datos SQL Server, bases
de datos SQL Server Compact, instancias de SSAS, instancias de SSIS e instancias de
SSRS.

Cada instancia se identifica por el nombre del servidor y el nombre de la instancia según la
sintaxis: SERVIDOR\INSTANCIA, por ejemplo SRVBI05\SSASRECETAS. La instancia por defecto,
MSSQLSERVER, no precisa un nombre y basta el nombre del servidor para identificarla.

Este entorno resulta familiar a los DBA. Para abrir SSMS, basta con hacer clic en la ruta
del menú Inicio: Inicio - Microsoft SQL Server 2008 R2 - SQL Server Management Studio.

SSMS permite, como BIDS, trabajar en modo solución/proyecto para crear una base de datos SQL.

Permite realizar cualquier tipo de operación sobre las instancias, desde la ejecución de una
consulta a la realización de una copia de seguridad de una base de datos, pasando por la
gestión de las particiones o la generación de scripts DDL (Data Definition Language).
Existen tres paneles que son especialmente útiles:

Explorador de objetos [F8]

ShareVideos
El Explorador de objetos es el núcleo de SSMS, se usa para recorrer los distintos servidores
y lanzar operaciones.

Lo constituye una vista de tipo TreeView que muestra los servidores conectados. El
TreeView puede desplegarse hasta encontrar el objeto concreto sobre el que deseamos
actuar. A continuación basta con hacer clic derecho en el objeto para acceder a todas las
operaciones contextuales de administración.

Detalles del explorador de objetos [F7]

Este panel muestra los elementos que son hijos del objeto seleccionado en el explorador de
objetos. Resulta de particular interés para la hacer una selección múltiple de elementos y
operaciones agrupadas. En efecto, suprimir una decena de tablas una a una puede resultar
tedioso.

Servidores inscritos [Ctrl][Alt] G

Utilice este panel para registrar una única vez toda la información de conexión a sus
instancias de servidores.

3. El ejemplo Adventure Works

Microsoft distribuye un ejemplo que podemos descargar para ilustrar las funcionalidades de
SQL Server 2008 R2. Se trata de un sistema de BI de una sociedad imaginaria llamada
Adventure Works Cycle: una empresa multinacional especializada en la construcción y
distribución de bicicletas.

Se trata de un ejemplo completo y de libre distribución que nos ayudará a comprender en


detalle la concepción de un sistema de BI. Lo usaremos a lo largo del libro.

El hecho de que este ejemplo sea común a todos los usuarios de SQL Server del mundo
permite ampliar su información gracias a foros de Internet. De este modo, los usuarios
pueden reproducir un comportamiento concreto sobre el ejemplo Adventure Works antes de
lanzar una pregunta en un foro.

Instalación de las bases de datos

El conjunto de bases de datos Adventure Works para SQL Server 2008 R2 está disponible
para su descarga en la siguiente dirección: http://msftdbprodsamples.codeplex.com/

ShareVideos
Para instalar las bases de datos Adventure Works sin problema, lo más sencillo es hacer una
instalación completa de SQL Server. En efecto, tenemos que instalar y lanzar FULL TEXT SEARCH, y
FILESTREAM debe estar activo.

1. Proceda a realizar una instalación completa de SQL Server Developer Edition en un


servidor con una instancia por defecto, marcando la opción de instalar FULL TEXT
SEACH y de activar FILESTREAM en la base de datos relacional.
2. Abra Internet Explorer y diríjase a la dirección antes indicada.
3. Haga clic en el botón que aparece arriba a la derecha en la página web, Download,
para iniciar la descarga.
4. Es preciso que acepte los términos de la licencia para continuar.
5. El archivo descargado es un EXE. Debe ejecutarlo a continuación para instalar las
bases de datos.
6. De nuevo, acepte los términos de la licencia.
7. Aparece una pantalla mostrando el conjunto de bases de datos que es posible
instalar.

El programa de instalación de las bases de datos Adventure Works no despliega las bases de datos
SSAS. Esta tarea debe realizarla el usuario siguiendo las instrucciones descritas en la página More
Information (o
http://msftdbprodsamples.codeplex.com/wikipage?title=Installing%20Analysis%20Services%20Da
tabase) o las instrucciones aquí descritas.

Para desplegar la base de datos OLAP 2008 R2 adaptada a la edición Standard de SQL
Server:

1. Abra la solución Program Files\Microsoft SQL


Server\100\Tools\Samples\AdventureWorks 2008R2 Analysis Services
Project\standard\Adventure Works.sln haciendo doble clic en el archivo.
2. Una vez abierta la solución, haga doble clic en la Fuente de datos Adventure
Works.ds en el Explorador de soluciones. Haga clic en el botón Editar...justo debajo
de la zona Cadena de conexión. Indique el nombre de su instancia SQL Server
(Motor de base de datos), por ejemplo LOCALHOST. Haga clic en el botón Probar
la conexión.
3. Si el resultado del test es correcto, haga clic en el botón OK dos veces para registrar
los cambios.
4. Haga clic con el botón derecho en la solución Adventure Works DW 2008 SE en el
Explorador de soluciones, escoja Propiedades. Vaya a Implementación. Indique el
nombre de la instancia del Servidor destino, por ejemplo LOCALHOST.
5. Acepte con OK.
6. Haga clic con el botón derecho en la solución Adventure Works DW 2008 SE en el
Explorador de soluciones, escoja la opción Implementar.

ShareVideos
Para desplegar la base de datos OLAP 2008 R2 adaptada a la edición Enterprise de SQL
Server:

1. Abra la solución Program Files\Microsoft SQL


Server\100\Tools\Samples\AdventureWorks 2008R2 Analysis Services
Project\enterprise\Adventure Works.sln haciendo doble clic en ella.
2. Repita las mismas operaciones.

Es interesante desplegar ambas versiones para conocer bien las diferencias funcionales entre las
dos ediciones.

Instalación de los ejemplos

El conjunto de ejemplos de desarrollo en torno a las bases de datos Adventure Works está
disponible en la ruta: http://sqlserversamples.codeplex.com/releases/view/45923

1. Abra Internet Explorer y diríjase a la dirección indicada.


2. Encuentre en la página Web el archivo correspondiente a su instalación en 32 ó 64
bits: SQL2008R2.All_Product_Samples_Without_DBs.*.msi y haga clic en él.
3. Acepte la licencia para continuar.
4. El archivo descargado es un MSI. Debe ejecutarlo para instalar los ejemplos.
5. A continuación siga las instrucciones.

Los ejemplos contienen a su vez tutoriales. No dude en visitar las páginas del sitio Web de
codeplex y las carpetas Program Files\Microsoft SQL Server\100\Samples y Program
Files\Microsoft SQL Server\100\Tools\Samples en su servidor.

Existen muchos otros recursos disponibles en la siguiente dirección:


http://sqlserversamples.codeplex.com/

Características del DM
El DM se construye en el motor relacional SQL Server. Es una estructura OLAP adaptada a
la realización de consultas y, en particular, al reporting decisional. Si bien el motor
relacional se diseñó originalmente para aplicaciones OLTP, las versiones 2008 y 2008 R2
están optimizadas para OLAP.

Para crear un DM hay que olvidar prácticamente todos los principios de modelización
OLTP. Un DM contiene pocas tablas. Las tablas de hechos son muy voluminosas y están

ShareVideos
fuertemente indexadas. Las dimensiones se asocian al DM bajo el supuesto del esquema en
estrella o en copo de nieve.

Existen muchos DM que usan una dimensión Calendario, Divisa, Producto... En el caso de que una
dimensión se repita en varios DM, tiene sentido construir una dimensión compartida, y aportará
varios beneficios al proyecto. Kimball llama a estas dimensiones comunes "dimensiones
conformadas".

El DM es una base de datos orientada al negocio por lo que se aconseja usar nombres
descriptivos y evitar en todo momento abreviaturas de 8 caracteres heredades de los
sistemas de origen. Además, en las aplicaciones de BI vamos a reutilizar estos nombres a
menudo, por lo que será muy importante definirlos correctamente desde un principio.
Evidentemente, es inevitable tener abreviaturas como "IVA", pero una etiqueta
PuntoDeVenta es preferible a PDV. Comience por definir por escrito las convenciones de
esta nomenclatura.

Dimensiones
Las dimensiones son los elementos fundamentales del sistema decisional, con razón de más
si están conformadas y compartidas por varios DM. Hay que prestar atención a la creación
de las dimensiones.

Para empezar, el análisis debe proporcionar respuesta a las siguientes preguntas:

 ¿Cuál es la clave del sistema de origen? ¿Existen varios sistemas de origen de


datos? ¿Existen varias claves de origen? ¿Tienen un sentido funcional? ¿Cómo las
podemos enfocar?
 ¿Qué atributos piden los usuarios finales?
 ¿Qué atributos forman las jerarquías?
 ¿Qué atributos no van a usarse como ejes de análisis sino como información?
 ¿Qué información del sistema origen de datos podemos utilizar para actualizar cada
atributo?
 ¿Con qué frecuencia cambian los valores de los atributos de cada dimensión (nunca
/ a veces / a menudo)?
 ¿Qué atributos son de tipo 1? ¿Cuáles son de tipo 2? ¿Cuáles no varían nunca?
 En el caso de tener una dimensión conformada, ¿qué usuarios se van a interesar por
cada atributo?

1. Uso

La regla de oro de la creación de las dimensiones es la desnormalización, aunque esto vaya


en contra del rendimiento a la hora de actualizar la dimensión. En efecto, el hecho de
normalizar suprime las redundancias, mientras que la desnormalización crea numerosas

ShareVideos
redundancias: para modificar un valor es preciso actualizar cantidad de líneas. Vamos a
escoger entre una dimensión con esquema en estrella, es decir una única tabla redundante, y
una dimensión con esquema en copo de nieve, es decir varias tablas en un modelo semi-
normalizado, tomando como criterio la frecuencia de actualización, es decir el tipo de
actualización y el volumen de datos que se actualizan en la dimensión cada vez.

El esquema en copo de nieve se adopta generalmente cuando un eje de análisis está compartido
entre varias dimensiones, como por ejemplo un eje geográfico que sea común a los clientes y a los
puntos de venta.

Esquema en copo de nieve con la dimensión Geografía compartida

El uso que se vaya a hacer de los DM tiene un fuerte impacto en esta parte del trabajo.
Debería por tanto determinarse lo antes posible. ¿Vamos a leer los DM únicamente a través
de cubos SSAS? ¿Qué herramienta va a ser la encargada de lanzar las consultas sobre el
DM? ¿Y cómo tendremos que adaptar el modelo físico en función de la herramienta?

El sistema OLTP gestiona la jerarquía de salarios de la sociedad mediante una relación de la tabla
de empleados con ella misma: el empleado A es responsable de B. Nosotros podemos reproducir
esta unión reflexiva en el DM, y SSAS gestiona este caso de forma nativa. No obstante el motor
SSAS no construye un agregado sobre tal jerarquía, sino que los agregados se calculan en el
momento de realizar la consulta... Sería preferible desnormalizar esta jerarquía para aprovechar al
máximo la potencia de SSAS.

Dado que el DM se lee a través de las consultas de los usuarios, conviene añadir índices
sobre los principales atributos de las dimensiones. Por el contrario, esto no será necesario si
construimos un cubo sobre el DM.

2. Columnas

Los campos de la tabla de dimensiones son los siguientes:

 Clave técnica o clave de sustitución:

La clave de sustitución es generalmente un entero incrementado automáticamente.


Como esta clave se usa para hacer el enlace con la tabla de hechos, es importante
escoger el tipo de este valor entero lo más pequeño posible.

TINYINT: de 0 a 255, se codifica en un byte.

ShareVideos
SMALLINT: de -32.768 a 32.767, codificado en dos bytes.

INT: de -2.147.483.648 a 2.147.483.647, codificado en cuatro bytes.

BIGINT: de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807, codificado


en ocho bytes.

La clave técnica es la clave primaria de la tabla de dimensión.

 Claves funcionales o claves de los sistemas de origen:

Las claves funcionales son las claves que identifican de forma única un registro de
la dimensión en un sistema origen. Puede haber varias y pueden ser compuestas. El
tipo de las columnas debe ser homogéneo con el sistema de origen.

La clave funcional permite actualizar el registro tras una modificación en el sistema


origen. El proceso de alimentación del DM identifica el registro de la dimensión que
debe actualizarse gracias a esta clave. Sirve a su vez para buscar la clave técnica
durante la integración de hechos.

Esta clave debería tener un índice secundario, con una restricción en el caso de una
dimensión sin atributo de tipo 2.

Además, la clave funcional a menudo tiene sentido para los usuarios de negocio y
sirve como atributo de la dimensión.

 Atributos de la dimensión:

Cada atributo identificado tiene un campo que lo identifica como eje de análisis o de
información.

 Traducciones:

En el marco de un DW localizado con traducciones de los elementos de dimensión


en distintos idiomas, las traducciones están desnormalizadas y constituyen nuevos
campos: uno por atributo y otro por idioma.

 Columnas técnicas de gestión de las dimensiones de variación lenta:

Si una dimensión contiene atributos de tipo 2, un mismo elemento de dimensión en


el sistema de origen puede tener varias líneas en la dimensión que reflejen su
histórico. La clave funcional en este caso no es suficiente para identificarla. Por este
motivo se añaden ciertos campos que ayudan a identificar un registro.

En efecto, dos campos: Fecha de inicio y Fecha de fin, son suficientes para
encontrar el miembro correcto en la dimensión.

ShareVideos
Se puede añadir un tercer campo Estado para identificar rápidamente el registro en
curso, el decir aquél cuya Fecha de fin tenga valor NULL. Este campo podría servir
como eje de análisis para los usuarios finales que deseen filtrar según los registros
en curso.

3. Índices

Cada dimensión tiene una clave primaria que contiene la clave de sustitución y un índice
secundario para la clave funcional.

En el caso de una dimensión de tipo 2, el índice secundario contiene la clave funcional y el


campo Fecha de inicio.

Si esta dimensión de tipo 2 contiene suficientes registros, hay una optimización posible que
consiste en configurar los campos Fecha de fin y Estado como columnas del índice.

CREATE NONCLUSTERED INDEX [AKIndex] ON [dbo].[Dimension]


(
[ClaveFuncional] ASC,
[FechaInicio] ASC
)
INCLUDE ( [FechaFin],[Estado])

Puede crear otros índices para los atributos que vayan a ser usados en el análisis. Comience
configurando una columna por índice, a menos que sea muy evidente que las consultas de
los usuarios van a verse optimizadas en un futuro por algún índice compuesto.

En el esquema en copo de nieve, puede añadirse un índice por clave foránea.

4. Miembro desconocido

Cuando hay muchos hechos que integran la tabla de hechos, llega el momento en que la
búsqueda por clave técnica en la dimensión fracasa o simplemente no existe. Por ejemplo,
el cliente de una tienda que no haya rellenado su ficha de fidelización es un cliente
desconocido para la base de datos OLTP. Por ello, sus compras no pueden ligarse a la
dimensión cliente.

Ciertos expertos no consideran muy elegante informar un campo a NULL en la tabla de


hechos, y existe una posibilidad para gestionar estos casos en la dimensión a través de un
miembro desconocido, es decir, un miembro al que se asocian todas las ventas que no
contengan un cliente concreto. Es práctico atribuirle la clave técnica -1, valor que no se
utiliza en las columnas autoincrementadas. La instrucción SET IDENTITY_INSERT
permite de hecho desactivar la secuencia autoincrementada para crear este registro.

SET IDENTITY_INSERT [dbo].[Dimension] ON


INSERT [dbo].[Dimension] ([ClaveTecnica], [ClaveFuncional],
[Nombre]) VALUES (-1, ’DESCONOCIDO’, ’Miembro desconocido’)
SET IDENTITY_INSERT [dbo].[Dimension] OFF

ShareVideos
SSAS propone a su vez una solución para gestionar este tipo de casos de miembro desconocido.
Para usar la gestión de SSAS, inserte el valor NULL en la tabla de hechos.

Tabla de hechos
La tabla de hechos es el núcleo del sistema decisional. Según el caso, los hechos son
atómicos, es decir almacenados con el nivel máximo de detalle del sistema OLTP, o ya
agregados. Debería realizar esta elección en función del enfoque preferido (Inmon o
Kimball), de las necesidades de los usuarios de DM y de la capa de aplicación por encima
del DM.

Antes de diseñar esta tabla, es preciso contestar las siguientes preguntas:

 ¿Quienes serán los usuarios de la tabla de hechos? ¿Cuántos son?


 ¿Qué análisis van a ejecutar? ¿Con qué frecuencia?
 ¿Qué métricas se demandan? ¿Cuáles son las fórmulas de cálculo? ¿A qué nivel se
calculan? ¿Qué operador de agregación corresponde a cada métrica?
 ¿Qué profundidad de histórico debemos guardar?
 ¿Cuál es la volumetría (número de filas) del sistema origen a nivel no agregado para
la profundidad que estamos considerando?
 ¿Esta información tiene carácter decisional? Los usuarios finales no siempre son
sensibles a la diferencia entre operacional (p.ej. lista de registros de facturas del
mes) y decisional (los 10 mejores productos vendidos en el país, y su peso
porcentual en las cuentas globales).

1. Columnas

La tabla de hechos contiene principalmente dos tipos de campos: claves foráneas con las
dimensiones y métricas. Las primeras contienen claves técnicas de las dimensiones y son de
tipo entero. Las segundas son, por lo general, valores numéricos. Ciertas tablas de hechos
no contienen ninguna métrica, por ejemplo si la tabla se usa únicamente para numerar las
líneas.

No es raro añadir campos de otros tipos en el registro de la tabla de hechos. Por ejemplo, la
referencia de la factura permite contar el número de facturas diferentes.

La tabla de hechos almacena potencialmente un gran número de registros: es recomendable


evitar la creación de columnas inútiles o sobredimensionadas.

A este respecto el tamaño en disco de los decimales dependerá de su precisión:

Tamaño del almacenamiento


Precisión
en bytes

ShareVideos
Tamaño del almacenamiento
Precisión
en bytes
De 1 a 9 5
De 10 a
9
19
De 20 a
13
29
De 30 a
17
39

Desde la versión SQL Server 2005 SP2 existe un campo DECIMAL variable, que permite reducir el
tamaño de las columnas decimales. Esto provoca una reducción importante del tamaño de la tabla
de hechos y por tanto aumenta el rendimiento sensiblemente, según su infraestructura (véase el
artículo: http://msdn.microsoft.com/en-us/library/bb508963.aspx).

2. Índices

El DM está fuertemente indexado: no es raro que el tamaño ocupado por los índices en el
disco duro sea equivalente al de los datos.

La tabla de hechos no necesita una clave primaria en muchos casos.

Comience por crear un índice de tipo clustered sobre la clave de la dimensión Fecha, y a
continuación un índice que no sea de tipo clustered en las demás claves de las dimensiones.

Si bien es sensato mantener cierta restricción de unicidad entre varias columnas, es preciso evitar
crear una clave primaria de tipo clustered. Es preferible contar con un índice sencillo.

3. Modo de alimentación

Un DM puede ser objeto de actualización a partir del sistema origen de datos. Las
actualizaciones incrementales o aditivas, es decir aquellas que no efectúan más que
inserciones, son preferibles.

4. Particiones

Cuando la tabla de hechos deba contener varias decenas de millones de registros, es preciso
considerar el particionado. El particionado de las tablas es una funcionalidad de la edición
Enterprise que ha sido concebida para la administración de tablas voluminosas.

El particionado es transparente: usted continúa leyendo y escribiendo en la tabla como si de


una tabla estándar se tratase. Además de esta cualidad, el particionado presenta otras

ShareVideos
ventajas: es fácil de administrar, resulta sencillo realizar su copia de seguridad, cargar los
datos, y presenta una clara mejora en el rendimiento.

De entrada, hay que escoger el criterio de particionado. Generalmente el eje temporal es el


que mejor se adapta, por ejemplo por mes. De este modo la primera etapa consiste en crear
una función de particionado, que va a permitir clasificar los datos entrantes en una u otra
partición. Cada partición está limitada por un valor distinto. Si escoge el modo RIGHT, el
valor indicado marca el principio, el valor mínimo de la partición. Por el contrario, en el
modo LEFT, el valor marca el final, el máximo valor de la partición.

El código que se muestra a continuación crea cuatro particiones: la primera para fechas que
van hasta el 31 de diciembre de 2010, la segunda para enero de 2011, la tercera para febrero
de 2011, y por último las fechas que vienen después del 1 de marzo de 2011.

CREATE PARTITION FUNCTION PFMes(DATE)


AS RANGE RIGHT
FOR VALUES (’20110101’,’20110201’,’20110301’)
GO

Un esquema de partición hace el enlace entre cada partición definida por la función de
particionado y su grupo de archivos. La sintaxis a continuación permite enlazar todas las
particiones en un único grupo.

CREATE PARTITION SCHEME PSMes


AS PARTITION PFMes ALL TO ([PRIMARY])
GO

Tener un grupo de archivos por partición permite dejar las particiones antiguas en modo de sólo
lectura.

Para que una tabla utilice el esquema de particionado definido anteriormente, basta con
reemplazar el parámetro FILEGROUP por el esquema de particionado en el comando
CREATE TABLE.

CREATE TABLE dbo.MiTabla


(
ClaveCliente int NOT NULL,
ClaveProducto int NOT NULL,
ClaveFecha date NOT NULL,
Cantidad int NOT NULL
) ON PSMes(ClaveFecha)
GO
CREATE NONCLUSTERED INDEX IXClaveCliente ON dbo.MiTabla (ClaveCliente)
GO
CREATE NONCLUSTERED INDEX IXClaveProducto ON dbo.MiTabla (ClaveProducto)
GO
CREATE CLUSTERED INDEX IXClaveFecha ON dbo.MiTabla (ClaveFecha)
GO

ShareVideos
Los datos que se inserten se clasificarán automáticamente en una de las cuatro particiones.

INSERT INTO [dbo].[MiTabla] VALUES (1,1,’20100711’,10)


INSERT INTO [dbo].[MiTabla] VALUES (1,1,’20110111’,20)
INSERT INTO [dbo].[MiTabla] VALUES (1,1,’20110201’,25)
INSERT INTO [dbo].[MiTabla] VALUES (1,1,’20110210’,30)
INSERT INTO [dbo].[MiTabla] VALUES (1,1,’20110321’,40)
INSERT INTO [dbo].[MiTabla] VALUES (1,1,’20120131’,50)
GO

SQL Server proporciona una función $PARTITION que permite consultar las particiones.

SELECT $PARTITION.PFMes(ClaveFecha) AS [P], COUNT(*) AS [N],


MIN(ClaveFecha) AS [Min]
FROM dbo.MiTabla GROUP BY $PARTITION.PFMes(ClaveFecha)
GO

Esta consulta devuelve el siguiente resultado:

P N Min
----------- ----------- ----------
1 1 2010-07-11
2 1 2011-01-11
3 2 2011-02-01
4 2 2011-03-21

Entre las numerosas funcionalidades asociadas a las particiones, también es posible añadir
una partición nueva en una tabla existente. Si existen registros, se enviarán
automáticamente a la nueva partición... Preste atención a las volumetrías elevadas.

ALTER PARTITION FUNCTION PFMes() SPLIT RANGE (’20110401’)


GO

La consulta $PARTITION devuelve entonces:

P N Min
----------- ----------- ----------
1 1 2011-07-11
2 1 2011-01-11
3 2 2011-02-01
4 1 2011-03-21
5 1 2012-01-31

El particionado también permite alimentar los datos de forma mensual en una tabla
separada (aunque en el mismo FILEGROUP) y añadirla como partición de la tabla. Y al
revés, suprimir todos los datos de una partición para archivarlos, por ejemplo:

--Archivado y Supresión de la primera partición


CREATE TABLE dbo.MiArchivo
(
ClaveCliente int NOT NULL,
ClaveProducto int NOT NULL,

ShareVideos
ClaveFecha date NOT NULL,
Cantidad int NOT NULL
) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX IXArchiClaveCliente ON dbo.MiArchivo
(ClaveCliente)
GO
CREATE NONCLUSTERED INDEX IXArchiClaveProducto ON dbo.MiArchivo
(ClaveProducto)
GO
CREATE CLUSTERED INDEX IXArchiClaveFecha ON dbo.MiArchivo (ClaveFecha)
GO

ALTER TABLE dbo.MiTabla SWITCH PARTITION


$PARTITION.PFMes(’20101201’) TO dbo.MiArchivo
GO
SELECT * FROM dbo.MiArchivo --Archivado
GO
DROP TABLE dbo.MiArchivo
GO

La consulta $PARTITION devolverá:

P N Min
----------- ----------- ----------
2 1 2011-01-11
3 2 2011-02-01
4 1 2011-03-21
5 1 2012-01-31

Todas las funcionalidades ligadas a las particiones están documentadas en la ayuda en


línea: http://msdn.microsoft.com/en-us/library/ms190199.aspx

Base de datos
La base de datos decisional contiene un histórico más importante que los sistemas
operacionales, y es importante tenerlo en cuenta para garantizar su integridad y la
recuperación tras un desastre.

1. Integridad referencial

Elemento indispensable en el sistema OLTP, la integridad referencial es opcional en OLAP.


En efecto, la alimentación del DM viene asegurada por un único proceso, el ETL, que se
encarga de conocer las claves de sustitución y de buscar las claves funcionales en las
dimensiones. Es por tanto el que asegura la integridad. Añadir integridad referencial
ralentiza el proceso de alimentación.

Si usted efectivamente no utiliza la integridad referencial del motor SQL Server, puede,
para mayor seguridad, no dar permisos de escritura más que al usuario configurado en la
alimentación ETL.

ShareVideos
2. Modo de recuperación, copias de seguridad

En un DW, los datos más críticos son aquellos más antiguos, que ya no están presentes en
los sistemas de origen. Estos datos habrán desaparecido hace tiempo del registro de
transacciones de su DW. Por lo general no es interesante hacer copia de seguridad del
registro de transacciones que contiene aquellas más recientes. Se aconseja el uso del modo
de recuperación Simple.

Generalmente, la alimentación ETL es un proceso programado de forma regular. Lo más


práctico entonces es realizar copia de seguridad de la base de datos DW al final de este
proceso.

En el caso de un DW que se actualice en tiempo real o con una arquitectura de alta


disponibilidad, escoja el modo de recuperación Completo.

3. Compresión

La edición Enterprise de SQL Server 2008 R2 incluye la funcionalidad de compresión de


datos. Comprimir los datos permite reducir el tamaño físico de los objetos y, por tanto,
reducir el número de accesos a disco a costa de aumentar el uso de recursos de CPU (para
comprimir y descomprimir). Según la infraestructura de producción del DW, esto puede
suponer una mejora importante. Como el beneficio neto depende de la infraestructura física,
no podemos evaluarla de forma teórica. Poner en marcha mecanismos de compresión es un
trabajo de administración de la base de datos más que una tarea de desarrollo.

La compresión se define para una tabla, un índice o una partición. Es transparente al


usuario final salvo por la mejora o degradación del rendimiento. El siguiente artículo
explica con detalle cómo definir los objetos que queremos comprimir, y los beneficios
esperados: http://msdn.microsoft.com/en-us/library/dd894051(SQL.100).aspx

Asistente de creación del modelo


SSAS contiene una funcionalidad llamada Generación de tablas en un origen de datos, que
le asiste durante la creación de un esquema relacional en estrella creando la capa base
SSAS. Esta funcionalidad permite aplicar sin esfuerzo una modelización del esquema en
estrella respetando los requisitos del fabricante de software o hacer una prueba para
descubrir los modelos propuestos.

Esta herramienta supone una verdadera mejora dado que el proyecto contiene una capa
SSAS por encima del DM y genera la capa SSAS y la capa SQL. Para utilizarla es preciso
poseer ciertos conocimientos de desarrollo SSAS. El asistente no se limita a la creación de
un DM sino que permite actualizarlo.

1. Abra BIDS.
2. Cree un nuevo Proyecto de Analysis Services.

ShareVideos
1. El nuevo proyecto SSAS estará vacío, en el Explorador de soluciones seleccione
añadir un nuevo cubo.
2. En la primera parte del Asistente para cubos, seleccione el método de creación
Generar tablas en el origen de datos.

1. La siguiente etapa permite Definir nuevas medidas. Cree una o varias medidas en un
Grupo de medida. Defina para cada medida el Tipo de dato y el operador de
Agregación.

1. Por defecto el Asistente para cubos propone una dimensión de tipo tiempo.
Renómbrela por Calendario por ejemplo.
2. Añada una dimensión nueva Cliente. Puede agregar a continuación los atributos de
la dimensión en el editor de dimensión.
3. Añada una dimensión nueva Producto.
4. Escoja para la dimensión Cliente, una variación lenta (DVL). En efecto, un cliente
puede cambiar de domicilio y los análisis deberían seguir este cambio.

Automáticamente aparecen nuevos atributos asociados para la gestión de la variación.

1. En la pantalla siguiente, Definir períodos de tiempo, escoja los niveles de su


dimensión Calendario.

1. La pantalla siguiente permite añadir calendarios a la dimensión Calendario.

1. Finalice el Asistente para cubos escogiendo un nombre para el nuevo cubo.

1. El Asistente para cubos habrá generado un cubo y sus dimensiones, pero el proyecto
no contiene ni vista de origen de datos ni origen de datos.
2. En el Explorador de soluciones haga doble clic en la dimensión Cliente, para abrir
su editor.
3. Modifique el tipo de atributo ID original de DVL Cliente para adaptarlo al tipo
presente en su sistema de origen de datos.

ShareVideos
4. Añada un atributo Ciudad que contenga una clave entera y un nombre.
5. Guarde las modificaciones realizadas en la dimensión.

1. El editor del cubo o el de la dimensión contienen en el centro una zona Vista del
Origen de datos. En el medio de esta zona hay un texto en azul subrayado que le
invita a hacer clic para generar una vista de origen de datos.
2. Haga clic para que aparezca el Asistente para generar esquemas.
3. El Asistente para generar esquemas le propone en primer lugar Especificar destino.
Escoja un nombre para su vista del origen de datos y una conexión hacia una base
de datos SQL Server existente (creada anteriormente).

1. Escoja en la pantalla siguiente las opciones de generación de la base de datos que


convengan para su proyecto.

1. Escoja en la última pantalla las convenciones de nomenclatura de los objetos


generados.

1. Finalice el asistente. Los objetos se crearán en la base de datos SQL Server.

Ejemplo de tabla de dimensión

El asistente ha generado el código SQL que se muestra a continuación para la dimensión de


variación lenta de cliente:

CREATE TABLE [dbo].[Cliente](


[PK_Cliente] [int] IDENTITY(1,1) NOT NULL,
[Cliente_Nombre] [nvarchar](50) NULL,
[ID_original_de_DVL_Cliente] [int]
NULL,
[Estado_de_DVL_Cliente] AS (case when
[Fecha_finalización_de_DVL_Cliente]=’12/31/9999’
’ then ’Active’ else ’Inactive’ end),
[Fecha_inicio_de_DVL_Cliente]
[datetime] NULL,
[Fecha_finalización_de_DVL_Cliente]
[datetime] NULL,
[Ciudad] [int] NULL,
[Ciudad_Nombre] [nvarchar](50) NULL,
CONSTRAINT [PK_Cliente] PRIMARY KEY CLUSTERED
(
[PK_Cliente] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,

ShareVideos
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =
ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
CREATE NONCLUSTERED INDEX [IX_Cliente] ON [dbo].[Cliente]
(
[ID_original_de_DVL_Cliente] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
[PRIMARY]
GO

Ejemplo de tabla de hechos

Por lo que respecta a la tabla de hechos, se han generado tres índices, ninguno de ellos de
tipo CLUSTERED.

CREATE TABLE [dbo].[Ventas](


[FK_Calendario] [datetime] NULL,
[FK_Producto] [int] NULL,
[FK_Cliente] [int] NULL,
[CA_IVA] [money] NULL,
[Unidades] [int] NULL
) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_Ventas] ON [dbo].[Ventas]
(
[FK_Calendario] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
[PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_Ventas1] ON [dbo].[Ventas]
(
[FK_Producto] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
[PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_Ventas2] ON [dbo].[Ventas]
(
[FK_Cliente] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
[PRIMARY]
GO

1. A continuación puede modificar el cubo, crear dimensiones, añadir atributos.


Siempre es posible actualizar la base de datos SQL.

ShareVideos
2. Para actualizar el esquema SQL, despliegue el menú contextual del proyecto, y
seleccione la opción Generar esquema relacional...

De este modo puede crear una base de datos SQL coherente con su cubo SSAS y
aprovechar reglas de nomenclatura homogéneas.

Presentación de Analysis Services


SSAS (SQL Server Analysis Services) es un servidor de bases de datos OLAP y un
servidor de Data Mining. Este libro no trata más que la parte OLAP: el Data Mining no se
puede dejar únicamente de la mano de los informáticos. En efecto, deben colaborar con
expertos en estadística para crear una solución viable de Data Mining.

En una solución de BI, el motor de bases de datos OLAP proporciona una capa de negocio
entre el usuario final y los datos OLTP, la posibilidad de ejecutar cálculos complejos sobre
los datos y compartirlos, una capa centralizada de seguridad ligada a los datos y, sobretodo,
consultas de extracción muy eficientes.

SSAS proporciona dimensiones y medidas de objetos de negocio simples con la posibilidad


de manipularlas en una interfaz gráfica para construir cuadros de mando. Más allá de las
dimensiones y las medidas, SSAS permite implementar otros objetos como los llamados
KPI (Key Performance Indicator, indicadores clave de desempeño) que enriquecen la
interfaz de negocio.

MDX, el lenguaje de consultas, está mejor adaptado que el lenguaje SQL para escribir
consultas decisionales y fórmulas de cálculo. Calcular el volumen de ventas del mes
anterior precisa una consulta SQL compleja y poco eficiente. En MDX, una simple
expresión nos permite devolver instantáneamente el valor. La potencia de cálculo se
multiplica. Las fórmulas de negocio que más se usen se crearán en la base de datos OLAP,
y estarán disponibles para todos los usuarios. Éstos se beneficiarán de una biblioteca de
fórmulas ya diseñadas y adaptadas a sus propias necesidades. Las cifras que se
proporcionen en toda la empresa van a ser las mismas para todo el mundo.

Los roles de seguridad de la base de datos SSAS permiten dotar de seguridad a una
dimensión de un cubo, pero también a ciertos miembros de una dimensión, por usuario. De
este modo es posible restringir el acceso de un comercial a los clientes y las cifras de su
zona geográfica.

El motor OLAP construye valores agregados que aumentan la velocidad de ejecución de las
consultas. En SQL, el cálculo del volumen de ventas del mes anterior implica la lectura de
todos los registros de venta del mes anterior, mientras que en el cubo el motor no tiene más
que leer los valores agregados ya precalculados.

ShareVideos
A la inversa, si los usuarios finales hicieran cálculos o consultas sobre los datos individuales, el
rendimiento de SSAS sería desastroso. En este caso hemos escogido SSAS en vano, o bien
debemos estudiar la posibilidad de aportar mejoras a la modelización de la base de datos SSAS.
Calcular un volumen de ventas a partir de los precios unitarios y de las cantidades vendidas no
constituye una consulta OLAP. En la concepción del cubo, usted debe reemplazar el precio unitario
por el importe, que sí es un dato aditivo. El volumen de ventas será entonces la agregación de los
importes.

1. Modelo dimensional unificado

El UDM (Unified Dimensional Model) es el núcleo del motor OLAP de SSAS. El modelo
está unificado porque relaciona un modelo dimensional con un modelo relacional. Además
de las capacidades ya descritas, SSAS permite modelizar relaciones entre los atributos de
una dimensión, y distintos tipos de relaciones entre las dimensiones y las medidas. Por
ejemplo una funcionalidad como las tablas con relación N a N es típica del motor
relacional. Está también presente en el motor OLAP SSAS.

Con UDM el cubo no está limitado a una única tabla de hechos, como con SSAS 2000.
Ahora es un conjunto de tablas de hechos y dimensiones. Para comprender esto conviene
revisar los distintos componentes del UDM (salvo el Data Mining).

Base de datos

La base de datos SSAS es el equivalente a la base de datos SQL. Usted decide su perímetro.
Constituye el nivel más alto del UDM, y contiene todos los demás objetos del UDM.

Existe una buena práctica que consiste en crear un cubo por cada base de datos. Crear varios
cubos que contengan varias tablas de hechos en la misma base de datos es algo difícil de
gestionar.

Origen de datos

El origen de datos define el lugar donde se encuentran los datos de origen y la información
de seguridad que se va a aplicar para leerlos. Una base de datos puede contener varios
orígenes de datos.

Vista del origen de datos (DSV)

La Vista del origen de datos (Data Source View) es una capa lógica relacional entre el
motor OLAP y los orígenes de datos. Puede utilizarse para describir el DM, o para crear un
DM lógico sobre un origen de datos OLTP. Una base de datos puede contener varias DSV.

ShareVideos
También es posible tener objetos que provengan de múltiples orígenes de datos en una DSV.

Dimensión

Las dimensiones son los ejes de análisis. Pueden compartirse entre diferentes cubos.

Cubo

El cubo es la estructura multidimensional, el objeto más complejo de todo el UDM. Está


formado por grupos de medidas y de dimensiones de los cubos (enlaces hacia las
dimensiones básicas). Un cubo está ligado a una DSV.

Roles

Los roles permiten dotar de seguridad a los accesos a los datos multidimensionales por
parte de los usuarios o los grupos de usuarios de Windows.

Assemblys

Son bibliotecas escritas en .NET que aumentan las funcionalidades de SSAS.

Ciertas funcionalidades de los cubos o incluso ciertas dimensiones se alojan en la parte cliente, la
aplicación de BI. Este es el caso por ejemplo de los KPI. Es posible añadir KPI a un cubo, pero la
herramienta utilizada para leer el cubo los ignorará si no está diseñada para tenerlos en cuenta. A
su vez, ciertas propiedades de las dimensiones están destinadas a un cliente concreto.

2. Metadatos

Todos los objetos están descritos en formato XML dedicado: ASSL. Los metadatos se
almacenan en estos archivos XML: uno por cada componente del UDM. Cuando creamos
una solución dentro del entorno de desarrollo, este conjunto de archivos se agrega en un
único archivo alojado en la carpeta \bin del proyecto con la extensión .asdatabase.

3. Propiedades del proyecto

En la creación de un proyecto nuevo, comience por editar las propiedades del mismo,
haciendo clic derecho en el proyecto dentro del Explorador de soluciones.

1. En la opción Generar, piense en seleccionar la opción adecuada de edición del


servidor SSAS, según se haya definido en producción. Si conserva la elección de la
edición Developer, no podrá desplegar sobre una edición Standard pues habrá
implementado alguna funcionalidad que no está soportada en esta última.
2. En la opción de Despliegue, escoja la opción adecuada para su desarrollo: servidor y
nombre de la base de datos SSAS que desee crear.

ShareVideos
Como en la parte SQL, para desplegar en SSAS necesitará un servidor, instalado por ejemplo en su
puesto de trabajo.

4. Metodología para crear el UDM

El Explorador de soluciones parece indicar un orden de creación de los objetos del UDM.
No lo siga: cree las dimensiones antes que el cubo.

La metodología que se aconseja es la siguiente:

 Cree los Orígenes de datos y la DSV.


 Cree las dimensiones y pruébelas hasta que esté seguro de que todas ellas
funcionan.
 Cree el cubo: agrupación de medidas y dimensiones.
 Añada sobre ellas grupos de medidas, expresiones calculadas y otras acciones.
 Configure los roles.

Comenzar con el asistente de creación de un cubo puede ser una trampa. No es posible llegar a
buen término sin pasarse el tiempo necesario con cada dimensión. En SSAS 2005 el objetivo de
creación de un cubo "en un clic" había alentado a Microsoft a desactivar la gestión de errores de
integridad en las dimensiones para dar a los desarrolladores la ilusión de que el asistente
funcionaba... Con la versión 2008 el fabricante de software se ha echado atrás, pero en el
Explorador de soluciones sigue presentándose el cubo antes que las dimensiones.

Datos
Hay dos clases de objetos que realizan la interfaz con los datos de los sistemas de origen
bien sean operacionales o decisionales: los orígenes de datos y las vistas de los orígenes de
datos.

1. Orígenes de datos

Los orígenes de datos son fuentes de datos relacionales que se acceden a través de un
cliente, bien .NET, bien OLE DB nativo. El gestor de conexiones propone conectores
SSAS, pero SSAS no puede explotarlas como origen de datos. Por el contrario, es posible
crear enlaces con componentes de otras bases SSAS.

Dé preferencia a los conectores OLE DB. En efecto, si el servicio SSAS no ha sido desarrollado en
.NET usando una herramienta .NET las conversiones de tipo ralentizarán la lectura.

ShareVideos
Para realizar la conexión OLE DB a SQL Server, use un cliente SQL Server Native Client.

Dado que el origen de datos utiliza autenticación en Windows, la pestaña de Información


de suplantación de identidad permite especificar qué usuario utilizará el servidor para
acceder al origen de datos. SSAS propone cuatro configuraciones:

 Utilizar un nombre de usuario y una contraseña de Windows específicos

Esta opción permite escoger el usuario de Windows deseado.

 Utilizar la cuenta de servicio

Esta opción utiliza la cuenta de servicio SSAS para conectarse al origen de datos.

 Utilizar la información de identificación del usuario actual

Esta opción utiliza el usuario en curso para realizar la autenticación. Esta


configuración no permite modificar el objeto, efectuar consultas ROLAP, usar
objetos enlazados o sincronizar la base de datos OLAP.

 Herencia

Con esta opción, SSAS escoge en función de la operación efectuada más apropiada
de entre los dos modos anteriores: cuenta de servicio o usuario actual.

Para una seguridad óptima, la buena práctica consiste en:

 Usar la seguridad de Windows para las bases de datos de origen (en el caso de SQL
Server).
 Usar la opción de suplantación de identidad: Heredar.
 Usar una cuenta de dominio para ejecutar el servicio SSAS y otorgar los privilegios
necesarios a esta cuenta en sus orígenes de datos.

2. Vista del Origen de datos

La DSV es una capa lógica de metadatos que aisla la base de datos relacional del cubo y
permite trabajar sobre el esquema relacional sin impactar al origen de datos. Describe el
esquema de la base de datos relacional y permite añadir a este esquema claves primarias
lógicas, consultas nombradas y columnas calculadas.

Este es el objeto SSAS que permite crear un cubo sin Data Mart físico. Permite crear
consultas para desnormalizar la fuente de datos operacional.

Las consultas nombradas equivalen a las vistas en el motor de base de datos origen. Las
columnas calculadas también existen en los motores relacionales del mercado. Estas
funcionalidades están destinadas a la creación de un cubo sobre un sistema OLTP cerrado.

ShareVideos
Dado que el proyecto de BI contiene su propio DW relacional o decisional, es más sencillo
agrupar todas las reglas en el esquema relacional del DW. De este modo todas las capas que
no sean la capa SSAS también se verán beneficiadas.

El editor de DSV es una herramienta particularmente simple y agradable de usar. La


biblioteca de diagramas permite trabajar sobre perímetros limitados. El editor propone
asignar a cada objeto tabla o columna un FriendlyName (un nombre de negocio). Permite
crear relaciones en el esquema en estrella y añadir índices primarios si fuera necesario.
Todas las modificaciones realizadas aquí no impactan al origen de datos, y se implementan
en el motor SSAS.

Editor de vista del origen de datos.

Dimensiones
Las dimensiones son el fundamento de la base de datos multidimensional. Su creación es
un trabajo importante que tendrá gran impacto en la facilidad de uso del cubo y su
rendimiento. Las dimensiones son los ejes de análisis que podrán manipular los usuarios
para interrogar las cifras: construir ejes simples y ajustados al negocio permitirá a los
usuarios encontrar fácilmente la información. Las dimensiones definen a menudo jerarquías
que se usarán en el motor para construir valores agregados: diseñar las jerarquías adecuadas
y útiles permitirá al motor preparar los valores agregados pertinentes.

1. Terminología
Dimensión

Una dimensión se corresponde con una tabla de dimensión en el DM. Se compone de un


conjunto de datos de negocio coherente, que se relaciona con la tabla de hechos mediante
una clave y que define uno o varios ejes de análisis. En la dimensión de producto las
categorías y subcategorías forman el primer eje de análisis, pero también es posible realizar
un análisis sobre los ejes de los colores o los tamaños.

Atributo

Un atributo es el elemento básico de la dimensión. Un atributo es una característica de la


dimensión como por ejemplo la categoría, el tamaño o incluso el color de un producto. En
el sistema origen de datos, un atributo puede corresponderse con una o dos columnas de la
dimensión: un atributo puede descomponerse en un nombre y una clave.

La dimensión más sencilla contiene un único atributo.

ShareVideos
Distinguimos dos tipos de atributo (según la propiedad AttributeHierarchyEnabled): los
atributos que forman una jerarquía de atributos y aquéllos que son únicamente una
propiedad, presentes para informar al usuario pero no para realizar un análisis.

Relación de atributos

Una relación de atributo define una integridad referencial entre dos atributos. Por defecto
todos los atributos tienen una relación con la clave de la dimensión. Es fundamental definir
en la pestaña dedicada a tal efecto las demás relaciones de integridad referencial. Esta es
una de las claves del rendimiento del motor de agregaciones de su base de datos SSAS. Por
ejemplo, en la dimensión de tiempo, la fecha es la clave. Por defecto, el mes (mes y año) y
el año están ligados al día. El motor OLAP calculará el volumen de ventas anual
recorriendo los días del año. Usted deberá definir una relación que indique que año es el
padre del mes. De este modo, el volumen de ventas anual se evaluará a partir de los
volúmenes de ventas mensuales.

Jerarquía

Una jerarquía es una serie jerárquica de atributos: el atributo A es el padre del atributo B
que es el padre de... La jerarquía se usa para efectuar un análisis de arriba hacia abajo
(drilldown).

Los distintos atributos de la jerarquía definen sus niveles. Por defecto, toda jerarquía tiene
un nivel por encima del primer nivel: el nivel Todos. Por ejemplo, la jerarquía Año, Mes,
Día tiene por defecto cuatro niveles: todos, año, mes y día. Puede desactivar el nivel
superior (modificando la propiedad IsAggregatable del primer nivel).

Existen varios tipos de jerarquía, y conviene saber identificarlas en SSAS.

Jerarquía natural

Una jerarquía natural es una jerarquía para la que se define una integridad referencial entre
cada padre y sus hijos: los hijos no tienen más que un padre. El padre tiene uno o varios
hijos. El ejemplo del calendario ilustra perfectamente la naturaleza de esta jerarquía: años,
meses, días.

En SSAS, las jerarquías naturales se crean modelizando las relaciones de atributos.

Jerarquía de reporting o jerarquía de usuario

Las jerarquías de reporting son jerarquías en que los atributos no están ligados por
integridad referencial. Por ejemplo, en la jerarquía Tamaño - Color: es probable que exista
el mismo color en todas las tallas.

En SSAS una jerarquía de este tipo se crea simplemente modelando una jerarquía en la
interfaz.

ShareVideos
En SSAS no se explicita la distinción entre jerarquía natural y jerarquía de usuario. No obstante
este matiz es muy importante. Las jerarquías naturales se distinguen de forma implícita porque
definen una integridad referencial mediante la relación de sus atributos. Las jerarquías de
reporting no existen más allá de su propia definición. SSAS define jerarquías (a secas) que serán
naturales si se ha definido una relación entre los atributos, y que serán de reporting en caso
contrario.

Jerarquía de atributo

Por defecto cada atributo constituye una jerarquía de atributo. Esta jerarquía tiene por
defecto dos niveles: el nivel Todos y el nivel de atributo.

Hay que ver cada jerarquía de atributo como un potencial eje de análisis. El desarrollador
debe limitarlo únicamente para aquellos atributos en que sea útil. Por ejemplo la zona
geográfica del cliente podría constituir una jerarquía de atributo útil, pero no así su
dirección.

Miembro

Un atributo tiene sus miembros: se trata de elementos contenidos en el atributo. Por


ejemplo Rojo, Verde, Azul son miembros del atributo Color.

Miembro hoja (Leaf member)

Los miembros del nivel más bajo de la jerarquía son las hojas. Por ejemplo, las fechas son
las hojas de la jerarquía calendario mensual.

Miembro Todos (All Member)

Por defecto, cada jerarquía posee un nivel superior, que contiene un único miembro: el
miembro Todos. Puede desactivarse, pero en este caso es preciso definir un miembro por
defecto.

Miembro por defecto (default member)

Cada jerarquía de atributos puede tener un miembro por defecto. Si no se define, toma el
valor del miembro Todos. Si se define, crea un filtro automático para el valor asignado,
incluso si no sobrecargamos el valor por defecto. Por ejemplo, definir el año 2007 como
miembro por defecto del atributo año, hace que todas las consultas en que no se precise el
año devuelvan resultados relativos al año 2007. Por defecto, el volumen de ventas será el
del 2007. El miembro por defecto puede ser una expresión MDX.

Miembro desconocido (Unknown member)

ShareVideos
El miembro desconocido de la dimensión permite asignar a un miembro todos aquellos
hechos en que la clave dimensión de la tabla de hechos valga Null o sea inexistente
(violación de integridad referencial). Por defecto, el miembro desconocido no existe. Si está
activado, bien sea visible o invisible, es común a todos los atributos de la dimensión.

Dimensión padre-hijo

Una dimensión padre-hijo tiene una profundidad variable. La tabla relacional de la


dimensión contiene una relación sobre sí misma. El ejemplo más corriente es la
organización jerárquica de empleados en una empresa.

Se trata de una funcionalidad muy práctica, aunque su uso debe limitarse a pocos
miembros. En el caso de una dimensión demasiado importante el rendimiento no estará a la
altura del tiempo de espera necesario por parte de los usuarios finales. Recuerde que
siempre existe un modo de desnormalizar.

2. Asistente de dimensión

En el Explorador de soluciones, el menú contextual permite añadir una nueva dimensión.


Esta operación la realiza el Asistente de Dimensión.

1. Cree un proyecto de Analysis Services en el estudio de desarrollo.


2. Agregue un origen de datos que apunte a la base de datos SQL
AdventureWorksDW2008R2.

1. Agregue una vista del origen de datos que contenga la tabla DimPromotion.

1. Inicie el asistente de Dimensión seleccionando la opción Nueva Dimensión.


2. Seleccione el primer modo de creación de dimensión: Usar una tabla existente.

1. En la etapa siguiente, especifique la tabla DimPromotion como fuente de datos


principal.
2. La clave definida automáticamente es PromotionKey. Como se trata de una clave de
sustitución, seleccione abajo del todo una columna de nombre para el atributo clave.

ShareVideos
1. La etapa siguiente le permite definir los demás atributos y especificar si son parte de
una jerarquía de atributos (columna Habilitar exploración).
2. Seleccione Discount Pct para mostrarlo como jerarquía.
3. Seleccione Spanish Promotion Type para mostrarlo como jerarquía.
4. Seleccione las cuatro últimas columnas. No las marque como jerarquía de atributos.

1. Pase a la última etapa para indicar el nombre de la dimensión.

1. Finalice el asistente.

La dimensión creada se muestra en el editor de dimensión.

3. El editor de dimensión

El editor de dimensión se compone de cuatro pestañas:

 Estructura de dimensión:

En esta pestaña, el estudio de desarrollo le propone definir los atributos a partir de la


vista del origen de datos, y a continuación crear las jerarquías. Una gran parte del
trabajo efectuado aquí se sitúa en el panel de Propiedades y consiste en definir las
propiedades de la dimensión, sus atributos y las jerarquías.

 Relaciones de atributo:

Esta pestaña le permite definir la integridad relacional entre los atributos mediante
la creación de relaciones de atributo.

 Traducciones:

En un entorno internacional, puede indicar traducciones de los metadatos y de los


miembros a los usuarios finales.

 Examinador:

La pestaña Examinador es muy útil para probar la dimensión. Resulta


imprescindible probar completamente cada dimensión antes de usarla en el cubo.

ShareVideos
4. Propiedades de la dimensión

Para mostrar las propiedades de la dimensión, haga clic en la dimensión, y a continuación


haga clic derecho en el área de atributos, que se encuentra en la pestaña de Estructura de
dimensión, y seleccione a continuación Propiedades en el menú contextual.

Además del nombre de la dimensión, las propiedades más importantes son las siguientes:

 Tipo:

SSAS propone numerosos tipos de dimensiones aunque solamente Time y Account


tienen un verdadero efecto sobre el motor. Las demás están destinadas a
aplicaciones clientes de BI. La dimensión de tipo Time permite al motor efectuar
cálculos sobre los periodos.

 ErrorConfiguration:

Se utiliza para la gestión de errores y es, de hecho, un grupo de propiedades. Es


preciso asegurarse que la propiedad KeyDuplicate posee el valor
ReportAndContinue o ReportAndStop. En algunos casos SSAS ignora errores de
violación de clave por defecto y esto tiene como consecuencia que el usuario final
encuentre cantidades erróneas.

 ProcessingMode:

Permite definir el modo de procesamiento. En el caso estándar, los índices y las


agregaciones ligados a la dimensión se recalculan antes de publicar la dimensión
actualizada. Con la opción LazyAggregation, usted puede pedir al motor que
publique la dimensión, y que a continuación se efectúen los recálculos de forma
retroactiva. Evidentemente, con esta opción, las modificaciones estarán disponibles
más rápidamente, aunque los tiempos de respuesta para los usuarios pueden verse
perjudicados.

 StorageMode:

MOLAP o ROLAP. El interés de ROLAP parece muy limitado en este caso.

La opción InMemory ha hecho su aparición entre las opciones de StorageMode. Está reservada a la
creación de PowerPivot. Es imposible explotarla desde el estudio de desarrollo de BI.

 AttributeAllMemberName:

Nombre del miembro All para todos los atributos de la dimensión. Este nombre,
parametrizado a nivel de la dimensión, lo comparten todos los atributos. Por defecto

ShareVideos
la propiedad está vacía, en cuyo caso vale All. Modifíquela para mejorar la
experiencia del usuario final.

5. Estructura: atributos y herencia

La pestaña Estructura de dimensión permite en primer lugar definir los atributos de la


dimensión a partir de las columnas de la vista del origen de datos. Es posible crear una
dimensión a partir de una única tabla, como en el esquema en estrella, o a partir de varias,
como en el esquema en copo de nieve.

Para añadir un atributo, deslice en la zona Atributos un campo proveniente de alguna de las
tablas mostradas en el área de Vista del origen de datos. A continuación haga clic derecho
sobre este nuevo atributo y seleccione Propiedades.

Las principales propiedades de un atributo de dimensión son las siguientes:

 AttributeHierarchyEnabled:

Define si el atributo constituye una jerarquía de atributos. Toda jerarquía que no


pertenezca a un eje de análisis, o que no tenga utilidad para analizar los datos,
debería desactivarse (False). Es el caso, por ejemplo, de la dirección del cliente o
del teléfono del empleado. Durante la fase de diseño es preciso limitar las jerarquías
de atributos a las estrictamente necesarias.

Se corresponde con la opción Habilitar exploración del asistente.

 Usage:

La mayoría de los atributos son de uso Regular. La clave de la dimensión es Key.


En el caso de una jerarquía de tipo Padre-Hijo, el atributo que constituye la clave
del padre es Parent.

 Origen/KeyColumns:

Conjunto de columnas de la DSV que definen la clave única del atributo. Se limita
generalmente a una columna: por ejemplo la clave de sustitución en un esquema en
copo de nieve.

Se creará un miembro por cada ocurrencia en la clave.

 NameColumn:

El nombre del miembro viene dado por una columna de la DSV. Si no se indica,
toma el valor de la clave.

 IsAggregatable:

ShareVideos
El atributo forma parte de un agregado. Esto significa que la jerarquía de atributos
dispone de un nivel All o Todos. Esta opción se escoge en el 99% de los casos.

 Type:

Igual que con la dimensión el tipo se usa para los atributos de dimensiones de tipo
temporal (Time) o contable (Account).

 OrderBy/OrderByAttribute:

Estas dos propiedades se usan para especificar el orden de los miembros del
atributo. Por defecto, el orden se realiza según la clave. Puede realizarse no obstante
según el nombre o según otro atributo. Pruebe sus atributos en la pestaña del
Examinador y corrija el orden si es necesario.

 AttributeHierarchyVisible:

Esta opción permite esconder al usuario una jerarquía de atributos. Cuando un


atributo ya pertenece a una jerarquía, es inútil proponer más jerarquías de atributo.
Ocúltela para simplificar la interfaz de usuario.

 DefaultMember:

El miembro por defecto de la jerarquía de atributo es el miembro All/Todos, a


menos que usted lo modifique aquí. Salvo en casos muy particulares, por ejemplo si
tenemos una dimensión Divisa de visualización, no es conveniente modificar esta
propiedad.

Propiedades de las jerarquías Padre-Hijo

 RootMemberIf:

Permite definir la regla que define el miembro tope de la jerarquía según cuatro
reglas prefijadas.

o ParentIsBlank = la clave de atributo es NULL, Ø o cadena vacía.


o ParentIsSelf = es su propio padre.
o ParentIsMissing = sin padre. El padre no existe.
o ParentIsBlankSelfOrMissing = la condición se cumple cuando se cumple al
menos una de las tres condiciones anteriores.
 NamingTemplate:

Permite dar un nombre de negocio al nivel de la jerarquía Padre-Hijo.

Propiedades de discretización

ShareVideos
La discretización consiste en segmentar los valores continuos. Por ejemplo, si la edad de los
pacientes va de 0 a 99 años, la discretización permite configurar tramos de edad.

 DiscretizationMethod:

Selección del método de discretización.

 DiscretizationBucketCount:

Número de tramos creados por el proceso de discretización.

Jerarquías

Para crear una jerarquía, basta con deslizar las jerarquías de atributos en la parte Jerarquías
y organizarlas en niveles. El mismo atributo puede pertenecer a varias jerarquías. Las
jerarquías deben corresponderse con las de los procesos de negocio de los usuarios finales.

El orden de las jerarquías en pantalla corresponde con el orden en que deberían aparecer en
las herramientas cliente. Modifíquelo sencillamente con el ratón si es necesario.

Las principales propiedades de las jerarquías son:

 Nombre:

El nombre de la jerarquía es muy importante. El valor por defecto Jerarquía no


debería servir.

 AllMemberName:

Nombre del miembro All de la jerarquía. La jerarquía tiene un miembro All si su


atributo de primer nivel tiene uno (definiendo la propiedad IsAggregatable a True).

6. Relación de atributos

En el estudio de desarrollo, la pestaña Relación de atributos se utiliza para definir la


integridad referencial entre los atributos. Es una de las etapas más importantes en la
construcción del cubo. Una buena definición en la relación de atributos permitirá a SSAS
precalcular los índices correctos y los agregados más adecuados.

SSAS 2005 situaba esta etapa de definición de atributos en la primera pestaña Estructura de
la dimensión. La edición 2008 tiene una pestaña dedicada para resaltar bien su importancia.

Toda relación enlaza un atributo origen a un atributo asociado. La relación significa que el
atributo origen tiene como padre al atributo asociado. Es decir, un miembro del atributo
origen está ligado a un único miembro asociado. Por ejemplo la fecha (10/10/2010) tiene
como padre el mes del año (Octubre 2010).

ShareVideos
Toda relación tiene una única propiedad importante: la RelationshipType. Una relación
puede ser flexible o rígida. Flexible significa que podrá variar a lo largo del tiempo, como
por ejemplo una relación jerárquica en la empresa. Rígida significa que es inmutable, como
las fechas de un calendario.

Por defecto, todas las relaciones son flexibles. Configurar una relación como rígida tiene
dos efectos. Por un lado, si evolucionara supondría un error para los cubos. Por otro, el
procesado incremental del cubo comienza suprimiendo las agregaciones ligadas a
relaciones flexibles para volver a calcularlas de nuevo, por lo que un cubo con relaciones
rígidas se procesará más rápidamente.

En caso de duda deje configurada una relación flexible, a menos que trabaje con un
volumen de datos donde el tiempo de procesado suponga un elemento crítico.

La propiedad Cardinality es una propiedad que parece interesante, pero que en realidad no tiene
ningún efecto. Oficialmente está reservada para una implementación futura.

Por defecto todos los atributos están ligados al atributo clave mediante una relación. Esto es
lógico, la clave es el nivel más fino.

El ejemplo del calendario es fácil de comprender. El día se relaciona con el mes, que se
relaciona con el trimestre, que se relaciona con el año. Decimos que el año está enlazado
indirectamente con el día. No obstante puede existir también una relación directa entre los
días y el año. En este caso SSAS muestra una advertencia: debe suprimir la relación directa
para garantizar un buen rendimiento.

Dé preferencia a las relaciones indirectas sobre las directas.

En una relación directa, SSAS calcula los valores para el año a partir de los días. En una
relación indirecta, los valores del año se calculan a partir de los trimestres. Dejar ambas
relaciones degrada el rendimiento del motor.

Las relaciones de atributos se definen igualmente para indicar al motor OLAP cómo
construir los valores agregados. Se revelan útiles a su vez si tiene en el cubo grupos de
medidas de diferentes niveles de agregación, por ejemplo: ventas diarias y ventas
mensuales. La relación definida entre el día y el mes permite al motor SSAS generar
correctamente esta situación.

Ejemplo de la dimensión Promoción

ShareVideos
La dimensión para las promociones, creada anteriormente con el Asistente de Dimensión,
posee relaciones de atributo por defecto, es decir, todos los atributos están ligados al
atributo clave.

Los usuarios pueden expresar la necesidad de realizar análisis según la jerarquía Categoría,
Tipo, Promoción.

El contenido de la tabla promoción es el siguiente:

PromotionKey PromotionName PromotionType PromotionCategory


1 Sin descuento Sin descuento Ningún descuento
Descuento por volumen Descuento por
2 Distribuidor
(entre 11 y 14) volumen
Descuento por volumen (de Descuento por
3 Distribuidor
15 a 24) volumen
Descuento por volumen (de Descuento por
4 Distribuidor
25 a 40) volumen
Descuento por volumen (de Descuento por
5 Distribuidor
41 a 60) volumen
Descuento por volumen Descuento por
6 Distribuidor
(más de 60) volumen
Liquidación de bicicleta de
7 Descatalogado Distribuidor
montaña, 100
Casco deportivo, Descuento de
8 Distribuidor
descuento: 2002 temporada
Bicicleta de carretera: 650, Inventario
9 Distribuidor
oferta especial excedente
Oferta de cubierta de Inventario
10 Cliente
montaña excedente
Casco deportivo, Descuento de
11 Distribuidor
descuento: 2003 temporada
Oferta de cuadro de Inventario
12 Distribuidor
carretera GB excedente
13 Promoción ‘Touring-3000’ Producto Nuevo Distribuidor
14 Promoción ‘Touring-1000’ Producto Nuevo Distribuidor
Venta de pedales a mitad Descuento de
15 Cliente
de precio temporada
Liquidación de bicicleta de
16 Descatalogado Distribuidor
montaña, 500, plateada

Con un simple análisis vemos que la misma Promoción puede pertenecer a más de una
categoría. Podríamos por tanto crear una jerarquía para el reporting pero en esta situación

ShareVideos
nunca sería una jerarquía natural. Todos los atributos estarán ligados a la clave, lo cual no
es muy satisfactorio: el motor SSAS tendrá en este caso poco valor añadido.

Existe por tanto un medio para crear una jerarquía natural. Basta con modificar el atributo
tipo de promoción para que tenga una clave compuesta: el tipo y la categoría. En esta nueva
situación cada tipo no tendrá más que un comercial.

1. Renombre el atributo Spanish Promotion Type por Type.


2. Renombre el atributo Spanish Promotion Category por Category.
3. Renombre el atributo Promotion Key por Promotion.
4. Deslice el atributo Category de la zona de Atributos hacia la zona Jerarquías. SSAS
crea una jerarquía llamada Jerarquía.

1. Deslice el atributo Type como nuevo nivel de la jerarquía recién creada.


2. Deslice el atributo Promotion como nuevo nivel de la jerarquía creada.
3. Renombre la jerarquía como Categoría - promociones.
4. Observe el aviso que indica que la jerarquía no está respaldada por las relaciones de
atributo.

Para crear la relación de atributos y una jerarquía natural es preciso modificar la clave del
atributo Type.

1. Despliegue las propiedades del atributo Type.


2. Busque un pequeño botón a la derecha de la propiedad KeyColumns y haga clic en
él.
3. Aparece el editor de Columnas de clave. Añada SpanishPromotionCategory como
clave y valide a continuación.

1. La clave del atributo es compuesta, por lo que es obligatorio informar la propiedad


NameColumn del atributo Type. Escoja SpanishPromotionType.

1. Pase a la pestaña Relaciones de atributo para definir las relaciones.

ShareVideos
Todos los atributos están ligados a la clave (Promotion). Para crear la jerarquía basta con
ligar Category a Type.

1. En la parte inferior de la pestaña Relaciones de atributo haga clic en la línea


Promotion - Category.
2. Despliegue el menú contextual de dicha línea y escoja la opción Editar relación de
atributo.
3. El atributo de origen es Promotion. Modifíquelo seleccionando Type.

1. Acepte.

Acaba de crear una jerarquía natural. Si el estudio de desarrollo le muestra dos advertencias
se debe a que los nombres de las relaciones no le parecen justos. Renómbrelas siguiendo las
instrucciones para hacer desaparecer las advertencias.

El nombre de una propiedad para el usuario final no es el nombre del atributo sino el nombre de la
relación.

7. Pruebas

Cada dimensión creada debería validarse y probarse. La prueba se hace utilizando un


servidor SSAS. La dimensión tiene que desplegarse y validarse. Las pruebas se hacen desde
la pestaña Examinador del editor de dimensiones.

La interfaz le propone las acciones siguientes:

 Jerarquía:

Use la lista desplegable para seleccionar y mostrar una jerarquía o una jerarquía de
atributos. Los miembros de la jerarquía aparecen en la zona principal. A
continuación debe validar su contenido, el orden, etc. Visualice las propiedades del
miembro, y valide las relaciones entre las propiedades y los miembros.

Verifique que no existen redundancias, que no hay demasiadas jerarquías. Póngase


en el lugar del cliente. ¿Sería capaz de escoger la dimensión que necesita?

 Reconexión:

Utilice esta acción para recargar una dimensión después de modificarla.

 Propiedades del miembro:

ShareVideos
Las propiedades del miembro son los atributos ligados a los miembros mostrados.
Es importante probar bien estas relaciones.

Ejemplo de la dimensión promoción

Le queda probar bien la jerarquía recién creada.

1. En la barra de herramientas de las relaciones de atributo escoja el segundo icono,


llamado Procesar.
2. Acepte y ejecute el reprocesado.
3. Cierre la ventana que muestra el estado de avance de la tarea.
4. Cierre la ventana de procesado.
5. En el editor de dimensiones, seleccione la pestaña Examinador.
6. Escoja la jerarquía recién creada y explórela.

Examinador - prueba de la jerarquía

Observe que en la lista de jerarquías, siguen apareciendo las jerarquías de los atributos Categoría,
Promoción y Type. Para aligerar la interfaz de usuario, conviene ocultarlas
(AttributeHierarchyVisible = False) dado que están accesibles en la nueva jerarquía.

Cubos
Una vez creadas y validadas las dimensiones, llega el momento de pasar a la creación del
cubo. El cubo se crea inicialmente con ayuda del Asistente de cubo, y a continuación se
enriquece en el editor de cubo.

1. Terminología
Medida

Una medida es un hecho, una columna en la tabla de hechos de la DSV. Para cada medida
hay que definir su función de agregación.

Grupo de medidas

Un grupo de medidas se corresponde con una tabla de hechos.

Dimensión de las medidas

ShareVideos
En el cubo se crea una dimensión más para las medidas. Las medidas son los miembros de
la dimensión de las medidas.

Miembro calculado

Un miembro calculado es un miembro de una dimensión, por ejemplo una medida,


expresado mediante una fórmula que se calcula a partir de medidas físicas o calculadas. La
fórmula es una expresión MDX.

La expresión medida calculada se usa para designar a un miembro calculado de la


dimensión de las medidas.

Dimensión de cubo

Una dimensión de cubo es una instancia de la dimensión en un cubo específico. De este


modo, una dimensión de cubo puede comportarse de forma ligeramente distinta a la
dimensión de la base de datos, o que la misma dimensión en otro cubo.

La dimensión de cubo es un enlace hacia la dimensión de la base de datos. No es una copia o una
imagen.

Atributo de cubo

Del mismo modo un atributo de la dimensión de cubo puede variar ligeramente respecto al
de la dimensión de la base de datos. También se puede ocultar o desactivar.

Jerarquía de cubo

Del mismo modo la jerarquía de cubo puede variar ligeramente respecto a la de la


dimensión de la base de datos.

Cubo

Un cubo es un conjunto de grupos de medidas y de dimensiones de cubo. El cubo contiene


muchos otros tipos de objeto como por ejemplo los miembros calculados. Un cubo puede
contener varios Data Mart.

Dimensión realizadora de funciones

Una Role Playing Dimension (RPG) es una dimensión que se usa varias veces con roles
distintos. La dimensión de tiempo puede servir para analizar fechas de facturas, fechas de
entrega, o fechas de envío.

Perspectiva

ShareVideos
La perspectiva permite exponer parte de un cubo y simplifica su uso a los usuarios finales.
No se trata de una gestión de permisos. Las perspectivas son el equivalente a las vistas en
SQL.

El uso y definición de perspectivas únicamente está disponible en la versión Enterprise de


SSAS.

KPI Indicadores clave de desempeño

Un KPI es una súper medida calculada que sirve para mostrar en pantalla un indicador de
nivel, un contador, un indicador de semáforo...

Acción

Una acción permite enriquecer la aplicación de BI desencadenando acciones tales como


abrir un informe SSRS, mostrar los datos detallados del origen de información...

Partición

De modo similar a las tablas SQL, las particiones SSAS permiten separar un grupo de
medidas en varios fragmentos, cada uno de ellos con ciertas propiedades: agregaciones,
frecuencias de actualización...

2. Asistente para cubos

En el Explorador de soluciones, el menú contextual permite añadir un Nuevo cubo. Esta


operación se realiza mediante el Asistente para cubos.

El Asistente para cubos le permite crear un cubo en seis etapas:

 Seleccionar método de creación.


 Seleccionar tablas de grupo de medida.
 Seleccionar medidas.
 Seleccionar dimensiones existentes.
 Seleccionar nuevas dimensiones.
 Finalización del asistente.

Seleccionar método de creación

Escoja Usar tablas existentes para crear un cubo a partir de la Vista del origen de datos
(DSV).

Selecciona tablas de grupo de medida

Escoja una o varias tablas de hechos en la DSV. Se creará un grupo de medidas por cada
tabla de hechos.

ShareVideos
Seleccionar medidas

Para cada grupo de medidas seleccione las medidas concretas que quiera usar.

La tecla [F2] le permite renombrar los grupos y las medidas.

Seleccionar dimensiones existentes

Esta etapa le ofrece la posibilidad de utilizar dimensiones de la base de datos para crear el
cubo y por tanto crear las dimensiones del cubo. Las dimensiones las detecta
automáticamente SSAS en función de las relaciones con las tablas de hechos seleccionadas,
definidas en la DSV.

Seleccionar nuevas dimensiones

SSAS le propone aquí crear nuevas dimensiones para las relaciones definidas en la DSV, y
que no se ha podido asociar en la etapa anterior.

Para cada dimensión nueva, la interfaz propone seleccionar las tablas del esquema en copo
de nieve.

La tecla [F2] le permite renombrar las dimensiones.

Finalización del asistente

La última etapa le pide indicar el nombre del cubo.

El asistente genera a continuación un cubo y eventualmente las nuevas dimensiones.


También detecta en la DSV las distintas relaciones entre los objetos para construir la
primera versión del cubo.

3. El editor de cubo

El editor de cubo se compone de varias pestañas:

 Estructura de cubo:

En esta pestaña, el estudio de desarrollo le permite definir los grupos de medidas a


partir de la vista del origen de datos y las dimensiones de la base de datos. Gran
parte del trabajo que se efectúa aquí se sitúa en el panel Propiedades y consiste en
asignar valores a las propiedades de los distintos objetos.

 Uso de dimensiones (Dimension Usage):

ShareVideos
En esta pestaña se definen las relaciones entre las dimensiones y los grupos de
medida en una tabla que recuerda a la matriz de bus del Data Warehouse tan
apreciada por Kimball.

 Cálculos:

Esta pestaña le permite añadir funcionalidades al cubo mediante expresiones MDX


(miembros calculados) y scripts MDX (comandos de script).

 KPI (Indicadores claves de desempeño):

Defina aquí los KPI a partir de expresiones MDX.

 Acciones:

Cree acciones para enriquecer la aplicación de BI.

 Particiones:

Permite definir las particiones en tiempo de desarrollo. El trabajo de


particionamiento es más bien una tarea de administración que se realiza en SSMS
en producción.

 Agregaciones:

Creación de las agregaciones ligadas a las particiones de los grupos de medida.

 Perspectivas:

En la edición Enterprise, en un cubo que comprenda varios DM donde los usuarios


finales provengan de distintas áreas de negocio, se aconseja crear una perspectiva
por perfil de usuario o por DM.

 Traducciones:

En un entorno internacional, puede definir traducciones de los metadatos para los


usuarios finales.

 Examinador:

El examinador le permite probar y validar el cubo que está desarrollando en una


tabla dinámica similar a las de Excel.

ShareVideos
Para comprender bien cómo se define un cubo, abra una solución SSAS. Por ejemplo, el de la
sociedad Adventure Works (C:\Program Files\Microsoft SQL
Server\100\Tools\Samples\AdventureWorks 2008R2 Analysis Services
Project\enterprise\Adventure Works.sln).

4. Estructura del cubo

El editor de estructura del cubo le permite definir las medidas y las dimensiones del cubo.
La vista del origen de datos está accesible para ayudarle a realizar esta tarea.

a. Medidas

En el cubo las medidas se agrupan en grupos de medidas, que se corresponden lógicamente


con las tablas de hechos.

Durante la etapa de desarrollo, las propiedades importantes de los grupos de medida son:

 Nombre:

No debemos nunca olvidar que el cubo es un elemento orientado al negocio. En


consecuencia, asigne el nombre más eficaz a cada grupo de medidas.

 Descripción:

De la misma forma la descripción se presenta como una ayuda para el usuario final
a través de las herramientas cliente. Piense en asignar una descripción que aporte
valor al negocio.

 StorageMode:

Escoja MOLAP para desarrollar su cubo.

Ciertos objetos o ciertas propiedades son modificables en varios pasos de la etapa de creación del
cubo. Si bien no todas las propiedades son críticas en el momento de la creación del cubo, sí son
críticas a la hora de alcanzar un buen rendimiento. Es el ejemplo de propiedades como
EstimatedRows que se definen en el Asistente para diseñar agregaciones.

Un grupo de medida contiene al menos una medida. Las medidas están ligadas a una
columna de la vista del origen de datos a excepción de las medidas donde la función de
agregación es Count, que están ligadas a una tabla.

Las propiedades más importantes de las medidas son:

ShareVideos
 Nombre:

El nombre de cada medida visible debe tener un significado evidente para los
usuarios de negocio.

 Descripción:

La descripción también está destinada a los usuarios finales.

 Origen (Source):

Indica el origen en la vista del origen de datos: columna o tabla según la función de
agregación. Esta propiedad no se modifica con frecuencia desde el panel de
propiedades. Por el contrario, use la opción Editar medida del menú contextual de la
medida.

 AggregateFunction:

La agregación más común es la suma (Sum). La función de agregación define la


forma en que se agregan los datos. SSAS, especialmente en la edición Enterprise,
propone una docena de funciones llamadas aditivas, semi-aditivas o no-aditivas.

Una medida aditiva es una medida donde la agregación se hace del mismo modo
para todas las dimensiones. El ejemplo más corriente es la suma (Sum) aunque el
máximo (Max), el mínimo (Min), y la cuenta (Count) son igualmente medidas
aditivas.

Count cuenta el número de líneas. Es el equivalente a realizar la suma de una columna que tenga
valor 1 en todas las líneas.

Según la referencia de Microsoft, Min y Max pueden considerarse funciones semi-aditivas en


ciertas ocasiones.

A la inversa, una medida semi-aditiva no puede agregarse de la misma forma en todos los
ejes, o bien sencillamente no puede agregarse. Es el caso del nivel de stock que puede
agregarse en base al eje de productos o al eje de tiendas, pero no en base al eje de tiempo.

Las medidas semi-aditivas hacen una suma en todos lo ejes a excepción del eje temporal.
LastNonEmpty calcula un valor para el último hijo que no esté vacío encontrado en la
dimensión tiempo; por ejemplo, para el mes de Enero de 2011, si el nivel de stock más
reciente que se conoce es el del 20 de Enero, éste será el valor devuelto.
AverageOfChildren calcula la media para los hijos de la dimensión tiempo. ByAccount

ShareVideos
permite gestionar las medidas de tipo contable (Account). Existen otras funciones semi-
aditivas menos interesantes: FirstChild, LastChild, FirstNonEmpty.

Microsoft indica que las medidas semi-aditivas están disponibles únicamente en la edición
Enterprise del producto. La realidad no obstante difiere. Las funciones reservadas a la edición
Enterprise son realmente: None, ByAccount, AverageOfChildren, FirstChild, FirstNonEmpty y
LastNonEmpty.

Es posible reproducir el comportamiento de una medida semi-aditiva utilizando cálculos MDX en


una edición Standard. No obstante el motor SSAS no realiza ninguna agregación sobre las medidas
calculadas. El rendimiento será por tanto peor.

Una medida no-aditiva no puede realizar ninguna agregación. El recuento de elementos


distintos (Distinct Count) es el ejemplo más utilizado. Ninguna agregación (None) devuelve
el valor almacenado en el cubo si es que éste existe.

Distinct Count cuenta el número de ocurrencias distintas contenidas en la columna de origen. Este
operador se usa por ejemplo para conocer el número de facturas en una tabla de hechos cuya
granularidad sea el nivel de línea de factura. Hacer una enumeración de elementos distintos sobre
no importa qué eje es una operación muy costosa en términos de cálculo. Por este motivo, SSAS
crea por defecto un grupo de medida dedicado para una medida que tenga esta función de
agregación. No intente desplazar esta medida a un grupo de medida ya existente, la experiencia
demuestra que dicha modificación provoca graves problemas de rendimiento. Siguiendo las
buenas prácticas de SSAS, limite en lo posible el uso de Distinct Count.

 Visible:

Es muy útil ocultar una medida. En este caso la medida puede explotarse mediante
una medida calculada.

Una medida invisible puede leerse desde cualquier consulta MDX.

 DataType:

Por defecto el tipo de datos de la medida es Inherited. Es decir, se define a partir de


la columna origen. No obstante, una suma de TinyInt podría superar la capacidad de
un TinyInt. Por ello, prevea un tipo bien dimensionado para alojar las medidas
agregadas.

ShareVideos
 FormatString:

Esta propiedad especifica el formato de visualización de la medida. La mayoría


parte de las herramientas cliente la tienen en cuenta.

 MeasureExpression:

Define una fórmula MDX simple que se usará durante el procesamiento del grupo
de medidas para calcular aquellos valores de los elementos hoja, es decir de nivel
atómico. A continuación los agregados se calculan por lo general a partir de las
hojas.

La expresión MDX puede ser la división de una medida por otra, o bien la
multiplicación. Una medida debe ser fuente de información, mientras que la otra
puede pertenecer a un grupo de medidas distinto. La relación entre ambas se realiza
a partir de la dimensión.

Un ejemplo clásico de esta funcionalidad es la conversión de divisas, o el cálculo de


un importe a partir del precio unitario. Aunque ambas medidas pertenecen a la
misma tabla, dé preferencia a una columna ya calculada en la base de datos origen o
en la vista del origen de datos.

El orden de los grupos de medidas y el orden de las medidas en el interior del grupo pueden
modificarse simplemente desplazándolas o arrastrándolas.

b. Dimensiones

Las dimensiones, definidas en la base de datos, que están ligadas al cubo se definen en esta
pestaña. Si sigue el consejo de no tener más que un cubo por base de datos, debería
encontrar aquí todas las dimensiones. En el caso de una dimensión realizadora de
funciones, deberá añadirse siempre y cuando tenga funciones que desempeñar en su cubo.

Sus dimensiones, creadas en la base de datos, responden a su propia necesidad. La posibilidad de


modificarlas en el cubo se usa básicamente para aquellas dimensiones realizadoras de funciones.
En efecto, la dimensión tiempo puede contener una jerarquía de calendarios contables y tratarse
de una funcionalidad que no tiene ningún interés para su call-center.

El panel Dimensiones permite modificar las propiedades de cada dimensión y de cada


jerarquía y cada atributo que existen en el interior de las dimensiones.

Las propiedades principales de las dimensiones de cubo son:

ShareVideos
 Nombre:

Se usa en el caso de una dimensión realizadora de varias funciones para especificar


la función que se quiere realizar.

 Orden:

Desplace o arrastre las dimensiones para especificar el orden de visualización en la


interfaz de usuario. Las dimensiones más utilizadas deberían situarse al principio.

El orden de las dimensiones afecta a los cálculos. Es el caso de operadores unitarios en las
dimensiones padres-hijos (http://msdn.microsoft.com/en-us/library/ms175417.aspx)

Las propiedades de las jerarquías de cubo son:

 Enabled:

Permite activar o desactivar una jerarquía.

 Visible:

Hace visible una jerarquía cuando desea utilizarla en las consultas (informes
estáticos) pero no desea que los usuarios finales realicen análisis dinámicos.

Las propiedades de los atributos del cubo son:

 AttributeHierarchyEnabled:

Permite activar o desactivar una jerarquía de atributo.

 AttributeHierarchyVisible:

Hace visible una jerarquía de atributo cuando desea utilizarla en las consultas
(informes estáticos) pero no quiere que los usuarios finales realicen análisis
dinámicos.

 AggregationUsage:

Precise al motor cómo debe construir las agregaciones, entre las opciones Full,
None, Unrestricted y Default (véase el capítulo Ultimar la base de datos SSAS -
Diseño de la agregación).

ShareVideos
c. Cubo

Algunas propiedades del cubo pueden actualizarse haciendo clic sobre el cubo en lo alto de
la lista de medidas.

 Nombre:

Defina un nombre que tenga significado para los usuarios de negocio.

 DefaultMeasure:

Cuando en una expresión MDX no se ha especificado ningún miembro de la


dimensión, el motor utiliza la medida definida aquí.

5. Uso de dimensiones

La pestaña Uso de dimensiones (Dimension usage) se utiliza para definir la relación que
enlaza cada dimensión con cada grupo de medidas.

Como en la pestaña anterior, las dimensiones representadas aquí son dimensiones de cubo:
existen tantas ocurrencias de una dimensión como roles tiene. Este rol se define creando
una relación con la tabla de hechos.

Aquí es posible, al igual que en la pestaña anterior, añadir una dimensión de cubo (o una función
realizada por una dimensión) y editar sus propiedades.

Cada cruce entre las dimensiones y los grupos de medida permite Definir una relación
haciendo clic en el botón cuadrado que aparece a la derecha cuando se hace clic sobre la
casilla de cruce.

Las dos relaciones principales que conviene conocer son:

 Ninguna relación:

La dimensión no tiene un enlace relacional con la tabla de hechos. Cualquier


selección sobre un miembro de esta dimensión no tendrá ningún efecto sobre las
medidas de este grupo. Es el caso de la dimensión de empleados y los hechos de
ventas por Internet. Ningún vendedor interviene en el caso de una venta en línea.

 Normal:

ShareVideos
Este tipo de relación describe el enlace normal de la modelización en estrella entre
una tabla de hechos y su dimensión. Esta debería ser la relación usada más a
menudo en su cubo.

Una relación normal permite definir el nivel de granularidad, es decir, el atributo de


la dimensión que está ligado a la tabla de hechos. En general, este atributo es la
clave de la dimensión y se informa correctamente por defecto. No obstante, es
posible gestionar tablas de hechos con distintos niveles de granularidad. Por
ejemplo, las ventas pueden expresarse por día y los objetivos por mes. El atributo de
granularidad de la relación normal permite gestionar este caso sin problema.

En todos los casos, y de forma especial en el caso de una dimensión realizadora de


funciones, usted define en la relación la columna o columnas del grupo de medidas
ligadas al atributo de granularidad.

Existen tres relaciones más complejas que enriquecen las posibilidades del cubo:

 Hechos:

Puede usarse cuando la tabla de hechos es también una dimensión. El caso típico es
la enorme dimensión (very large dimension) de las facturas que contengan un
número de factura y varias líneas por factura. Este caso no es el propio de un
proyecto de BI, mostrar este tipo de información, aunque a menudo se nos pida por
parte de los usuarios finales.

La dimensión de hechos SSAS corresponde con el concepto de dimensión


degenerada.

 Referencia:

En el caso de un modelo en copo de nieve puede darse el caso de que una tabla de
dimensión esté enlazada directamente a una tabla de hechos (en estrella) o bien
enlazada indirectamente a otra mediante una referencia a una tabla de dimensión
intermedia. A su vez, varias dimensiones podrían compartir los mismos atributos. El
tipo de relación Referencia permite enlazar una dimensión a una tabla de hechos
usando una dimensión intermedia.

Por ejemplo, los atributos geográficos son comunes a las dimensiones de cliente,
tienda, etc.

Por ejemplo, los territorios de venta son una propiedad de los comerciales
(Employee). Es posible enlazar la dimensión de los territorios con la tabla de hechos
de los objetivos de venta creando una referencia con su dimensión de comerciales.

ShareVideos
Aquí la dimensión de los territorios se denomina dimensión de referencia mientras
que la dimensión de los comerciales se denomina dimensión intermedia.

Para crear una referencia es preciso añadir a la dimensión intermedia una jerarquía de atributos
correspondiente a la clave de referencia.

Una relación de referencia puede materializarse o no. Defina esta propiedad en la pantalla
Definir una relación marcando la casilla Materializar.

Una referencia materializada genera agregaciones, igual que si ambas dimensiones no


fuesen más que una sola, en el momento de procesado del cubo.

 Ventaja: las consultas presentan un rendimiento mejor dado que se usa toda la
capacidad del motor OLAP.
 Inconveniente: la relación materializada no evoluciona sino con el procesado el
cubo y este procesado se vuelve más largo.

Una referencia no materializada se resuelve dinámicamente cuando se consulta el cubo.

 Ventaja: la relación evoluciona dinámicamente con la dimensión intermedia y el


procesado del cubo dura menos tiempo y es menos restrictivo.
 Inconveniente: no se aprovecha la potencia del motor OLAP. Los cálculos de las
agregaciones se realizan dinámicamente bajo demanda por parte del usuario. Por
este motivo, se desaconseja el uso de esta funcionalidad para SSAS. Todo depende
del volumen de cálculos dinámicos que va a generar esta referencia.

La referencia que forma parte del cubo del ejemplo AdventureWorks enlazando territorios
comerciales con los empleados puede no materializarse puesto que los empleados que son
comerciales, y por tanto están asociados a un territorio, no son más que catorce. El cálculo
dinámico sobre un número tan reducido de miembros no debería penalizar demasiado los tiempos
de restitución de datos.

 Varios a varios (Many to many):

Típicamente la relación entre una dimensión y una tabla de hechos es de tipo uno a
varios: por cada miembro de la dimensión, existen varios registros en la tabla de
hechos. La relación Many to many permite gestionar aquellos casos donde, por cada
línea de la tabla de hechos, puede haber varios miembros de la dimensión. Es el
caso de los motivos de compra. Varios motivos de compra pueden ser la causa de
una venta. La relación Many to many provoca la aparición de una tabla cruzada, o
tabla de relaciones, entre la tabla de hechos y la dimensión. Esta tabla de relación se

ShareVideos
implementa en el uso de la dimensión como un grupo de medidas (eventualmente
sin medida).

La relación Many to many permite igualmente modelar una tabla de enlace entre
dos dimensiones. Por ejemplo, en un banco puede abrirse una cuenta para varios
clientes, y un cliente puede tener a su nombre varias cuentas.

Las relaciones Many to many, igual que las vistas no materializadas, provocan
cálculos dinámicos en el momento de consulta. En este caso no interviene la
potencia del motor OLAP.

En su libro The many-to-many revolution (http://www.sqlbi.com/Default.aspx?tabid=80), Marco


Russo, expone varios usos de la relación Many to many. Piense, no obstante, que todos estos
casos son válidos únicamente si su relación no concierne más que a una pequeña cantidad de
hechos. En su ejemplo de distinct count fija este límite a 10 millones. Esto ya es demasiado. Igual
que con la relación referenciada no materializada, los cálculos dinámicos generados por esta
relación dinámica deberían estar acotados. Por el contrario, la elección de la técnica OLAP debería
justificarse. La regla de oro debería ser la desnormalización y la creación de agregaciones.

6. Procesado y verificación del cubo

Una vez efectuado el trabajo en las dos primeras pestañas, los fundamentos del cubo están
en su sitio: las dimensiones, los grupos de medidas y sus relaciones. Es inútil ir más lejos
sin probar y asentar esta primera parte.

La primera verificación debería ser funcional, y a continuación debería ajustar la


volumetría.

En la suite de desarrollo usted añadirá expresiones MDX sobre esta capa. Gran parte de estas
expresiones se calculará dinámicamente en tiempo de consulta. Además de estar orientada al
negocio, su capa base debería estar orientada a las agregaciones. La mayor parte de los
requerimientos por parte de los usuarios finales deberían explotar el motor de agregaciones y
evitar por tanto la lectura de los datos atómicos.

La tarea de validación se hace en la pestaña Examinador del editor de dimensiones.

1. En la barra de herramientas de una de las dos pestañas, escoja el icono


correspondiente a la acción de Procesar.
2. Valide y ejecute el proceso.
3. Cierre la ventana de Progreso del proceso.

ShareVideos
1. Cierre la ventana de proceso.
2. En el editor del cubo seleccione la pestaña Examinador.

El examinador de prueba es una herramienta próxima a la tabla de referencias cruzadas de


Excel.

Use las teclas [Ctrl] E para pasar directamente a Excel.

En teoría, la capa de negocio proporciona a los usuarios finales un número limitado de


objetos. Conviene no obstante probarlos todos bien, uno a uno, y a continuación de forma
combinada. Verifique el comportamiento de las medidas, sobretodo en el caso de tener
relaciones especiales.

A pesar de todo, consultar el cubo puede volverse una tarea compleja debido a la extensa
variedad de dimensiones y jerarquías que se ofrecen al usuario final. Tenga cuidado de no
ahogarse entre tantos ejes de análisis y medidas. Consultas dinámicas generadas fácilmente en
herramientas como Excel podrían resolverse de forma más rápida mediante procesos en el motor
SSAS. Cuanto más combine los ejes para un nuevo fin más dura será la carga que tendrá que
asumir. En la edición Enterprise, las perspectivas proporcionan desde un modelo simplificado
hasta una herramienta de consulta dinámica.

Realice un sondeo acerca de las herramientas que van a usar los usuarios finales. Recientemente,
tras la llegada de una herramienta cliente que no permite filtrar sobre el nivel All de una jerarquía,
ha sido preciso modelizar un equivalente de esta funcionalidad dentro de la dimensión para poder
realizar ciertos cuadros de mando.

Despliegue de la base de datos SSAS


A lo largo del proyecto, SSAS proporciona distintas soluciones para desplegar la base de
datos OLAP.

ShareVideos
1. Formas de despliegue desde el estudio de desarrollo

El estudio de desarrollo proporciona al usuario dos formas de editar una base de datos
SSAS.

Modo proyecto

El modo proyecto es el método habitual hasta la actualidad. En este modo el estudio


permite, como para todo proyecto de desarrollo, crear una solución y un proyecto de Visual
Studio. El proyecto contiene archivos XML de todos los objetos creados.

El desarrollo se realiza en modo desconectado del servidor de desarrollo. Las conexiones a


este último son puntuales para desplegar, probar y verificar la base de datos en tiempo de
creación.

Permite usar una herramienta de gestión de orígenes de datos, por lo que facilita el trabajo
en equipo.

Existen dos formas de trabajar en modo proyecto sobre una solución SSAS.

La primera consiste en crear un proyecto nuevo vacío en el estudio de desarrollo.

1. Abra BIDS desde la ruta del menú Inicio: Inicio - Microsoft SQL Server 2008 R2 -
SQL Server Business Intelligence Development Studio.
2. En el menú Archivo - Nuevo, seleccione Proyecto.
3. Entre las Plantillas instaladas de Visual Studio, escoja Proyecto de Analysis
Services.

La segunda consiste en importar una base de datos OLAP en un proyecto nuevo dentro del
estudio de desarrollo.

1. Abra BIDS desde la ruta del menú Inicio: Inicio - Microsoft SQL Server 2008 R2 -
SQL Server Business Intelligence Development Studio.
2. En el menú Archivo - Nuevo, seleccione Proyecto.
3. Entre las Plantillas instaladas de Visual Studio, escoja Importar base de datos de
Analysis Services.

Si se tienen permisos de acceso a la base de datos SSAS el estudio de desarrollo importa el


conjunto de componentes en un nuevo proyecto.

Modo conectado

ShareVideos
A diferencia del modo anterior, y tal y como indica su nombre, el modo conectado permite
trabajar en el estudio de desarrollo conectado directamente a una base de datos SSAS.
Modificar un objeto y guardar los cambios basta para desplegar una nueva versión o
evolutivo.

El estudio crea igualmente una solución y un proyecto, aunque este último no contiene más
que la referencia a la base de datos.

1. Abra BIDS desde la ruta del menú Inicio: Inicio - Microsoft SQL Server 2008 R2 -
SQL Server Business Intelligence Development Studio.
2. En el menú Archivo - Abrir seleccione Análisis de base de datos de servicios.

Este modo le permite crear a su vez una base de datos vacía.

2. Despliegue en tiempo de desarrollo

En la vista de proyecto, el menú contextual de la solución le permite definir sus opciones de


despliegue.

El despliegue es la operación mediante la cual se cargan las modificaciones de los objetos


en el servidor SSAS. Registra los metadatos del proyecto del estudio de desarrollo en el
servidor de despliegue. Por lo general viene seguido de un procesado.

El procesado (Process en inglés) es la operación que consiste en cargar los datos desde los
orígenes de datos en las estructuras OLAP de la base de datos SSAS en el servidor de
despliegue.

Según la elección del servidor y de la base de datos de despliegue, las opciones son:

 Despliegue transaccional

Permite desplegar el conjunto de objetos en una transacción. En caso de error, el


despliegue completo se aborta.

 Modo de despliegue

Especifica si todos los objetos son desplegados sistemáticamente, o solamente


aquellos objetos modificados tras el primer despliegue (compara el destino con la
solución del estudio de desarrollo).

 Opción de procesado

ShareVideos
Por defecto, únicamente se inician aquellas operaciones de despliegue necesarias.
Es posible pedir que se procese la base de datos completa o pedir que no se procese
nada.

Para desplegar el proyecto, el estudio genera un archivo XML en la carpeta \bin del
proyecto con el nombre del proyecto y la extensión asdatabase. Este script de despliegue se
ejecuta a continuación sobre el servidor de despliegue.

Durante la generación de la solución (Build), el estudio crea dentro de la carpeta \bin del
proyecto cuatro archivos con el nombre del proyecto y las extensiones:

 asdatabase

Contiene la descripción de todos los objetos de la base de datos.

 deploymenttargets

Contiene únicamente las coordenadas de la base de datos destino de despliegue: el


nombre del servidor y el nombre de la base de datos.

 deploymentoptions

Contiene las opciones de despliegue fijadas en BIDS, así como varias opciones que
son necesarias para el despliegue en los entornos de producción.

 configsettings

Contiene la definición de los orígenes de datos.

3. Asistente de despliegue

Sólo se aconseja realizar el despliegue desde el estudio de desarrollo en el entorno de


desarrollo, para el resto de entornos (integración, preproducción, producción) se
desaconseja. El Asistente de despliegue (Deployment Wizard) está disponible a tal efecto.

Puede ejecutarse en modo interactivo.

1. Abra el asistente en la ruta del menú Inicio: Inicio - Microsoft SQL Server 2008 R2
- Analysis Services - Deployment Wizard.

También puede ejecutarse por línea de comandos. El funcionamiento de este modo viene
descrito con detalle en: http://msdn.microsoft.com/en-us/library/ms162758.aspx. El modo
de línea de comandos permite hacer exactamente lo mismo que el modo interactivo.

ShareVideos
El modo interactivo muestra varias pantallas que permiten modificar el contenido de tres archivos
que acompañan al archivo .asdatabase. Por línea de comandos, deberá modificar manualmente
estos archivos antes de ejecutar la herramienta. Ambos modos, asistente y línea de comandos,
realizan las mismas operaciones: crean un script XMLA de despliegue y a continuación salvan y
despliegan este script.

El despliegue consiste en crear un script XMLA de despliegue y desplegarlo en un servidor.


El script XMLA contiene dos secciones. La primera contiene el conjunto de metadatos que
describen la base de datos que queremos desplegar. La segunda contiene el comando para
procesar los objetos desplegados. El script XMLA fusiona en un único archivo los cuatro
archivos generados por el estudio en la carpeta \bin.

El asistente únicamente pide el archivo .asdatabase, aunque en realidad usa los cuatro archivos.

En un entorno de producción el asistente de despliegue es una herramienta útil aunque su


principal inconveniente es que necesita un número de parámetros de configuración muy
elevado. Lo más habitual en un departamento de servicios informáticos de una empresa es
que la creación de un script XMLA de despliegue y procesado y su ejecución posterior
sobre la base de datos de producción se realice por dos equipos distintos. El asistente de
despliegue permite realizar únicamente la primera de las dos operaciones. La segunda
podría realizarse vía SSMS, pero lo ideal en un marco de industrialización de proyectos de
BI es disponer de una herramienta por línea de comandos similar a SQLCMD para ejecutar
el script XMLA sobre el servidor destino.

Microsoft proporciona una herramienta ASCMD similar a SQLCMD que le permite ejecutar muchas
de las operaciones por línea de comandos. El único inconveniente es que Microsoft solamente
entrega las fuentes C# de esta herramienta. De usted depende la compilación del ejecutable, a
menos que encuentre un archivo ASCMD.EXE y lo descargue. Toda la información acerca de esta
herramienta imprescindible se encuentra en la página http://msftasprodsamples.codeplex.com/
en la sección Command-line Utility Sample.

Alimentación de la base de datos OLAP


La acción de alimentar las estructuras OLAP a partir de los datos de origen se denomina
procesar (process). Es posible iniciar el procesado de forma manual o mediante
programación. SSAS propone igualmente, en la edición Enterprise, un modo llamado de
almacenamiento en caché automático (Proactive caching) que asegura que se actualicen los
objetos de la base de datos sin tener que iniciar explícitamente su procesado. El
almacenamiento en caché automático se describe más adelante en este libro (véase el

ShareVideos
capítulo Ultimar la base de datos SSAS, sección Almacenamiento y particiones -
Almacenamiento en caché automático).

Procesar un objeto consiste en leer los datos del origen de datos y cargarlos en la estructura
física (archivo) OLAP.

El procesado lo inicia un script XMLA transferido al servidor SSAS.

Los objetos que se deben procesar son las dimensiones y los grupos de medidas. Se trata de
dos operaciones distintas. El procesado de la base de datos permite unirlas, aunque
entonces quedan disponibles muy pocas opciones.

1. Opciones de procesamiento

La siguiente tabla muestra el conjunto de opciones de procesamiento por tipo de objeto


("por defecto" indica que es la opción por defecto para este tipo de objeto).

Opción de Grupo de Base de


Traducción Dimensión Partición Cubo
procesamiento medidas datos
Procesado por Process
x x x x x
defecto Default
Procesado por por por por
Process Full x
completo defecto defecto defecto defecto
Procesar la Process por
actualización Update defecto
Deshacer el
Unprocess x x x x x
procesamiento
Procesamiento
Process Add x x x
incremental
Procesar los Process
x x x x
índices Index
Procesar los Process
x x x x
datos Data
Procesar la Process
x
estructura Structure

Por defecto el grupo de medidas está compuesto por una partición. En tal caso ambos objetos son
idénticos.

Un objeto puede contener a otros. En tal caso el procesado afecta tanto al objeto
seleccionado como a los objetos contenidos en él.

Descripción de cada opción:

ShareVideos
 Procesado completo

Efectúa un procesado completo de los objetos. El motor SSAS empieza


suprimiendo los datos almacenados en la base de datos OLAP y recargando los
metadatos, para después recargar los datos. Este modo es obligatorio cuando se ha
modificado la estructura del objeto.

 Procesar la actualización

Detecta las modificaciones que hay que realizar sobre la dimensión para que sea
coherente con los datos de origen. Este modo de procesamiento actualiza la
dimensión, sin afectar a los objetos dependientes.

Use sistemáticamente esta opción para el procesamiento de las dimensiones.

 Deshacer el procesamiento

Suprime los datos de la base de datos OLAP pero conserva los metadatos
(definiciones de los objetos).

 Procesamiento incremental

Este modo de procesamiento permite indicar al motor SSAS, a través de sus


opciones, cuáles son los datos nuevos que hay que añadir en una partición. El uso
del procesamiento incremental supone que se puede identificar en el origen de datos
aquellos hechos que se han añadido después del procesado anterior. También
requiere que se indique la configuración para definir nuevos hechos indicando una
tabla, una vista o una consulta.

El procesamiento incremental es inevitable para trabajar sobre volúmenes de datos importantes y


obtener tiempos de procesado y respuesta aceptables para los usuarios finales.

 Procesado por defecto

Realiza el procesamiento mínimo para garantizar que el objeto está completamente


procesado.

El procesamiento por defecto no puede acceder a la configuración del procesamiento incremental,


puesto que no es capaz de saber dónde se encuentran los datos que se tienen que añadir. Por

ShareVideos
tanto es posible que si usted mismo se encarga del procesamiento obtenga el mismo resultado
con menos operaciones que el procesamiento por defecto.

 Procesar los índices

Construye los índices y las agregaciones sin modificar los datos.

 Procesar los datos

Carga los datos en los objetos sin construir los índices ni las agregaciones.

 Procesar la estructura

Suprime los datos de las particiones del cubo y reconstruye las dimensiones.

2. Procesamiento desde SSMS

Como para el resto de tareas de administración, SSMS es la herramienta ideal. Para


procesar cualquier objeto basta con conectarse al servidor SSAS, desplegar en el
Explorador de objetos la base de datos y escoger la opción Procesar en el menú contextual
del objeto seleccionado.

Para procesar varios objetos a la vez hay que pasarle los detalles al Explorador de objetos
(tecla [F7]), seleccionando los objetos, y a continuación usar del mismo modo la opción
Procesar del menú contextual.

El botón Generar script nos permite obtener el script XMLA de procesamiento


correspondiente a la selección realizada. Gracias a esta funcionalidad, es posible crear
scripts de procesamiento más complejos y programarlos en el SQL Agent que dispone de
una tarea dedicada.

Ejecute el script desde cualquier herramienta que le permita enviar un comando XMLA a la base
de datos OLAP. Por ejemplo ASCMD.EXE, la tarea DDL de ejecución SQL Server Analysis Services
presente en SSIS, o incluso un desarrollo .NET. En el caso de un procesamiento incremental,
también es posible modificar dinámicamente la consulta al origen de datos y actualizar la cláusula
WHERE que filtra los registros a tratar.

ShareVideos
3. Procesamiento desde SSIS

En el flujo de control, SSIS proporciona dos tareas para procesar las bases de datos SSAS:
la tarea de procesamiento de SQL Server Analysis Services y la tarea de ejecución de DDL
de SQL Server Analysis Services.

En el flujo de datos, la edición Enterprise de SSIS contiene dos destinos que permiten
escribir directamente sobre la base de datos OLAP: Procesamiento de dimensiones y
Procesamiento de particiones.

Cuando utilice SSIS para actualizar la base de datos asociada, es lógico que realice a
continuación un procesamiento OLAP directamente desde SSIS. Usted elige entre iniciar el
procesamiento tras la actualización de cada tabla o agrupar todas las tareas de
procesamiento en una operación única.

Los siguientes componentes dan acceso a cada una de las dos posibilidades:

Tarea de procesamiento de SQL Server Analysis Services

Esta operación permite acceder exactamente a la misma funcionalidad de procesamiento


que el estudio de desarrollo o SSMS. Además, SSIS permite procesar varios objetos
heterogéneos (una partición y una dimensión, o dos particiones de grupos de medidas
distintos).

Tarea de ejecución de DDL de SQL Server Analysis Services

Esta operación permite ejecutar un script XMLA sobre la base de datos SSAS. Por ejemplo,
un script generado con ayuda de SSMS. Es similar al uso del comando SQL para ejecutar
operaciones DDL (Data Definition Language) sobre la base de datos SQL.

Al revés que la primera, esta tarea es muy flexible y permite implementar cualquiera lógica de
procesamiento incremental adaptándose mejor a las restricciones que impone la industrialización.
Incluso el comando XMLA de procesamiento permite configurar el identificador de la base de
datos, y sin embargo SSAS no permite realizar esta configuración en la primera tarea.

Destino de procesamiento de dimensiones

Este destino del flujo de control permite actualizar la dimensión sin tener que pasar por una
tabla relacional.

Esta forma de procesamiento de la dimensión es la única que ofrece un procesamiento


incremental puro. Permite a su vez el procesamiento completo o la actualización.

Destino de procesamiento de particiones

ShareVideos
Este destino del flujo de control permite actualizar la partición del grupo de medidas sin
tener que pasar por una tabla.

Las formas de procesamiento disponibles son incremental, completo y de los datos.

Ambos destinos se usan esencialmente en escenarios específicos de tiempo real sobre volúmenes
de datos pequeños.

Expresiones MDX
Las expresiones MDX (MultiDimensional eXpressions) son a las bases de datos
multidimensionales lo que SQL a las bases de datos relacionales. Es un lenguaje concebido
para realizar informes y análisis OLAP. En el marco específico de SSAS es útil, por un
lado, para leer la base de datos y extraer resultados y, por otro lado, para enriquecer la capa
de cálculos del modelo dimensional unificado. MDX es útil para ofrecer más
funcionalidades y datos de negocio estándar en la base de datos. Esto no impide a los
usuarios extraer del cubo sus propios cálculos, pero el estudio de desarrollo SSAS le
permite centralizar en la base de datos gran parte de ellos.

El uso de expresiones MDX para definir ciertas propiedades, como el miembro por defecto,
ya se ha explicado en el libro.

Este capítulo presenta algunas nociones sobre las expresiones MDX que le van a permitir
crear medidas calculadas, conjuntos nombrados, indicar propiedades como el miembro por
defecto, definir la seguridad de acceso...

MDX es un lenguaje de consulta para la creación de informes. Una parte del lenguaje está
dedicado a las expresiones. Una expresión es una fórmula que devuelve un valor (un entero, un
decimal, un miembro, un conjunto...).

1. Elementos de MDX

La base de datos multidimensional se organiza en torno al grupo de medidas. Cada grupo es


un conjunto de medidas que pueden analizarse según los ejes llamados dimensiones. La
dimensión se compone de las jerarquías de atributo. Cada jerarquía se compone de un
atributo ligado directamente, o mediante una relación, a un grupo. Cada jerarquía de
atributo debería verse como un eje de análisis.

Los miembros de un atributo son los valores posibles que puede tomar el atributo. Verde,
amarillo, rojo, todos son miembros del atributo color.

ShareVideos
La dimensión de las medidas es un caso particular. Esta dimensión tiene un único atributo y
una única jerarquía de atributo que contiene a los miembros: las medidas. No tiene
miembro All.

Cada jerarquía de atributo posee un miembro por defecto, en general el miembro All.

En una tabla, como en la hoja de cálculo Excel, toda celda que contenga un valor está
referenciada por su fila y su columna. Imagine que diseña un valor mediante una referencia
parcial, la columna por ejemplo. El valor será el resultado de la agregación de todas las
celdas de la columna. El motor MDX funciona del mismo modo con muchas más
dimensiones, más tablas y más valores... Las coordenadas de cada valor, de cada celda, se
llaman tuplas.

Tupla

Para conocer el volumen de ventas de zapatos de color rojo en 2010, basta con definir una
tupla a partir de los cuatro miembros:

 Volumen de ventas es una medida, es decir un miembro de la jerarquía de las


medidas.
 Zapato es un miembro de la jerarquía familia de productos.
 Rojo es un miembro de la jerarquía Color.
 2010 es un miembro de la jerarquía Año.

Esta tupla define una celda del cubo, calculada mediante la agregación de todas las celdas
subyacentes. Estas celdas se definen mediante la combinación de los miembros de las
jerarquías de atributo no definidas en una tupla, por ejemplo las tiendas o las tallas de
zapato.

Si el volumen de venta es el miembro por defecto del cubo, puede suprimirse de la tupla,
compuesta ahora por tres miembros.

Al revés, si por ejemplo se ha definido por defecto la tienda de Valladolid, la tupla


devolverá el volumen de ventas únicamente de la tienda de Valladolid.

Sustituya el volumen de ventas por la medida Número de visitantes de la tienda, que


pertenece a otro grupo de medidas que no está enlazada a la dimensión de productos. Los
miembros Zapato y Rojo no tienen impacto alguno sobre el valor devuelto.

Cada tupla define una celda del cubo y devuelve su valor. Esta celda se define a partir de su
coordenada, su miembro, sobre cada una de las jerarquías de atributo del cubo. Cada
jerarquía tiene un miembro por defecto, y es opcional usar la jerarquía en la tupla para
definir la celda. Si no se ha escogido ningún miembro para una jerarquía de atributo, se
utiliza el miembro por defecto.

ShareVideos
El contexto de evaluación de la tupla puede ser un subconjunto del cubo. En este caso los
miembros por defecto pueden reemplazarse contextualmente por otros.

Una tupla es la expresión MDX más sencilla.

La sintaxis para definir una tupla es una lista de miembros separados por comas, entre
paréntesis.

Un miembro puede definirse a partir de tres elementos separados por puntos: la dimensión,
la jerarquía de atributo y el miembro. Cada elemento puede situarse entre corchetes. Una
tupla se define de este modo:

([Medidas].[VolumenVentas], [Producto].[Familia].[Zapato], [Producto].


[Color].[Rojo], [Fecha].[Año].[2010])

Esta notación hace uso de los nombres de los miembros. Un miembro también puede
identificarse mediante su clave; se usa el carácter & para identificar la clave. En la misma
tupla, es posible utilizar una u otra notación.

([Medidas].[VolumenVentas], [Producto].[Familia].&[4], [Producto].


[Color].&[7], [Fecha].[Año].[2010])

Identificar una celda mediante una tupla es similar a identificarla en Excel. No obstante, no olvide
que cada jerarquía de atributo que no esté definida en la tupla se evaluará en función del
contexto, o en función del miembro por defecto si no hemos definido un contexto para el atributo.

La dimensión de las medidas es un caso particular. Una tupla devuelve un valor si se usa en este
sentido. En los demás casos, son realmente las coordenadas de la celda de la tabla.

Conjunto (Set)

Un conjunto se compone de una o varias tuplas que se definen sobre las mismas jerarquías
de atributos. Los miembros de las jerarquías deben aparecer en el mismo orden en todas las
tuplas.

El conjunto se identifica mediante llaves. Por ejemplo:

{([Date].[Calendar Year].&[2007],[Geography].[Country].&[France]),
([Date].[Calendar Year].&[2008],[Geography].[Country].&[Germany])}

Las tuplas intervienen en numerosas expresiones.

ShareVideos
2. Manipulación

Para crear tuplas y sets, utilice una consulta simple en SSMS.

1. Abra SSMS desde la ruta del menú Inicio: Inicio - Microsoft SQL Server 2008 R2 -
SQL Server Management Studio.
2. Conéctese a una instancia de SSAS con los cubos AdventureWorks.
3. En el Explorador de objetos, haga clic en la base de datos Adventure Works DW
2008R2, y a continuación despliegue el menú contextual y escoja la opción Nueva
consulta MDX.
4. Escriba el código que se muestra a continuación:

WITH
SET [Líneas] AS {([Date].[Calendar Year].&[2007],[Geography].
[Country].&[France]),([Date].[Calendar Year].&[2008],[Geography].
[Country].&[Germany])}
MEMBER [Measures].[Tuple] AS ([Measures].[Reseller Sales Amount],
[Product].[Category].&[3])
SELECT
{[Measures].[Tupla]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]

Esta consulta MDX crea un conjunto (SET) llamado Líneas, compuesto por dos tuplas. Se
crea también una medida, llamada Tupla, definida por una tupla. Para probar la consulta en
su conjunto se muestra el conjunto de líneas de la tabla y la medida como una columna.

En la consulta MDX, líneas y columnas forman un conjunto.

1. Pruebe la consulta haciendo clic en el botón Ejecutar.

Tupla
CY 2007 Francia $66,584.49
CY 2008 Alemania $28,005.90

1. Pruebe con la consulta siguiente:

WITH
SET [Líneas] AS {([Date].[Calendar Year].&[2007],[Geography].
[Country].&[France]),([Date].[Calendar Year].&[2008],[Geography].
[Country].&[Germany])}
SELECT
{[Product].[Category].&[3]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]

El motor MDX utiliza la medida por defecto para calcular los valores.

ShareVideos
Prenda
CY 2007 Francia $66,584.49
CY 2008 Alemania $28,005.90

Observe que el resultado devuelto por ambas consultas es el mismo. En la segunda no se


especifica la medida. La medida por defecto del cubo es por tanto [Reseller Sales Amount].

1. A continuación pruebe con esta última consulta.

WITH
SET [Líneas] AS {([Date].[Calendar Year].&[2007],[Geography].
[Country].&[France]),([Date].[Calendar Year].&[2008],[Geography].
[Country].&[Germany])}
SELECT
{[Product].[Category].&[3]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]
WHERE [Measures].[Reseller Order Quantity]

La cláusula WHERE se usa para definir un SLICER, un contexto de filtrado, que actúa en
este caso sobre la jerarquía de las medidas. Sobrecarga el miembro por defecto de esta
jerarquía.

Prenda
CY 2007 Francia 2,333
CY 2008 Alemania 1,034

Las tuplas y los conjuntos se basan en el lenguaje MDX. Estos elementos combinados con
los operadores y las funciones del lenguaje hacen infinitas las posibilidades de creación de
expresiones.

3. Medida calculada y miembro calculado


Margen bruto

El margen bruto se calcula restando el importe de las ventas del importe de compra.

Margen bruto = importe de venta - importe de compra

Del mismo modo, si el margen constituye un valor que puede agregarse en todas las dimensiones,
se calcula a partir de la diferencia de estas dos medidas. Crear el margen bruto como una medida
del cubo sería un error pues inflaría inútilmente las agregaciones creadas durante su
procesamiento. La modelización recomendada consiste en crear el margen bruto como una

ShareVideos
medida calculada, es decir una expresión MDX que se evaluará en el momento de realizar la
consulta.

Se puede añadir una expresión calculada desde la pestaña Cálculos en el editor del cubo.

1. Abra el cubo Adventure Works en el estudio de desarrollo.


2. Seleccione la tercera pestaña, Cálculos.
3. A partir de la barra de herramientas que aparece en esta pestaña, cree un Nuevo
miembro calculado.

Puede crear miembros calculados sobre cualquier dimensión. Comience por la dimensión de las
medidas, añadiendo las medidas calculadas. El uso de miembros calculados sobre otras
dimensiones exige mayor experiencia.

1. Indique entre corchetes el Nombre de la medida calculada.


2. No modifique la configuración por defecto de la Jerarquía padre, que apunta a las
medidas.
3. Introduzca la siguiente Expression.

[Measures].[Sales Amount] - [Measures].[Total Product Cost]

La propiedad Comportamiento si no está vacío es muy importante. Permite optimizar los cálculos.
El motor no efectuará el cálculo si al menos uno de los miembros indicados en esta lista no está
vacío. En el caso de tener miembros calculados complejos, esta propiedad evita tener que evaluar
este miembro en aquellas celdas que no sea necesario.

1. Indique el Comportamiento si no está vacío: Total Product Cost y Sales Amount.


2. Introduzca un Grupo de medida asociado (sólo en el caso de una medida calculada).
El grupo de medida asociado le permite reagrupar su medida calculada con otras
medidas de un grupo particular. De este modo será más legible para un usuario
final.
3. Guarde y despliegue los cambios.
4. Pruebe el cubo gracias a la pestaña Examinador.

Para asociar una descripción a su medida calculada, use el botón Propiedades de Cálculo que
aparece en la barra de herramientas de esta pestaña.

Porcentaje respecto a un nivel jerárquico superior

ShareVideos
Los usuarios quieren, por lo general, crear cuadros de mando donde las ventas aparezcan
desglosadas por periodo de calendario. A su vez, necesitan conocer el porcentaje del
periodo en el total del año.

La necesidad se resuelve realizando la división del importe de las ventas seleccionadas


entre el importe de ventas durante el año.

La función MDX ANCESTOR escala en la jerarquía y encuentra el padre de nivel deseado.


Devuelve un miembro.

ANCESTOR( «Miembro», «Nivel» )

La función CURRENTMEMBER permite conocer el miembro actual de la jerarquía.


Devuelve un miembro.

«Jerarquía».CURRENTMEMBER

Sea cual sea el contexto de ejecución de su expresión, todas las jerarquías (jerarquías y jerarquías
de atributo) tienen un miembro actual conocido. El conjunto de miembros actuales conforman el
contexto. Generalmente el miembro actual es el miembro ALL para la mayoría de las jerarquías.

Debemos efectuar una división del importe entre la tupla que evalúa el importe anual. Esto
se describe en la expresión siguiente:

[Measures].[Sales Amount]
/ ( ANCESTOR( [Date].[Calendar].CurrentMember, [Date].
[Calendar].[Calendar Year] ), [Measures].[Sales Amount] )

A nivel anual, o en el nivel superior ALL, no tiene sentido efectuar el cálculo: el resultado
debe ser 100%. La fórmula tiene que enriquecerse para contemplar este caso.

Todo miembro pertenece a un nivel de alguna jerarquía. Y cada nivel se caracteriza por un
entero llamado "ordinal". ALL es el nivel 0, los años el nivel 1...

La función LEVEL devuelve el nivel del miembro.

«Miembro».LEVEL

La función ORDINAL devuelve el entero ordinal del nivel.

«Nivel».ORDINAL

La expresión se convierte en:

Case When [Date].[Calendar].CurrentMember.Level.Ordinal <=

ShareVideos
1
Then 1
Else [Measures].[Sales Amount] /
( ANCESTOR( [Date].[Calendar].CurrentMember, [Date].
[Calendar].[Calendar Year] ), [Measures].[Sales Amount] )
End

Ya está en disposición de crear el nuevo miembro calculado:

1. Escoja la tercera pestaña, Cálculos.


2. Mediante la barra de herramientas de esta pestaña, cree un Nuevo miembro
calculado.
3. Indique entre corchetes el Nombre de la medida calculada: porcentaje de las ventas
en el año.
4. Introduzca la siguiente Expresión.

Case When [Date].[Calendar].CurrentMember.Level.Ordinal <= 1


Then 1
Else [Measures].[Sales Amount] /
( ANCESTOR( [Date].[Calendar].CurrentMember, [Date].[Calendar].
[Calendar Year] ), [Measures].[Sales Amount] )
End

1. Indique el Comportamiento si no está vacío: Sales Amount.


2. Indique el Grupo de medida asociado: Sales Summary.

1. Guarde y despliegue los cambios.


2. Pruebe el cubo gracias a la pestaña Examinador.

El lenguaje MDX posee numerosas funciones que abren posibilidades infinitas. Para mayor
detalle, diríjase a la página MSDN de referencia de las funciones MDX:
http://msdn.microsoft.com/en-us/library/ms145970.aspx

4. Miembro por defecto

Para definir el miembro por defecto, la expresión más sencilla consiste en indicar el
identificador de un miembro, igual que para las medidas.

Por ejemplo, para filtrar el cubo AdventureWorks en base al año 2007:

1. Abra la dimensión Date en el estudio de desarrollo.


2. Edite las propiedades del atributo Calendar Year.
3. En la propiedad DefaultMember, encontrará un botón cuadrado que le permite abrir
una ventana con tres opciones: ningún miembro predeterminado, escoger un
miembro estático entre los miembros existentes, introducir una expresión.

ShareVideos
4. Elija el miembro predeterminado, el año 2007. Observe que la expresión MDX en la
parte inferior de la ventana se actualiza automáticamente con el identificador del
miembro.
5. Guarde y despliegue los cambios, el cubo aparece filtrado en base al año 2007.

En el caso de una dimensión usada en un cubo como dimensión realizadora de alguna función, es
imposible introducir un miembro por defecto a través de la interfaz estándar. El siguiente ejemplo
asume que usted ha eliminado las dimensiones Delivery Date y Ship Date del cubo. SSAS permite
igualmente especificar un miembro por defecto de las dimensiones realizadoras de funciones
añadiendo un script al cubo.

1. Abra el cubo Adventure Works en el estudio de desarrollo.


2. Escoja la tercera pestaña, Cálculos.
3. Gracias a la barra de herramientas de esta pestaña, cree un Nuevo comando de
script.
4. Introduzca el siguiente código.

Alter Cube CurrentCube


Update Dimension [Date].[Calendar Year],
Default_Member = [Date].[Calendar Year].&[2007]

1. Guarde y despliegue.
2. Pruebe el cubo gracias a la pestaña Examinador.

En un escenario más evolucionado, los usuarios pueden solicitar que el filtro se calcule a
partir del año más reciente sobre el que existen ventas registradas. El objetivo sería filtrar
sobre el año en curso.

La propiedad DefaultMember de la jerarquía de atributo de la dimensión permite introducir una


expresión MDX, aunque debería estar ligada al perímetro de la dimensión. No debería usar
elementos externos tales como medidas, por riesgo de provocar un error en su despliegue. Para
crear este tipo de miembro por defecto debe usar un comando de script como en el caso de las
dimensiones realizadoras de funciones.

Para estudiar este escenario, ayúdese del modelo de la consulta MDX definido
anteriormente. Es útil para verificar la consulta MDX.

El atributo de los años en la dimensión de Fechas constituye un conjunto de medidas: los


años. Este conjunto de medidas podría recuperarse con la función MEMBERS.

La consulta es la siguiente:

ShareVideos
WITH
SET [Líneas] AS {[Date].[Calendar Year].Members}
SELECT
{[Product].[Category].&[3]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]
WHERE [Measures].[Reseller Order Quantity]
Prenda
Todos los períodos 64,497
CY 2005 2,132
CY 2006 16,927
CY 2007 31,623
CY 2008 13,815
CY 2010 (NULL)

La primera línea Todos los periodos se corresponde con el atributo ALL de la jerarquía. Lo devuelve
la función MEMBERS puesto que es quien ha llamado a la jerarquía Calendar Year. La misma
función invocada para un nivel específico de la jerarquía de atributos no devuelve el miembro ALL.

La consulta es la siguiente:

WITH
SET [Líneas] AS {[Date].[Calendar Year].[Calendar
Year].Members}
SELECT
{[Product].[Category].&[3]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]
WHERE [Measures].[Reseller Order Quantity]

y devuelve:

Prenda
CY 2005 2,132
CY 2006 16,927
CY 2007 31,623
CY 2008 13,815
CY 2010 (NULL)

La sintaxis es la siguiente:

[Dimensión].[Jerarquía].MEMBERS

ShareVideos
[Dimensión].[Jerarquía].[Nivel].MEMBERS

Devuelve un conjunto de miembros. Observe que este conjunto viene ordenado. Esto es
debido a una buena construcción de la dimensión en la etapa de desarrollo.

El año más reciente con ventas registradas podría definirse como el último año del
subconjunto de años de donde se han excluido aquellos años sin ventas. La función
FILTER permite realizar un filtrado sobre un conjunto. Devuelve el conjunto filtrado.

FILTER( {Conjunto}, «Condition» )

La condición se define aquí como las celdas en las que hay ventas, es decir aquellas en que
la medida [Measures].[Order Count] contiene hechos.

La función ISEMPTY devuelve un valor booleano que indica si la expresión que le hemos
pasado devuelve resultado vacío.

ISEMPTY( «expression» )

La consulta siguiente:

WITH
SET [Líneas] AS {FILTER([Date].[Calendar Year].[Calendar
Year].Members, Not IsEmpty([Measures].[Order Count]))}
SELECT
{[Product].[Category].&[3]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]
WHERE [Measures].[Reseller Order Quantity]

devuelve todos los años con ventas registradas:

Prenda
CY 2005 2,132
CY 2006 16,927
CY 2007 31,623
CY 2008 13,815

Para obtener el último miembro, MDX provee la función TAIL que devuelve el último
miembro del conjunto.

TAIL( «Conjunto» )

Esto deja la expresión:

TAIL(FILTER([Date].[Calendar Year].[Calendar Year].Members,


Not IsEmpty([Measures].[Order Count])))

ShareVideos
Pruébela con la siguiente consulta:

WITH
SET [Líneas] AS {TAIL(FILTER([Date].[Calendar Year].
[Calendar Year].Members, Not IsEmpty([Measures].[Order
Count])))}
SELECT
{[Product].[Category].&[3]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]
WHERE [Measures].[Reseller Order Quantity]

El resultado es el esperado:

Prenda
CY 2008 13,815

Todas las funciones están accesibles en la interfaz de usuario del generador MDX del estudio de
desarrollo o del editor de la consulta MDX de SSMS. Las funciones son numerosas y vienen
agrupadas por categoría.

La función TAIL devuelve un conjunto, de un único miembro en nuestro ejemplo, pero la


propiedad DefaultMember espera recibir un miembro y no un conjunto. La función ITEM
permite extraer un miembro de un conjunto especificando el índice. El primer miembro
tiene como índice 0.

{Conjunto}.Item(índice)

Esto permite modificar la consulta anterior para obtener el único miembro del conjunto:

WITH
SET [Líneas] AS {TAIL(FILTER([Date].[Calendar Year].
[Calendar Year].Members, Not IsEmpty([Measures].[Order
Count]))).Item(0)}
SELECT
{[Product].[Category].&[3]} ON COLUMNS
,[Líneas] ON ROWS
FROM [Adventure Works]
WHERE [Measures].[Reseller Order Quantity]

Para modificar el miembro por defecto, basta con volver al estudio de desarrollo.

1. Modifique la instrucción del script creado anteriormente con el siguiente código.

Alter Cube CurrentCube


Update Dimension [Date].[Calendar Year],
Default_Member = TAIL(FILTER([Date].[Calendar Year].
[Calendar Year].Members,Not IsEmpty([Measures].[Order
Count]))).Item(0)

ShareVideos
1. Guarde los cambios y despliegue. El cubo está ahora filtrado sobre el año en curso.

Otro escenario posible consiste en calcular el miembro por defecto a partir de la fecha del sistema.
Es posible usando las extensiones VBA de MDX y la función de conversión de una cadena de texto
en un miembro. Véase el código a continuación.

Alter Cube CurrentCube


Update Dimension [Date].[Calendar Year],
Default_Member = STRTOMEMBER(’[Date].[Calendar Year].&[’ +
FORMAT(YEAR(NOW()),’0000’) + ’]’)

Este código recupera el identificador del miembro correspondiente al año 2007 del
calendario. Por ejemplo, el año 2007 tiene como miembro: [Date].[Calendar
Year].&[2007].

5. Conjuntos con nombre (Named Set)

Partiendo de un principio próximo al de los miembros calculados, SSAS permite crear


conjuntos calculados, llamados conjuntos con nombre, con el objeto de facilitar la tarea a
los usuarios finales y responder a escenarios del tipo: ¿cuáles son los 10 productos más
vendidos? ¿Qué productos deben ser supervisados de forma prioritaria? ¿Cuáles son los
clientes que han comprado algún producto el mes anterior?

SSAS proporciona dos tipos de conjuntos con nombre:

 Los conjuntos estáticos, que se calculan durante el procesamiento del cubo.


 Los conjuntos dinámicos, que se evalúan en tiempo de ejecución de la consulta, una
sola vez por consulta.

Esto implica que el conjunto dinámico no varía en función del contexto interior de la consulta, de
hecho sólo se evalúa una vez en el contexto general. Este comportamiento es mucho menos
dinámico de lo que se podría haber esperado.

Productos de referencia

La dirección comercial establece un listado de productos que constituyen el conjunto de


referencia. Este grupo de productos sirve de referencia comparativa para analizar el
comportamiento de otros productos.

Para responder a esta necesidad, es posible crear un conjunto con nombre estático.

1. Abra el cubo Adventure Works en el estudio de desarrollo.


2. Escoja la tercera pestaña, Cálculos.

ShareVideos
3. Mediante la barra de herramientas de esta pestaña cree un Nuevo conjunto con
nombre.
4. Introduzca el nombre del conjunto con nombre: [Productos de referencia].
5. Escoja el tipo Estático.
6. En la Expresión deslice los productos afectados desde las Herramientas de cálculo.
7. Cree un conjunto en la Expresión indicando la lista entre llaves y separando cada
producto con una coma.

1. Guarde los cambios y despliegue.

TOP 10 clientes del año en curso

La función MDX TOPCOUNT devuelve los n primeros miembros de un conjunto según el


criterio de evaluación de una expresión de rango.

TOPCOUNT( «Conjunto», «n»[, «Expresión de rango»] )

1. Abra el cubo Adventure Works en el estudio de desarrollo.


2. Escoja la tercera pestaña, Cálculos.
3. A partir de la barra de herramientas de esta pestaña cree un Nuevo conjunto con
nombre.
4. Introduzca el Nombre del conjunto con nombre: [TOP Clientes del año en curso].
5. Escoja el tipo Dinámico.
6. Introduzca la siguiente expresión:

{TopCount([Customer].[Customer].[Customer].Members, 10,
([Measures].[Internet Sales Amount], STRTOMEMBER(’[Date].
[Calendar Year].&[’ + FORMAT(YEAR(NOW()),’0000’) + ’]’))
)}

1. Guarde y despliegue los cambios.

Presentación de SSRS
SSRS es una solución de reporting que originalmente no estaba orientada al BI pero que
poco a poco ha ido incorporando funcionalidades en este sentido, empezando por un motor
MDX.

Este libro trata únicamente los aspectos específicos ligados al Business Intelligence, como el
reporting MDX, los indicadores de nivel, la distribución de los informes...

La base de datos SSRS está formada por:

ShareVideos
 Un servidor de informes dedicado a la ejecución de informes.
 Un portal Web de gestión que permite consultar, distribuir y gestionar los informes.
 Una herramienta de desarrollo de informes integrada en BIDS como las demás
herramientas de BI SQL Server.
 Una herramienta de creación de informes: Report Builder. Esta herramienta está
destinada a usuarios finales experimentados y a desarrolladores.
 Componentes .NET, reutilizables en el marco del desarrollo de aplicaciones en
Visual Studio, que permiten integrar SSRS en las aplicaciones y extender sus
funcionalidades.

La arquitectura de SSRS está organizada en base a un servidor de informes, pero también se


puede usar el producto sin él. SSRS puede utilizarse en múltiples escenarios de aplicaciones
empresariales: desde la edición de facturas en una aplicación de facturación aislada, hasta la
creación de un portal de BI. SSRS puede incluso acoplarse con Microsoft SharePoint e
integrarse en un portal Web genérico.

1. Lenguaje de definición de informes

Crear un informe SSRS es equivalente a crear un archivo XML con extensión RDL, de
Report Definition Language. El formato RDL es un formato XML abierto que permite
declarar todos los componentes del informe: conjuntos de datos, formato de presentación,
subtotales...

Disponer de un formato abierto tiene dos consecuencias principales. Por un lado, el diseño
del informe está separado de su ejecución, y esto otorga cierta flexibilidad en la
implementación. Por otro lado, es sencillo generar usted mismo los archivos con formato
RDL en sus aplicaciones.

2. Servicios

La instalación de SSRS crea dos servicios correspondientes a los dos servidores: el servidor
de informes (Report Server) y el portal de gestión (Report Manager).

a. Servidor de informes

El servidor de informes (Report Server) es el núcleo de la aplicación de reporting. Es un


potente motor de tratamiento de datos dedicado a la creación de informes. Además, incluye
los siguientes componentes:

 Datos: permite buscar los datos entre numerosas fuentes SSAS.


 Renderizado: el motor de renderizado se encarga de la creación de informes en
numerosos formatos (Microsoft Word, Microsoft Excel, Adobe PDF, CSV,
HTML...).
 Seguridad: por defecto, la seguridad SSRS se basa en la autenticación de Windows.
No obstante, pueden implementarse otros tipos de autenticación (véase el artículo
http://msdn.microsoft.com/en-us/library/cc281310.aspx).

ShareVideos
 Distribución: SSRS permite a los usuarios buscar los informes en el portal Web.
Esta opción corresponde con lo que comúnmente se conoce como modo PULL. No
obstante, es posible empujar los informes hasta los usuarios en sus carpetas de
entrada de correo o en carpetas compartidas, modo PUSH.

Todos estos componentes son abiertos: es posible crear extensiones como la lectura de sus
propios formatos de dato, un nuevo tipo de renderizado, la implementación de algún otro
sistema de seguridad o una distribución de informes mediante fax.

Clásicamente la ejecución de un informe pasa por la extracción de datos de uno o varios


orígenes de datos y a continuación preparar su formato para la presentación. El servidor de
informes SSRS ofrece varios tipos de renderizado. Por este motivo, la creación de un
informe se basa en tres etapas básicas:

 la extracción de datos,
 la generación del informe en un lenguaje intermedio (IF) propio a SSRS,
 por último, la transformación de este lenguaje intermedio en el formato de
representación final (Excel, PDF...).

El servidor de informes es un servicio Web que funciona con o sin IIS (Microsoft Internet
Information Services). La nueva arquitectura sin IIS funciona directamente sobre el driver
HTTP.SYS de Windows. Se recomienda usar esta arquitectura si se quiere mejorar el
rendimiento. El servicio Web está accesible a través de una interfaz HTTP en la siguiente
dirección por defecto:

http://localhost:8080/ReportServer

El servidor de informes utiliza SQL Server para gestionar sus datos. Durante la instalación
se crean dos bases de datos:

 ReportServer: esta base de datos es el catálogo de la aplicación. Almacena todos los


metadatos, los parámetros de configuración y la definición de los informes.
 ReportServerTempDB: esta base de datos sirve para almacenar datos volátiles como
la información de la sesión, la caché del informe...

b. Administrador de informes

El administrador de informes (Report Manager) es una aplicación Web que explota el


servidor de informes. Expone las funcionalidades de administración del servidor y de
distribución a los usuarios finales: ejecución, suscripciones...

Está accesible en la siguiente dirección por defecto:

http://localhost:8080/Reports

Este componente se instala con el servidor durante la instalación de SSRS.

ShareVideos
3. Desarrollo

Crear un portal SSRS 2008 R2 implica el desarrollo de ciertos elementos y su despliegue en


el servidor de informes.

a. Elementos a desplegar

SSRS 2008 R2 autoriza el despliegue de distintos objetos en el servidor de informes:

 orígenes de datos compartidos:

Un origen de datos es un componente que contiene el nombre del dispositivo, los


parámetros que permiten leer una base de datos o una fuente de cualquier otro tipo,
así como los parámetros de identificación del usuario que se va a usar para su
lectura.

SSRS gestiona dos tipos de orígenes de datos: los orígenes de datos incrustados en
el informe y los orígenes de datos compartidos. En el caso de una solución de
portal, se recomienda usar un origen de datos compartido ya que esto permite
especificar una única vez la información de conexión, y configurar en los informes
un origen de datos incrustado que apunte a este origen de datos compartido.

 informes:

Un informe puede contener varios orígenes de datos, puede tener una estructura
compleja con varias tablas, gráficos, mapas...

Un informe SSRS va desde un simple listado operacional hasta un cuadro de mando


complejo. El informe tiene una naturaleza esencialmente estática, aunque puede
incorporar un poco de dinamismo gracias al drilldown (acción de descender los
niveles de jerarquía de los datos para acceder a un nivel de análisis inferior más
detallado) y otras acciones.

 conjuntos de datos compartidos:

Un conjunto de datos (en inglés dataset) es un objeto del origen de datos que
describe los datos tal cual se han extraído del origen: la consulta, su resultado,
eventualmente algún campo calculado...

SSRS 2008 R2 introduce la noción de conjunto de datos compartido, es decir la


posibilidad de publicar un conjunto de datos compartido en el servidor de informes.

Si bien un informe puede usar un origen de datos incrustado, el conjunto de datos compartido
sólo funciona con un origen de datos compartido.

ShareVideos
 partes de informe:

Cada vez más a menudo, los usuarios informáticos están acostumbrados a coger
pequeñas aplicaciones, o gadgets, y agregarlos en su propia interfaz. Con esta nueva
funcionalidad, SSRS permite realizar esta acción en la creación de un informe.
Incluya elementos tales como mapas, indicadores de nivel, o tablas accesibles en la
galería de partes de informe para permitir a los usuarios de Report Builder
reutilizarlas.

Tenga en cuenta que el administrador de informes autoriza el despliegue en el servidor de


cualquier tipo de archivo: imágenes, documentos de escritorio... No obstante esto se sale del
marco de despliegue estándar...

b. Herramientas de desarrollo

Junto a SSRS, Microsoft proporciona dos herramientas de creación de informes.

 BIDS es la herramienta destinada a los desarrolladores.


 Report Builder es una herramienta destinada a los usuarios finales avanzados. La
versión instalada con SQL Server 2008 R2 es la 3.0 que es muy cercana a BIDS
pero con un look más similar a Office 2007.

c. Desarrollo de informes MDX

La mayoría de herramientas de creación de informes tiene una etapa de extracción de datos


y una etapa de formateo. Este principio se mantiene con SSRS.

Dado que va a utilizar un cubo construido por encargo suyo tras un análisis completo, parta del
principio de que las consultas deben ser sencillas considerando el cubo como una capa de negocio.
Si en tiempo de diseño de una extracción se da cuenta de que la consulta no es evidente,
formúlese la siguiente pregunta: ¿sería necesario incorporar esta funcionalidad en el cubo?

SSRS permite añadir parámetros en la consulta de extracción de datos y también en el


mismo informe. Si un parámetro tiene como objetivo filtrar los resultados, a menudo es
más interesante aplicarlo en la consulta para reducir el tiempo de ejecución y el volumen de
información cargado en el informe.

Una aplicación de Business Intelligence no debería tener como objetivo realizar un informe de tipo
listado de facturas de 400 páginas.

ShareVideos
Habida cuenta de la pobre calidad del diseñador de consultas que MDX proporciona en
SSRS, se aconseja pasar de largo y no utilizarlo. Por el contrario, se recomienda utilizar el
siguiente proceso para diseñar un informe con una extracción de los datos principales:

 Cree la consulta MDX principal en SSMS.


 Cree un nuevo informe en BIDS o en Report Builder.
 Escoja un Origen de datos compartido.
 Abra el Generador de consultas, y pegue la consulta MDX diseñada en SSMS.
 Formatee el informe: formato de página, gráficos, tablas, formato de las columnas
numéricas...
 Cree los parámetros de la consulta.
 Cree eventualmente parámetros suplementarios del informe que modifiquen el
formato del mismo.
 Finalice el formateo y su creación.

En el caso de un informe que posea varios conjuntos de datos, será preciso crear tantos
conjuntos de datos y orígenes de datos como sea necesario.

4. Solución SSRS

Los capítulos siguientes se basan en el estudio de desarrollo. A continuación se dedica un capítulo


a Report Builder 3. Ambas herramientas resultan no obstante muy próximas entre sí.

Igual que para SSAS, el desarrollo de los informes se realiza en el estudio de desarrollo
(BIDS) creando un proyecto a partir de uno de los modelos siguientes:

 Asistente de proyectos de servidor de informes


 Proyecto de servidor de informes

Sólo hay una diferencia entre ambas plantillas: la primera lanza el asistente de creación de
informe al inicio. Seleccionando la segunda plantilla puede obtener el comportamiento de
la primera con un sólo clic.

Escoja sistemáticamente la segunda plantilla. En efecto, le deja la libertad de crear antes de nada
un origen de datos compartido.

Una plantilla de Proyecto de modelo de informe le permite crear modelos de informe que pueden
usarse en SSRS como origen de datos. El modelo de informe es una capa de negocio entre el
origen de datos y el informe. Este libro no se extiende sobre esta funcionalidad (véase la sección

ShareVideos
Uso de Report Builder en este mismo capítulo). En efecto en el caso de un origen de datos SSAS
que contiene una capa de negocio, el interés es limitado.

El proyecto creado estará accesible a través del panel Explorador de soluciones ([Ctrl][Alt]
L). Puede contener orígenes de datos compartidos, conjuntos de datos compartidos e
informes.

El estudio de desarrollo permite a su vez publicar partes de informe a través del menú Informe -
Publicar partes de informe. Las partes de informe no aparecen por tanto ilustradas en el
explorador de soluciones.

Extracción de datos
Tras la definición del informe, la primera tarea de desarrollo consiste en extraer los datos
útiles para su implementación.

1. Orígenes de datos

El acceso a los datos del informe se realiza a través de un origen de datos. SSRS gestiona
dos tipos de origen de datos: los orígenes de datos compartidos y los orígenes de datos del
informe.

a. Origen de datos compartido

Las buenas prácticas aconsejan crear un origen de datos compartido que usarán todos los
informes para leer este origen de datos. El origen de datos compartido es un objeto que se
despliega en el servidor de informes y que permite centralizar la información de seguridad
para acceder a los datos.

El origen de datos compartido es un componente del proyecto. Un proyecto puede tener


uno, varios o ningún origen de datos compartido.

b. Origen de datos del informe

El origen de datos se incrusta en el informe y puede tomar dos formas:

 Un enlace hacia un origen de datos compartido, que indica que el informe usa este
último.
 Un origen de datos propio y privado al informe. Se aconseja únicamente en el caso
de un origen de datos que se use una sola vez.

El origen de datos es un componente del informe. Teóricamente el informe contiene al


menos uno.

ShareVideos
c. Propiedades del origen de datos compartidos

La configuración de un origen de datos compartidos se realiza desde la pantalla de


Propiedades del origen de datos compartidos.

Las propiedades generales, accesibles desde la página General, son el Nombre, el Tipo y la
Cadena de conexión:

Nombre

Introduzca aquí el nombre de su cadena de conexión. Evidentemente se recomienda usar un


nombre explícito.

Tipo

SSRS permite en su instalación acceder a los siguientes proveedores de información:

 Microsoft SQL Server


 Microsoft SQL Azure
 Microsoft SQL Server Parallel Data Warehouse
 OLE DB
 Microsoft SQL Server Analysis Services
 Oracle
 ODBC
 XML
 Report Server Model
 Lista de Microsoft SharePoint
 SAP NetWeaver BI
 Hyperion Essbase
 TERADATA

SSRS puede asimismo conectarse a un origen de datos PowerPivot for SharePoint. Basta con usar
el tipo de proveedor Analysis Services. La cadena de conexión es la URL de la hoja de cálculo.

Cadena de conexión

Introduzca aquí la cadena de conexión a su origen de datos o use el botón Modificar para
editarlo. Para la mayoría de proveedores SSRS muestra una ventana adaptada.

La ventana de Propiedades del origen de datos compartidos permite introducir la


información de autenticación.

ShareVideos
Esta ventana es genérica sea cual sea el tipo de proveedor que haya elegido.

SSRS dispone de cuatro modos de identificación del usuario para la lectura de datos en el
origen de datos.

Usar la autenticación de Windows

Con esta opción la información de conexión del usuario de Windows es la que se usará para
leer los datos.

Esta opción está adaptada especialmente para una base de datos SSAS en la que ha definido
diferentes perímetros de datos por usuario.

Usar este nombre de usuario y esta contraseña

Esta opción permite especificar una cuenta de usuario única para conectarse al origen de
datos sea cual sea el usuario que ejecute el informe. Especifique el nombre y la contraseña
una única vez en las zonas habilitadas.

Pedir credenciales

Esta opción pide al usuario la información de conexión en el momento de ejecución del


informe. Indique la frase que invitará al usuario a identificarse.

No usar credenciales

Esta opción usa una conexión anónima al origen de datos.

d. Propiedades del origen de datos del informe

La configuración de un origen de datos se hace en la pantalla de Propiedades del origen de


datos compartidos.

Las propiedades del origen de datos del informe permiten indicar tres opciones generales
suplementarias.

Usar una referencia de origen de datos compartidos

Esta opción es la más importante. Es la que debe escoger para usar un origen de datos
compartidos.

ShareVideos
En un origen de datos de informe usando un origen de datos compartidos, el nombre del primero
no es obligatoriamente igual al del segundo. No obstante es más claro si se asigna el mismo
nombre a ambos.

Usar una transacción única durante el procesamiento de las consultas

Esta opción permite efectuar todas las consultas ligadas a este origen de datos en una única
transacción con el objetivo de garantizar la coherencia del informe. Es preferible marcar
esta casilla de forma sistemática.

Expresión dinámica de la cadena de conexión

El botón fx a la derecha de la Cadena de conexión permite crear una conexión dinámica que
se evalúa en tiempo de ejecución. Esta funcionalidad tiene como objetivo esencial
incorporar en la cadena de conexión parámetros del informe. Por ejemplo, si en el servidor
SQL se guarda cada año en una base de datos diferente, la cadena de conexión podría ser:

="Data Source=localhost;Initial Catalog=" & Parameters!


NombreDeLaBDD.Value

2. Conjuntos de datos

El conjunto de datos o dataset es el objeto que define los datos que se leen del origen de
datos y que posteriormente se visualizan en el informe. Sus principales elementos son el
origen de datos y la consulta sobre este origen.

SSRS gestiona dos tipos de conjuntos de datos: el conjunto de datos de informe y el


conjunto de datos compartido, desplegable en el servidor de informes. A diferencia del
primero que usa un origen de datos del informe, el segundo usa un origen de datos
compartido.

El uso de un conjunto de datos compartido en un informe se puede realizar desde el estudio


de desarrollo o desde la herramienta Report Builder.

Conjunto de datos oculto

Cuando se usan parámetros de configuración, SSRS puede generar en el informe uno o


varios conjuntos de datos ocultos. Son conjuntos de datos que SSRS usa para alimentar el
valor de los parámetros de los informes. El usuario puede entonces visualizarlos y
modificarlos en el menú contextual seleccionando la opción Mostrar conjuntos de datos
ocultos, que está disponible únicamente si existe este tipo de conjunto de datos en el
informe.

ShareVideos
Los conjuntos de datos ocultos están ligados a los parámetros de configuración de los
informes: si publica un parámetro del informe como parte del informe, el conjunto de datos
oculto se publica con él.

A la inversa, en la creación de un conjunto de datos compartido, los eventuales conjuntos


de datos ocultos asociados a los parámetros de configuración se pierden. Tendrá que
publicar estos conjuntos de datos ocultos como conjuntos de datos compartidos o mejor
publicar el parámetro del informe como una parte de informe. En ambos casos, prepare una
documentación detallada para explicar al usuario cómo usar estos componentes en el
Report Builder.

En contraposición a escenarios más sencillos, toda esta funcionalidad parece difícil de proponer a
los usuarios finales en el Report Builder.

3. Diseñador gráfico de consultas MDX

La primera página de las Propiedades del conjunto de datos permite crear la consulta de
extracción a partir del botón Diseñador de consultas. En el caso de un origen de datos
SSAS, este botón abre una pantalla llamada Diseñador de consultas. Se trata de una
herramienta que es gráfica por defecto: la consulta se crea deslizando con el ratón los
atributos del origen de datos. No obstante, es posible usar el modo texto.

El uso del modo gráfico no es recomendable:

 este modo no gestiona los parámetros de las consultas,


 y aun así en cualquier caso la consulta generada no se corresponde con los nombre
relacionales que espera el motor SSRS.

SSRS es una herramienta de reporting estático y relacional. El hecho de que sea relacional
indica que espera una estructura compuesta de varias columnas fijas y un número de líneas
variable. El motor de consultas MDX tal y como se presenta no garantiza esta integridad.
Las consecuencias pueden ser desastrosas en tiempo de desarrollo, mantenimiento y
ejecución.

Lo más extraño es que las consultas que SSRS genera automáticamente en los conjuntos de datos
ocultos, las consultas de los parámetros, sí toman en cuenta, no obstante, las restricciones
relacionales.

El motor de consultas MDX SSRS posee tres características principales:

 Implementa una sintaxis MDX limitada.

ShareVideos
 Las consultas creadas pueden ejecutarse en otro motor de consultas (por ejemplo en
SSMS), aunque no devuelven el mismo conjunto de columnas.
 No conserva el formato del texto de la consulta.

Por último, el cambio de vista entre las pestañas del modo gráfico y el modo texto provoca
de vez en cuando pérdidas en las consultas.

Por todos estos motivos le recomendamos que evite en lo posible el uso de esta herramienta
y, por el contrario, que construya usted mismo las consultas en SSMS. Además, le
recomendamos guardarlas en un gestor de código fuente antes de pegarlas en el diseñador
de consultas SSRS en modo texto.

4. Consultas MDX para SSRS

Tras la creación de un parámetro de consulta para el atributo Product Line del cubo
Adventure Works, SSRS genera un conjunto de datos oculto con la consulta MDX
siguiente:

WITH
MEMBER [Measures].[ParameterCaption] AS [Product].[Product
Line].CURRENTMEMBER.MEMBER_CAPTION
MEMBER [Measures].[ParameterValue] AS [Product].[Product
Line].CURRENTMEMBER.UNIQUENAME
MEMBER [Measures].[ParameterLevel] AS [Product].[Product
Line].CURRENTMEMBER.LEVEL.ORDINAL
SELECT
{[Measures].[ParameterCaption]
,[Measures].[ParameterValue]
,[Measures].[ParameterLevel]} ON COLUMNS ,
[Product].[Product Line].ALLMEMBERS ON ROWS
FROM [Adventure Works]

Lo que genera el resultado siguiente:

ParameterCaption ParameterValue ParameterLevel


[Product].[Product Line].[All
All Products All Products 0
Products]
Accessory Accessory [Product].[Product Line].&[S] 1
Components Components [Product].[Product Line].&[] 1
Mountain Mountain [Product].[Product Line].&[M] 1
Road Road [Product].[Product Line].&[R] 1
Touring Touring [Product].[Product Line].&[T] 1

Para diseñar un informe MDX basta con imitar esta sintaxis.

ShareVideos
a. Cláusula FROM

En una consulta MDX la cláusula FROM indica el cubo de la base de datos, asumiendo que
una base de datos puede contener uno o varios cubos.

b. Cláusula ON ROWS

En la cláusula SELECT la sección ON ROWS indica el conjunto de tuplas o atributos de


las dimensiones que van a ser utilizados para generar los registros.

En el ejemplo anterior los registros se generan a partir de todos los miembros del atributo
Product Line, comprendiendo los posibles miembros calculados (ALLMEMBERS).

Para consultar únicamente dos atributos en particular use un conjunto de miembros:

{[Product].[Product Line].[Mountain],[Product].[Product Line].


[Touring]} ON ROWS

Para consultar los datos del primer día de Abril de 2007 y el segundo día de Marzo use un
conjunto de tuplas:

{([Product].[Product Line].[Mountain],[Date].[Calendar].[Month].
[April 2007]),([Product].[Product Line].[Touring],[Date].
[Calendar].[Month].[March 2007])}ON ROWS

Para consultar los tres registros que han generado mayor cantidad de ventas use la función
TOPCOUNT adaptada a tal efecto:

{TOPCOUNT([Product].[Product Line].[Product Line].MEMBERS, 3,


[Measures].[Sales Amount])} ON ROWS

Es posible cruzar los datos entre los registros de productos y los tres mejores meses gracias
a la cláusula CROSSJOIN (CROSSJOIN y * son equivalentes):

{[Product].[Product Line].[Product Line].MEMBERS}


* TOPCOUNT([Date].[Calendar].[Month].Members, 3, ([Measures].
[Sales Amount],[Product].[Product Line].CurrentMember))ON ROWS

Esta consulta evalúa los tres mejores meses independientemente de la línea de productos.

Para obtener para cada línea de productos los tres mejores meses de ventas de la línea, es
preciso usar el comando GENERATE :

GENERATE({[Product].[Product Line].[Product Line].MEMBERS},


[Product].[Product Line].CurrentMember* TOPCOUNT([Date].
[Calendar].[Month].Members, 3,[Measures].[Sales Amount])) ON ROWS

Las posibilidades del lenguaje MDX son infinitas para crear conjuntos de registros que
respondan a su necesidad.

ShareVideos
No obstante la sintaxis sigue siendo compleja para un usuario final. Es una lástima que Microsoft
no ofrezca ningún editor gráfico con un buen funcionamiento y adaptado a tal efecto.

c. Cláusulas ON COLUMNS y WITH MEMBER

La cláusula ON COLUMS permite definir las columnas del resultado de la consulta MDX.
Una consulta MDX estándar genera un primer juego de columnas que se corresponde con el
eje de los registros (por ejemplo el nombre de los productos) y un segundo juego de
columnas que se corresponde con el eje de las columnas (por ejemplo los años). El número
de columnas tanto del primer juego de columnas como del segundo puede variar.

En el caso de una consulta MDX para SSRS, el segundo juego de columnas está limitado a
las medidas. Parta no obstante del principio de que los dos juegos de columnas pueden
variar en tiempo de ejecución: el primero desaparece por completo si la consulta no
devuelve ninguna línea, mientras que el segundo lo hace si una columna está vacía y se ha
especificado la cláusula NON EMPTY generada por SSRS.

Por este motivo la consulta debe contener una medida en la cláusula WITH por columna
utilizada en el informe, en esencia para el eje de los registros. Para el eje de las columnas
basta con suprimir la cláusula NON EMPTY.

Por ejemplo:

WITH
MEMBER [Measures].[País] as [Geography].
[Country].CurrentMEMBER.Name
MEMBER [Measures].[Promoción] as [Promotion].
[Promotion].CurrentMEMBER.Name
MEMBER [Measures].[Año] as [Date].[Calendar
Year].CurrentMEMBER.Name
SELECT
{ [Measures].[País],[Measures].[Promoción],[Measures].[Año],
[Measures].[Reseller Average Sales Amount]}
ON COLUMNS,
NON EMPTY { ([Geography].[Country].[Country].ALLMEMBERS ) }
* {[Promotion].[Promotion].[Promotion].ALLMEMBERS}
* {[Date].[Calendar Year].[Calendar Year].ALLMEMBERS}
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM [Adventure Works]

Esta consulta devuelve el siguiente resultado (primeras líneas):

Cantidad Media de
País Promoción Año
las Ventas
Sin CY No CY
Australia Australia (NULL)
descuento 2005 Discount 2005
Australia Sin CY Australia No CY (NULL)

ShareVideos
Cantidad Media de
País Promoción Año
las Ventas
descuento 2006 Discount 2006
Sin CY No CY
Australia Australia 11,748.85 $
descuento 2007 Discount 2007
Sin CY No CY
Australia Australia 11,775.36 $
descuento 2008 Discount 2008
Sin CY No CY
Australia Australia (NULL)
descuento 2010 Discount 2010

La consulta devuelve registros sin resultado, es decir, registros donde el importe es NULL. Se trata
de algo normal en el uso de medidas calculadas en el cubo. Debe añadir la cláusula
NON_EMPTY_BEHAVIOR para evitar que se active el cálculo de la medida.

La consulta anterior se convierte en:

WITH
MEMBER [Measures].[País] as [Geography].
[Country].CurrentMEMBER.Name, NON_EMPTY_BEHAVIOR=’[Measures].
[Reseller Sales Amount]’
MEMBER [Measures].[Promoción] as [Promotion].
[Promotion].CurrentMEMBER.Name, NON_EMPTY_BEHAVIOR=’[Measures].
[Reseller Sales Amount]’
MEMBER [Measures].[Año] as [Date].[Calendar
Year].CurrentMEMBER.Name, NON_EMPTY_BEHAVIOR=’[Measures].[Reseller
Sales Amount]’
SELECT
{ [Measures].[País],[Measures].[Promoción],[Measures].[Año],
[Measures].[Reseller Average Sales Amount]}
ON COLUMNS,
NON EMPTY { ([Geography].[Country].[Country].ALLMEMBERS ) }
* {[Promotion].[Promotion].[Promotion].ALLMEMBERS}
* {[Date].[Calendar Year].[Calendar Year].ALLMEMBERS}
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM [Adventure Works]

Construida de esta forma, la consulta no debería causarle ninguna sorpresa. El conjunto de


columnas calculadas devuelto posee las propiedades de una tabla relacional: número de
columnas fijo, número de registros variable.

Es importante identificar las columnas necesarias en la creación del informe incluyendo


columnas para ordenar, columnas para agrupar...

Si desea mostrar el volumen de ventas por nombre de cliente, no le basta con tener una consulta
que devuelva únicamente los nombres de cliente. En efecto, cuando SSRS vea dos veces el mismo
nombre de familia va a acumular las ventas en un único registro, en caso de que su consulta

ShareVideos
devuelva varios. Si se trata en realidad de clientes distintos, es preciso extraer del origen de datos
el identificador de cliente y usarlo en el informe como criterio de filtrado.

WITH MEMBER [Measures].[ClaveClient] AS [Customer].


[Customer].CURRENTMEMBER.MEMBER_KEY

d. Filtros

MDX proporciona básicamente dos técnicas para realizar un filtrado general sobre las
consultas: el segmentador y el subcubo.

Segmentador

El segmentador se invoca mediante la cláusula WHERE tras la cláusula FROM. Se define


simplemente por un conjunto de tuplas.

Por ejemplo, para filtrar sobre las ventas de Canadá en el año 2008:

WITH
MEMBER [Measures].[LineaDeProducto] AS [Product].[Product
Line].CURRENTMEMBER.MEMBER_CAPTION
MEMBER [Measures].[Mes] AS [Date].
[Calendar].CURRENTMEMBER.MEMBER_CAPTION
MEMBER [Measures].[Ventas Euro] AS [Measures].[Sales Amount]
SELECT
{[Measures].[LineaDeProducto]
,[Measures].[Mes]
,[Measures].[Ventas Euro]
} ON COLUMNS ,
GENERATE({[Product].[Product Line].&[M],[Product].[Product
Line].&[R]},
[Product].[Product Line].CurrentMember * TOPCOUNT([Date].
[Calendar].[Month].Members, 3,[Measures].[Sales Amount])) ON ROWS
FROM [Adventure Works]
WHERE ([Date].[Calendar Year].&[2008],[Sales Territory].[Sales
Territory Country].&[Canada])

Esta consulta devuelve el siguiente resultado:

LineaDeProducto Mes Ventas Euro


Mountain Junio 2008 Mountain Junio 2008 275 787,43 €
Mountain Abril 2008 Mountain Abril 2008 252 989,43 €
Mountain Marzo 2008 Mountain Marzo 2008 223 183,73 €
Road Mayo 2008 Road Mayo 2008 180 885,32 €
Road Abril 2008 Road Abril 2008 170 911,42 €
Road Febrero 2008 Road Febrero 2008 149 286,57 €

ShareVideos
El segmentador no permite efectuar un filtrado sobre una jerarquía presente en la cláusula ON
ROWS.

Subcubo

El subcubo se usa en la cláusula FROM. Es preciso reemplazar el cubo por una subconsulta
MDX que defina el subcubo. Por ejemplo:

WITH
MEMBER [Measures].[LineaDeProducto] AS [Product].[Product
Line].CURRENTMEMBER.MEMBER_CAPTION
MEMBER [Measures].[Mes] AS [Date].
[Calendar].CURRENTMEMBER.MEMBER_CAPTION
MEMBER [Measures].[Ventas Euro] AS [Measures].[Sales Amount]
SELECT
{[Measures].[LineaDeProducto]
,[Measures].[Mes]
,[Measures].[Ventas Euro]
} ON COLUMNS ,
GENERATE({[Product].[Product Line].&[M],[Product].[Product
Line].&[R]},
[Product].[Product Line].CurrentMember * TOPCOUNT([Date].
[Calendar].[Month].Members, 3,[Measures].[Sales Amount])) ON ROWS
FROM (SELECT {([Date].[Calendar Year].&[2008],[Sales Territory].
[Sales Territory Country].&[Canada])} ON COLUMNS FROM [Adventure
Works])

Esta consulta devuelve el mismo resultado que la consulta anterior.

Por tanto, el subcubo no es equivalente al segmentador. En efecto, el subcubo no restringe la


visibilidad de los miembros en base a su perímetro, mientras que el segmentador sí restringe el
perímetro de los datos. Esta diferencia es fundamental pero difícil de visualizar, por ello la
explicamos con el siguiente ejemplo.

La siguiente consulta usa un segmentador para filtrar los años 2007 y 2008:

WITH MEMBER [Measures].[Ventas] AS SUM( EXISTING [Date].[Date].


[Date].Members, [Measures].[Internet Sales Amount])
SELECT {[Measures].[Ventas]} ON COLUMNS
, {[Product].[Product Model Lines].[Product Line].&[M]} ON ROWS
FROM
[Adventure Works] WHERE {[Date].[Calendar Year].&[2007], [Date].
[Calendar Year].&[2008]}

Efectivamente devuelve la suma de las ventas sobre los dos años indicados.

Ventas
Mountain 8 102 753,50 €

ShareVideos
Y la misma consulta con un subcubo:

WITH MEMBER [Measures].[Ventas] AS SUM( EXISTING [Date].[Date].


[Date].Members, [Measures].[Internet Sales Amount])
SELECT {[Measures].[Ventas]} ON COLUMNS
, {[Product].[Product Model Lines].[Product Line].&[M]} ON ROWS
FROM
(SELECT {[Date].[Calendar Year].&[2007], [Date].[Calendar
Year].&[2008]} ON 0 FROM [Adventure Works])

Que devuelve la suma de ventas para todos los años.

Ventas
Mountain 10 251 183,52 €

Suprima la palabra clave EXISTING y ambas consultas realizarán la suma de las ventas sobre el total
de los años. Por defecto un conjunto se evalúa en el contexto del cubo que contiene sus
miembros. La cláusula EXISTING provoca que se evalúe en el contexto en curso. De ello se deduce
que el segmentador ha modificado el contexto en curso.

e. Parámetros

SSRS permite crear parámetros de consulta, es decir parámetros que van a influir sobre la
extracción de los datos. Con el lenguaje MDX, la configuración de las consultas tiene
varios usos posibles: filtrar sobre uno o varios miembros (años, familia de productos),
cambiar el valor que se está mostrando (las ventas o el stock), cambiar los ejes de análisis
(productos o clientes)...

Durante la creación de la consulta SSMS, contemple la existencia de parámetros,


escribiendo la consulta con una de las funciones siguientes como parámetro:

 STRTOMEMBER ( «Expresión de cadena» ): si el parámetro es un miembro.


 STRTOSET ( «Expresión de cadena» ): si el parámetro es un conjunto.
 STRTOTUPLE ( «Expresión de cadena» ): si el parámetro es una tupla.

La consulta siguiente se ha construido y probado en SSMS usando estas funciones:

WITH
SET [Lineas] AS {Filter([Customer].[Customer].
[Customer].ALLMEMBERS, LEFT([Customer].
[Customer].currentmember.name,1)=LEFT("A",1))}
MEMBER [Measures].[Columna] AS [Customer].[Customer
Geography].CURRENTMEMBER.MEMBER_CAPTION
MEMBER [Measures].[Indicador] AS STRTOMEMBER("[Measures].
[Internet Order Count]")
SELECT
{[Measures].[Columna]
,[Measures].[Indicador]

ShareVideos
} ON COLUMNS ,
[Lineas] ON ROWS
FROM [Adventure Works] WHERE (STRTOMEMBER("[Date].[Calendar
Year].&[2008]") * STRTOSET("{[Product].[Product Categories].
[Category].&[4],[Product].[Product Categories].[Category].&[3]}"))

Los siguientes elementos servirán de parámetros para visualizar las ventas por cliente:

 primera letra del nombre del cliente,


 identificador de la medida que se muestra en el informe,
 filtrado sobre el año,
 filtrado sobre las categorías de producto.

En SSRS, el símbolo arroba (@) identifica un parámetro. Basta con reemplazar las cadenas
por los parámetros correspondientes: @PrimeraLetra, @Medida, @Anyo y
@CategoriasProducto.

Lo que da la siguiente consulta:

WITH
SET [Lineas] AS {Filter([Customer].[Customer].
[Customer].ALLMEMBERS, LEFT([Customer].
[Customer].currentmember.name,1)=LEFT(@PrimeraLetra,1))}
MEMBER [Measures].[Columna] AS [Customer].[Customer
Geography].CURRENTMEMBER.MEMBER_CAPTION
MEMBER [Measures].[Indicador] AS STRTOMEMBER(@Medida)
SELECT
{[Measures].[Columna]
,[Measures].[Indicador]
} ON COLUMNS ,
[Lineas] ON ROWS
FROM [Adventure Works] WHERE (STRTOMEMBER(@Anyo) *
STRTOSET(@CategoriasProducto))

Basta con pegar esta consulta en el Diseñador de consultas MDX de SSRS.

A continuación abra la ventana de Parámetros de la consulta haciendo clic en el botón

del mismo nombre.

La primera letra es un parámetro que tiene que introducir el usuario final: no es parte de la
jerarquía del cubo.

La medida forma parte de la dimensión de medidas, aunque SSRS no permite acceder a ella
desde la pantalla de configuración. Introduzca el valor por defecto.

ShareVideos
El año es un miembro de la jerarquía de años. Hemos usado la función STRTOMEMBER:
no se gestionan los Valores múltiples.

Las categorías de producto son un conjunto de miembros de la jerarquía con el mismo


nombre. Seleccione la casilla de Valores múltiples correspondiente a la función
STRTOSET.

Para todos estos parámetros, es preciso escoger un valor por defecto.

Los parámetros del informe se gestionan automáticamente en SSRS con el mismo nombre.
La página de Parámetros de las Propiedades del conjunto de datos realiza el enlace entre
ambos.

Los parámetros del informe están accesibles en el panel del estudio de desarrollo Datos de
informe ([Ctrl][Alt] D). Podemos, por ejemplo, ocultar el parámetro Medida.

La apariencia general en el estudio de desarrollo es la siguiente:

Observe que se han creado dos conjuntos de datos ocultos por SSRS: Anyo y CategoriasProducto.
Son las extracciones MDX destinadas a alimentar las listas de selección de los parámetros del
informe.

En todo informe es obligatorio imprimir los parámetros de filtrado en el informe. Para ello,
basta con arrastrar el parámetro desde los Datos de informe hasta la superficie del informe.
SSRS crea una zona de texto con una expresión simple. Por ejemplo:

=Parameters!Anyo.Value

En el caso de un parámetro con valores múltiples, use la función String.Join dentro de la


expresión:

=String.Join(", ",Parameters!CategoriasProducto.Label)

Dar formato a un informe con BIDS

ShareVideos
Una vez hayamos extraído los datos de la base de datos SSAS, queremos visualizar estos
datos en forma de tablas, gráficos, mapas... SSRS 2008 R2 proporciona varios elementos de
visualización de datos muy profesionales y varias funcionalidades para crear una aplicación
de Business Intelligence.

1. Cuadro de herramientas

Para construir el informe, SSRS proporciona elementos suficientes en su cuadro de


herramientas. Las agrupaciones que se muestran a continuación son las propias de Report
Builder.

a. Regiones de datos

Existen tres tipos de regiones de datos para trabajar con los conjuntos de datos. Se trata de
tres implementaciones de la Tabla matricial (Tablix). Las tres aprovechan la funcionalidad
para agrupar filas y columnas de Tablix.

Tabla

Objeto relacional por excelencia, la tabla contiene un número fijo de columnas por un
número variable de filas: los registros del conjunto de datos.

La tabla se enlaza directamente con el conjunto de datos arrastrando sus campos, desde el
panel Datos de informe, hacia las columnas de la tabla.

Defina en la parte inferior del estudio de desarrollo los Grupos de filas, para reagrupar,
ordenar, filtrar...

Un informe puede contener varias tablas ligadas a distintos conjuntos de datos. Una tabla
también puede incluirse en una lista.

Una celda de una tabla es una zona de texto, aunque también puede contener un elemento
de visualización de datos.

Matriz

La matriz es por naturaleza un elemento para visualizar datos multidimensionales. Gracias


a sus grupos de filas y grupos de columnas, el elemento Matriz permite realizar
prácticamente cualquier tabla que imaginemos.

Un informe puede contener varias matrices ligadas a distintos conjuntos de datos. También
es posible incluir una matriz en una lista.

ShareVideos
SSRS 2008 R2 introduce una propiedad nueva llamada DomainScope en la agrupación, muy útil
para visualizar regiones de datos superpuestos. Por ejemplo, una lista por país puede contener
una matriz con los años en las columnas. Sin esta propiedad, el número de columnas varía por
cada país. Para corregir este comportamiento seleccione el grupo de los años de la matriz, por
ejemplo en la zona de los Grupos de columnas y despliegue sus propiedades ([F4]). La propiedad
DomainScope aparece oculta en la categoría Grupo. Basta con introducir aquí el nombre del
elemento padre: la lista (List1, por ejemplo). De este modo todas las ocurrencias del grupo
tendrán el mismo número de columnas.

La celda de una matriz es una zona de texto, pero puede contener también un elemento de
visualización de datos.

Lista

La lista es un elemento cercano a una tabla. Incluye, por defecto, una columna en la que es
posible insertar varios elementos sin restricción de alineado. El número de filas varía según
los registros del conjunto de datos.

Lista que contiene un subinforme

Por naturaleza, la lista permite componer todos aquellos informes que no sean tablas. La
lista está adaptada para mostrar, por familia de productos, una curva de evolución o incluso
un mapa geográfico de las ventas por departamento más incluso un indicador de tendencia
nacional.

A propósito de Tablix

Cada una de las regiones de datos que hemos visto es un Tablix. El Tablix es un
componente matricial de datos que permite al diseñador del informe preparar conjuntos de
líneas y columnas.

Haga clic en una región de datos del informe para que aparezca la definición del Tablix en
la parte inferior del estudio de desarrollo, en las zonas Grupos de columnas y Grupos de
filas.

Tablix permite gestionar, además de los grupos, las columnas o filas estáticas: los
etiquetados de las cabeceras o de los totales.

ShareVideos
Los elementos estáticos no se visualizan por defecto en los grupos. Es preciso activar el modo
Avanzado para verlas gracias al botón situado a la derecha de los grupos de columnas.

Un grupo define un conjunto de ocurrencias (de filas o de columnas) en base a un criterio


de filtrado: la Expresión de grupo.

Los grupos pueden mostrarse jerárquicamente o yuxtapuestos. La organización jerárquica


padre-hijos permite gestionar los criterios de visualización: por ejemplo, para cada país se
muestran sus ciudades. La yuxtaposición permite hacer adyacentes dos grupos cualesquiera
y habilita la implementación de columnas no enlazadas: por ejemplo, los países más las
familias de productos.

Cada grupo posee numerosas propiedades: criterios de ordenación, salto de página o


incluso visibilidad. La visibilidad permite implementar informes dinámicos: un grupo se
muestra dinámicamente haciendo clic en su padre.

Propiedades del grupo Filtros

b. Visualización de los datos

Igual que las regiones de datos, los elementos de visualización están ligados al conjunto de
datos a la hora de mostrar el contenido.

Todos los elementos gráficos, si se incluyen en las regiones de datos, ganarán en aspecto
profesional gracias a la nueva propiedad DomainScope, del mismo modo que para la matriz (véase
la sección Dar formato a un informe con BIDS - Cuadro de herramientas - Regiones de datos en
este capítulo).

Gráfico

El gráfico principal permite presentar múltiples tipos de gráfico: barras, gráficos de tarta,
nubes de puntos...

El gráfico se define mediante un grupo de abscisas (Category group), grupos de series


(Series group) y los valores (Values). El gráfico se organiza como una matriz: las abscisas
son las columnas, las series son las filas.

ShareVideos
Category group se traduce algunas veces como grupo de categorías, y otras como grupo de
abscisas.

Una vez ha seleccionado el gráfico que quiere diseñar, SSRS abre un panel de Datos del
gráfico en la parte derecha que permite definir sus grupos y sus valores.

No es obligatorio definir grupos de series o grupos de abscisas.

Igual que para los componentes tablix, el elemento gráfico disponible en SSRS 2008 R2 es
extremadamente rico en funcionalidad. Todos los tipos de gráfico se implementan sin
mayor dificultad que encontrar la propiedad adecuada en la interfaz de diseño. Por ejemplo:

 Medidas no comparables, tales como el volumen de ventas y un porcentaje, pueden


coexistir en un mismo gráfico gracias a los ejes secundarios.
 Cuando una serie contiene un pico extremadamente grande que hace ilegibles los
valores inferiores, es posible Activar los separadores de escala en las Propiedades
del eje vertical para mejorar la legibilidad del gráfico.
 En un gráfico de tarta, es posible reagrupar todos los valores pequeños en una única
porción, para ganar en legibilidad (véase http://technet.microsoft.com/en-
us/library/dd207043.aspx).

Medidor

Los medidores o indicadores de nivel imitan a los elementos del cuadro de mandos de un
coche (velocímetro, nivel de combustible). Cuando inserta un medidor, aparece un panel de
datos del medidor en el informe, y puede servir de base para la creación de un verdadero
cuadro de mando con ayuda de su menú contextual.

Barra de datos

El elemento Barra de datos es un elemento gráfico, concebido por defecto sin un grupo de
abscisas ni grupo de series, ni título, ni leyenda, que no muestra más que una barra en las
celdas de un Tablix, de forma similar a las barras de datos con formato condicional en
Excel.

Minigráfico

El elemento minigráfico es también un elemento gráfico. Está preparado especialmente


para mostrar un pequeño gráfico basado en un valor y un grupo de abscisas en las celdas de
un Tablix.

Indicador

ShareVideos
El elemento indicador es un medidor basado en una imagen dinámica que varía en función
del valor a representar, como un semáforo o una flecha indicando la tendencia.

Mapa

SSRS permite insertar en el informe mapas espaciales y geográficos. Para ello es necesario:

 La imagen de un mapa. SSRS gestiona varios tipos de orígenes de datos espaciales


que comprenden los formatos estándar de los sistemas de información geográfica
(TIGER/Line o ESRI) y las coordenadas espaciales de SQL Server.
 Un eje de datos espaciales en el conjunto de datos.
 Un campo de correspondencia entre el origen de datos y el eje de los datos
espaciales.
 Una medida en el conjunto de datos.

La representación gráfica se realiza coloreando las zonas y/o situando círculos coloreados
más o menos gruesos.

El uso de este elemento está detallado en la referencia: http://msdn.microsoft.com/es-


es/library/ee240845.aspx

Esta otra página responde a numerosas preguntas: http://msdn.microsoft.com/es-


es/library/ee240751.aspx

c. Elementos del informe


Zona de texto

Permite adjuntar un campo o una etiqueta fuera de componentes como tablas o matrices,
por ejemplo en la cabecera del informe.

Línea

Permite incluir una línea en el informe.

Rectángulo

El rectángulo se usa simplemente para crear un rectángulo. No obstante puede ser un


contenedor: puede contener otros elementos. Como puede publicarse como parte de
informe, es posible utilizarlo como base para crear un elemento compuesto compartido.

Imagen

Permite situar una imagen en el informe. SSRS gestiona tres tipos de fuente distintas para
la imagen: Externa, Informe o Base de datos.

ShareVideos
Externa: para usar una imagen fija publicada en el servidor de informes o sobre otro
servidor Web.

Informe: para que la imagen seleccionada se guarde en el informe.

Base de datos: para visualizar el contenido de un campo imagen de la base de datos.

La imagen de base de datos puede contener el nombre de un archivo. En este caso, puede cargar
los archivos en un servidor Web y usar el modo Externo con una expresión que apunte sobre los
archivos de imagen.

En las versiones anteriores de SSRS las imágenes se usaban bastante para crear indicadores
gráficos, como el semáforo rojo. No obstante la versión actual integra de forma nativa esta
funcionalidad gracias al elemento Indicador. Las imágenes se usan esencialmente para
aspectos decorativos y para los datos.

d. Subinforme

Este elemento permite visualizar un informe SSRS dentro de un informe maestro. El


informe maestro puede informar los parámetros al subinforme.

En el caso de un parámetro MDX, el campo valor informado al subinforme debe ser el


identificador único del miembro. La columna debería estar prevista dentro del conjunto de
datos del informe maestro. Ejemplo:

WITH
MEMBER [Measures].[PaisParametro] as [Geography].
[Country].CurrentMEMBER.uniqueName

e. Partes de informe

Los siguientes elementos pueden publicarse como una parte de informe: imagen, matriz,
tabla, lista, minigráfico, mapa, indicador, gráfico, barra de datos y rectángulo.

2. Expresiones
Las expresiones se usan para evaluar una propiedad en tiempo de ejecución. La mayoría de las
propiedades pueden asignarse mediante una expresión. Seleccione un objeto, muestre sus
propiedades ([F4]), abra el editor de expresiones para una propiedad gracias al botón

que aparece en la lista desplegable de la propiedad.

ShareVideos
El lenguaje de expresión es muy completo. Para las agregaciones de columnas de los
conjuntos de datos, la noción de scope (ámbito) es muy importante. El scope se define
mediante el nombre de un conjunto de datos, de un componente o de un grupo. La
agregación se calcula al nivel indicado por el scope.

Nuevas funciones, como por ejemplo Lookup, permiten hacer un join entre dos conjuntos de datos
dentro de la expresión.

Si bien el motor OLAP parece apropiado para realizar agregaciones, conviene usar
funciones de agregación del motor SSRS adaptadas a la problemática del reporting. La
consulta MDX permite obtener un conjunto de datos con cierto nivel de agregación.
Después es tarea del motor SSRS calcular los totales, subtotales, agregados acumulados...

SSRS 2008 R2 permite incrustar una función agregada en otra. Esto permite visualizar un valor
calculado a partir de otro que ya se muestre en la página. Por ejemplo, un subtotal que calcule la
media de las sumas que se muestran en la página a nivel de detalle (grupo « Detalles ») se podría
expresar así:

=Avg(Sum(Fields!Sales_Amount.Value,"Detalles"))

El lenguaje de expresión puede extenderse mediante código Visual Basic o mediante


ensamblados incluidos en las propiedades del informe (véase http://msdn.microsoft.com/es-
es/library/ms155798.aspx).

3. Formato de los valores

El formato de visualización se puede modificar en la ventana de Propiedades de cuadro de


texto o en el panel de Propiedades ([F4]) de la Zona de texto.

4. Acciones

El informe puede enriquecerse con acciones de tipo hiperenlace. Por ejemplo para abrir otro
informe más detallado. En este caso, se pasan los parámetros al informe seleccionado de
forma similar que con los subinformes (véase la sección Dar formato a un informe con
BIDS - Subinforme).

Las acciones pueden configurarse en una zona de texto, una imagen, un elemento de un
gráfico, de un indicador o de un mapa.

ShareVideos
5. Ejemplo

La siguiente consulta obtiene de la base de datos SSAS Adventure Works DW 2008R2 SE


las cantidades pedidas por producto, y por canal de venta para un año, de una categoría de
productos en el territorio de USA. La columna de las subcategorías se añade dado que la
subcategoría será un criterio de filtrado del informe.

WITH
MEMBER [Measures].[Nombre de Producto] AS [Product].[Product
Categories].CurrentMember.Name, NON_EMPTY_BEHAVIOR=’
[Measures].[Order Quantity]’
MEMBER [Measures].[Subcategoria Producto] AS [Product].[Product
Categories].Properties( "Subcategory" ), NON_EMPTY_BEHAVIOR=’
[Measures].[Order Quantity]’
MEMBER [Measures].[Canal de ventas] AS [Sales Channel].[Sales
Channel].CurrentMember.Name, NON_EMPTY_BEHAVIOR=’[Measures].[Order
Quantity]’
SELECT
{[Measures].[Nombre de Producto],[Measures].[Subcategoria Producto],
[Measures].[Canal de ventas], [Measures].[Ratio to All Products],
[Measures].[Order Quantity] } ON COLUMNS,
NON EMPTY { [Sales Channel].[Sales Channel].[Sales Channel].MEMBERS *
[Product].[Product Categories].[Product].MEMBERS} DIMENSION PROPERTIES
MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM ( SELECT { (STRTOMEMBER(@Anyo),STRTOMEMBER(@Categoria) ,
[Geography].[Country].&[United States]) } ON COLUMNS FROM
[Adventure Works])

Los usuarios funcionales desean visualizar, según las cantidades de pedidos, y después
según las proporciones, el desglose por canal de ventas.

1. En el estudio de desarrollo, cree un Nuevo proyecto de tipo Proyecto de servidor de


informes, llámelo Capitulo06.

1. Agregue un origen de datos al informe. Esta fuente de datos será compartida para
todos los informes. Haga clic sobre los orígenes de datos compartidos del
explorador de soluciones para mostrar el menú contextual. Elija agregar un nuevo
origen de datos al proyecto.
2. Llámelo AdvSSAS_se, de tipo Microsoft SQL Server Analysis Services, con la
siguiente cadena de conexión:

Data Source=localhost;Initial Catalog="Adventure Works DW 2008R2 SE"

1. En la información de credenciales, seleccione Usar autenticación de Windows.

ShareVideos
1. En el explorador de soluciones seleccione: Agregar - Nuevo elemento. Seleccione a
continuación un elemento de tipo Informe.

1. En el explorador de soluciones llame al informe DetalleProductosUSA.rdl.


2. En Datos de informe ([Ctrl][Alt] D), agregue un conjunto de datos.

1. En las Propiedades del conjunto de datos seleccione Usar un conjunto de datos


insertado en el informe.

1. Haga clic en Nueva... para añadir un Origen de datos.


2. En las Propiedades del origen de datos, use una referencia de origen de datos
compartido, y seleccione el origen creado.

1. Acepte, haciendo clic en el botón OK para volver a las Propiedades del dataset.
2. Un clic sobre el botón Diseñador de consultas abrirá la ventana del mismo nombre.
3. En la barra de botones, cambie el Modo de diseño

para introducir una consulta.

4. Introduzca la consulta (o descargue el archivo DetalleProductosUSA.mdx).


5. Haga clic en el botón Parámetros de consulta

para definir los dos parámetros.

1. Termine la creación del conjunto de datos. Observe la presencia de conjuntos de


datos ocultos en los Datos de informe.

1. Deslice una matriz, desde la barra de herramientas, hasta la esquina superior


izquierda del informe.

ShareVideos
2. Despliegue los Datos de informe y, a continuación, despliegue el conjunto de datos
principal.
3. Deslice el campo Nombre_Producto hasta la celda llamada Filas de la matriz. Esta
acción realiza el enlace entre la matriz y el conjunto de datos, y crea el grupo de
líneas Nombre_Producto.
4. Deslice el campo Subcategoria hasta la región de Grupos de filas, justo debajo del
grupo de líneas Nombre_Producto. Esta acción tiene como consecuencia la creación
de una agrupación superior sobre las categorías.
5. Deslice en la celda Columnas el campo Canal_de_Ventas. Esta acción tiene como
consecuencia la creación del grupo de columnas Canal_de_Ventas.
6. Deslice en la celda Datos el campo Cantidad_de_la_Orden para mostrar la cantidad
por Canal de ventas.

1. En la zona Grupo de columnas, haga clic sobre el grupo de columnas


Canal_de_Ventas. Seleccione en el menú contextual la opción Agregar grupo,
Adyacente posterior...
2. Reagrupe igualmente por Canal_de_Ventas.

1. Deslice en la celda del nuevo grupo el campo Relacion_a_Todos_los_Productos.


2. En la zona Grupos de columnas usted puede, para cada uno de los dos grupos
adyacentes, incluir un total a continuación.

La matriz utiliza una función de agregación para cada celda de datos que no se ha declarado a nivel
de detalle, la suma en este caso. Esta operación es transparente al desarrollador. Esto no quiere
decir que SSRS haya hecho la elección correcta. Usted debería siempre verificar que no se está
devolviendo un dato sin sentido, y que el informe sigue devolviendo, en efecto, el resultado
esperado.

1. Seleccione la zona de texto de las subcategorías en la matriz y modifique su


propiedad WritingMode por Rotate270, para mostrar la etiqueta verticalmente.
2. Pruebe el informe en la Vista previa y mejore su aspecto cambiando el formato y las
demás opciones que desee.
3. Para ordenar los productos según el orden decreciente de las cantidades pedidas haga clic
en la zona Grupos de filas sobre el grupo Nombre_Producto y muestre sus propiedades.
En la sección de ordenar haga clic en el botón Expresión

e introduzca la expresión =Sum(Fields!Cantidad_de_la_Orden.Value).

ShareVideos
1. A continuación guarde el informe.
2. Despliegue y pruebe el informe en el servidor de informes.

Los "funcionales" piden ahora un segundo informe que presente las categorías, incluyendo
un enlace al informe anterior. Un clic en una categoría del nuevo informe muestra el
informe "Cantidad de pedidos por producto" detallando la categoría. Igual que el primer
informe aparece filtrado por año, el nuevo informe debe incluir esta información para
establecer el enlace. Piden asimismo un gráfico de tipo Minigráfico representando las
cantidades pedidas por año, y un indicador sobre la tasa de margen bruto.

Empecemos por la extracción de datos. La extracción debe traer los datos a nivel mensual
para componer el gráfico, y también los datos anuales para aquella información que no
pueda agregarse a nivel anual. Use la consulta siguiente:

WITH
MEMBER [Measures].[Categoria Nombre Unico] AS [Product].
[Category].CurrentMember.UniqueName
MEMBER [Measures].[Gross Profit Margin Year] AS ([Measures].[Gross
Profit Margin], ANCESTOR([Date].[Calendar].CurrentMember,[Date].
[Calendar].[Calendar Year]))
MEMBER [Measures].[Ratio to All Products Year] AS ([Measures].
[Ratio to All Products], ANCESTOR([Date].[Calendar].CurrentMember,
[Date].[Calendar].[Calendar Year]))
MEMBER [Measures].[Mes Numero] AS [Date].
[Calendar].Properties("KEY1")
SELECT
{[Measures].[Mes Numero], [Measures].[Categoria Nombre Unico] ,
[Measures].[Gross Profit Margin Year], [Measures].[Gross Profit],
[Measures].[Ratio to All Products Year], [Measures].[Order
Quantity] } ON COLUMNS,
NONEMPTYCROSSJOIN({ ([Product].[Product Categories].
[Category].ALLMEMBERS ) }
, {[Date].[Calendar].[Month].MEMBERS}) DIMENSION PROPERTIES
MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM ( SELECT ( { [Date].[Calendar Year].&[2008] } ) ON COLUMNS
FROM [Adventure Works])

El mes está constituido por una clave compuesta en la base SSAS: el año y el índice del mes. Es
posible recuperar este índice en MDX mediante la propiedad .Properties("KEY1"). KEY1 representa
el segundo componente de la clave compuesta, KEY0 la primera.

ShareVideos
Para obtener un porcentaje anual basta con crear una tupla MDX que indique que la medida debe
evaluarse en el total del año. El año puede evaluarse gracias a la función MDX ANCESTOR. En la
jerarquía, el año es el ancestro del mes.

El identificador único de la categoría es necesario para pasar esta información al informe enlazado.

Para crear este informe, siga los siguientes pasos:

1. En el explorador de soluciones seleccione: Añadir - Nuevo elemento - Informe.


2. En el explorador de soluciones llame al nuevo informe
PedidosCategoriasProducto.rdl.
3. En Datos de informe ([Ctrl][Alt] D) agregue un conjunto de datos.
4. En las Propiedades del conjunto de datos seleccione la opción Usar un conjunto de
datos insertado en el informe.
5. Haga clic en Nueva... para añadir un origen de datos.
6. En las Propiedades del origen de datos seleccione usar una referencia de origen de
datos compartido, y seleccione el origen creado.
7. Acepte, haciendo clic en el botón OK para volver a las Propiedades del conjunto de
datos.
8. Un clic en el botón Diseñador de consultas abre la ventana del mismo nombre.
9. En la barra de botones, cambie el Modo de diseño para introducir una consulta.
10. Escriba la consulta anterior (o descargue el archivo MinigraficoCategoria.mdx).
11. Haga clic en el botón Parámetros de la consulta para definir el parámetro Anyo
únicamente, que se corresponde con los años (Jerarquía Fecha.Año Calendario).

1. Deslice una tabla desde el Cuadro de herramientas hasta la esquina superior


izquierda del informe.
2. Visualice los Datos de informe y despliegue el conjunto de datos principal.
3. Deslice el campo Categoria del conjunto de datos hasta la primera columna. Esta
acción tiene como efecto enlazar la tabla al conjunto de datos.

1. En los Grupos de filas modifique las Propiedades del grupo de filas para añadir una
expresión de grupo. Reagrupe según el campo Categoria.

1. Desde el cuadro de herramientas deslice un elemento de tipo Minigráfico en la celda


de la segunda columna de la tabla. Seleccione el primer elemento del tipo columna
y acepte.

ShareVideos
1. Haga clic una vez en el Minigráfico insertado y, a continuación, haga un segundo
clic para abrir el panel Datos del gráfico.
2. Agregue el valor Cantidad_de_la_Orden.
3. Deslice el campo Ratio_to_All_Products_Year desde el cuadro de herramientas
hasta la tercera columna de la tabla. La expresión suma creada no se corresponde
con nuestra necesidad. Por ello, reemplácela por:
=First(Fields!Ratio_to_All_Products_Year.Value).
4. Agregue una cuarta columna a la derecha de la tabla: haga clic en la última columna
para desplegar el menú contextual y seleccione Insertar columna - derecha.
5. Deslice el campo Gross_Profit_Margin_Year desde el Cuadro de herramientas hasta
la última columna de la tabla. Reemplace la expresión por:
=First(Fields!Gross_Profit_Margin_Year.Value).
6. Agregue una quinta columna a la derecha de la tabla: haga clic sobre la última
columna para desplegar el menú contextual y seleccione Insertar columna - derecha.
7. Deslice el campo Gross_Profit_Margin_Year desde el Cuadro de herramientas hasta
la última columna de la tabla. Reemplace la expresión por:
=Fields!Gross_Profit_Margin_Year.Value*100. Como todos los valores son
idénticos para una categoría y un año, tomar el primero o cualquier otro no supone
diferencia alguna. Los indicadores SSRS no permiten la agregación First. El valor
se multiplica por 100 para obtener un valor entre 1 y 100.

1. Desde el Cuadro de herramientas deslice un elemento Indicador hasta la celda de la


última columna de la tabla. Seleccione el primer tipo de Formas y haga clic en
Aceptar.

1. Haga clic dos veces sobre el indicador que acaba de crear para abrir el panel de
Datos del medidor.
2. En las Propiedades de indicador modifique Valor y estados. Porcentaje significa que
el valor se compara con otros de la tabla. Este no es nuestro caso. El indicador que
deseamos visualizar se evalúa únicamente en función del valor del margen de la
categoría. En Unidad de medida de estados seleccione Numérico en vez de
Porcentaje. A continuación, defina los Estados de indicador según muestra la
pantalla siguiente:

1. Acepte.

Queda crear el enlace con el primer informe.

ShareVideos
1. Haga clic en el campo Categoria de la primera columna. Menú contextual,
Propiedades de la Zona de texto, página Acción. Seleccione Ir al informe.
2. Indique el nombre del informe DetalleProductosUSA.
3. Agregue el parámetro: Anyo =Parameters!Anyo.Value.
4. Agregue el parámetro: Categoria =Fields!Categoria_Nombre_Unico.Value.
5. Acepte.
6. Guarde el informe.
7. Despliegue y pruebe el informe en el servidor de informes.

Un clic sobre la categoría abre el primer informe con ambos parámetros inicializados.

Uso de Report Builder


Microsoft ha editado con SQL Server 2008 R2 la tercera versión de Report Builder. Report
Builder puede usarse como alternativa al estudio (BIDS) para los desarrollos. Oficialmente,
la versión 3.0 supone una evolución de la versión 2.0, aunque no permite reemplazar la 1.0.

1. Escoger entre BIDS y Report Builder

El uso de Report Builder 3.0 es muy parecido al del estudio de desarrollo con algunas
excepciones:

 Report Builder no trabaja con un proyecto y una solución. Cada informe o conjunto
de datos compartido se edita de forma independiente.
 Report Builder no permite crear un origen de datos compartido (a los orígenes de
datos se les llama conexiones). El origen de datos compartido, necesario en la etapa
de creación de una solución empresarial, se crea bien a través del estudio de
desarrollo o bien a través del gestor del informe.
 Los elementos del Cuadro de herramientas del estudio se encuentran en el menú
Insertar en la cabecera de Report Builder.
 Report Builder 3.0 puede trabajar en modo conectado al servidor de informes: el
hecho de guardar los cambios publica directamente el archivo, informe o conjunto
de datos en el servidor de informes. También es posible trabajar en modo
desconectado.
 En modo conectado el Report Builder usa el servidor de informes para procesar y
renderizar el informe guardando los datos en la caché. El desarrollo gana así en
rapidez.
 Report Builder es la única herramienta que usa las partes de informe publicadas en
el servidor de informes, gracias al icono del menú Insertar.
 Report Builder es bastante agradable de usar.

Report Builder 3.0 puede abrirse directamente desde el servidor de informes mediante el
sistema ClickOnce: un botón que descarga y lanza la aplicación. En este caso Report

ShareVideos
Builder se abre e inicia en modo conectado. Este modo está principalmente destinado a
aquellos usuarios finales avanzados que trabajan directamente sobre los datos en
producción.

No obstante es posible descargar la herramienta desde la dirección:


http://www.microsoft.com/downloads/details.aspx?FamilyID=d3173a87-7c0d-40cc-a408-
3d1a43ae4e33&displaylang=en si desea trabajar sin un servidor de informes.

Report Builder puede reemplazar a BIDS como herramienta de desarrollo. No obstante será
preciso prever como mínimo un servidor de informes para acceder a los orígenes de datos
compartidos. Puede usar un gestor de orígenes de datos guardando en disco los informes y
conjuntos de datos. Si, por el contrario, escoge trabajar siempre en modo conectado al servidor de
informes, planifique una copia de seguridad frecuente de la base de datos ReportServer de
desarrollo.

2. Escoger entre Report Builder 1.0 y 3.0

Microsoft no proporciona de momento un sucesor a Report Builder 1.0, en el que la idea es


permitir al usuario final crear sus propios informes básicos a partir de modelos de informes
puestos a su disposición por parte del equipo de desarrollo. Por el contrario, las versiones
2.0 y 3.0 son simples herramientas de desarrollo.

Oficialmente todavía se distribuye con SQL Server 2008 R2. Teóricamente, para usar la
versión 1.0 hay que cambiar un parámetro en la configuración del site desde el
administrador de informes.

Report Builder 3.0 gestiona tanto los modelos de informe como los orígenes de datos igual
que BIDS. Por el contrario, un informe creado con la versión 1.0 y modificado con la
versión 3.0 no podrá abrirse más con la versión 1.0.

Contrariamente a lo que anuncia el fabricante de software


(http://download.microsoft.com/download/7/F/D/7FDAA75C-1273-4DFE-8EC6-
D9699C3EE47F/SQL_Server_2008_R2_Report_Builder_3_0FAQs.docx) probablemente nunca
exista un sucesor a la versión 1.0.

Despliegue
Orígenes de datos compartidos, conjuntos de datos compartidos, informes y partes de
informes pueden desplegarse en el servidor de informes.

ShareVideos
1. Despliegue asistido desde BIDS

Para modificar las opciones de desarrollo del proyecto en el estudio de desarrollo,


despliegue el menú contextual del proyecto en el Explorador de soluciones y haga clic en
Propiedades.

Las siguientes propiedades no aplican más que al desarrollo de la solución desde el estudio:

 TargetServerURL: dirección del servidor de informes.


 TargetServerVersion: versión del servidor de informes.
 OverwriteDatasets: esta propiedad indica si la acción de desplegar un conjunto de
datos debe borrar el antiguo o no. SSRS identifica un conjunto de datos por su ruta
y su nombre en el servidor. Modificar un conjunto de datos compartido
directamente en el servidor de informes puede dañar todos los informes que hagan
uso de él.

Preste especial atención a la hora de asignar nombres únicos a sus conjuntos de datos en tiempo
de desarrollo.

 OverwriteDataSources: esta propiedad indica si la acción de desplegar un origen de


datos borra el antiguo o no. En el 99% de los casos, un origen de datos no se
modifica una vez creado. Es por tanto habitual conservar esta propiedad a False.
 TargetDatasetFolder: carpeta en la que se despliegan los conjuntos de datos
compartidos.
 TargetDataSourceFolder: carpeta en la que se despliegan los orígenes de datos
compartidos.
 TargetReportFolder: carpeta en la que se despliegan los informes.
 TargetReportPartFolder: carpeta en la que se despliegan las partes de informe.

Las partes de informe no se despliegan en el mismo instante que los demás componentes. Es
preciso desplegarlas desde la opción de menú Informe - Publicar las partes de informe.

Inicie el despliegue con la opción de menú Generar - Desplegar, o desde el menú contextual
en el Explorador de soluciones.

El administrador de configuraciones, accesible en la Página de propiedades del proyecto,


permite gestionar varias configuraciones y un servidor de despliegue por configuración. Por
defecto se crean tres configuraciones, DebugLocal para trabajar en BIDS, Debug para
desplegar sobre el servidor de test y Release para el despliegue en producción. Es posible

ShareVideos
añadir más. Marcar la casilla Desplegar permite definir si los componentes se despliegan en
el servidor seleccionado o si se ejecutarán en local.

El despliegue desde el estudio de desarrollo no está adaptado al entorno de producción.

2. Despliegue con el administrador de informes

El administrador de informes permite desplegar individualmente los archivos en el servidor


de informes.

1. Conéctese a través de Internet Explorer al administrador de informes (por defecto en


la ruta http://localhost:8080/Reports).
2. Aparece el servidor de informes. La página Web presenta la carpeta raíz. Cree una
nueva carpeta llamada Mis Orígenes de datos (la opción Ocultar en modo mosaico
permite ocultar un elemento en el modo que habitualmente utilizan los usuarios
finales, úsela para ocultar la carpeta de orígenes de datos).
3. Active el Modo Detalles.
4. Abra la carpeta Mis Orígenes de datos.
5. Escoja Nuevo origen de datos para crear un origen de datos compartido apuntando a
su servidor SSAS.
6. Dé nombre al Cubo Ejemplo, escoja el Tipo de origen de datos Microsoft SQL
Server Analysis Services, introduzca la Cadena de conexión Data
Source=localhost;Initial Catalog="Adventure Works DW 2008R2 SE" (por
ejemplo) y seleccione la conexión mediante Seguridad integrada de Windows.
7. Haga clic en el botón OK para terminar la creación del origen de datos.
8. Vuelva a la carpeta raíz gracias al enlace que aparece en la parte superior izquierda
de la página Web.
9. Cree una Nueva carpeta Mis informes.
10. Abra la nueva carpeta Mis informes.
11. Haga clic en Descargar un archivo.
12. Escoja el informe PedidosCategoriasProducto.rdl.
13. El informe cargado aparece en el mosaico. En el menú de la derecha, seleccione
Administrar.
14. Abra los Orígenes de datos.
15. Aparece un mensaje de información: La referencia al origen de datos compartido no
es válida. Es normal: el origen de datos compartido no se ha desplegado con el
informe.
16. Haga clic en el botón Examinar y seleccione el origen creado anteriormente en la
carpeta Mis Orígenes de datos.
17. Acepte el cambio haciendo clic en Aplicar.
18. El informe se despliega y puede ejecutarse.

El administrador de informes permite asegurar el despliegue de objetos sobre el servidor y


además: administrar los permisos, actualizar los parámetros por defecto...

ShareVideos
Impresión
En sus inicios los informes estaban destinados esencialmente a su impresión. Con la
proliferación de soportes digitales, los usuarios ya no imprimen sistemáticamente los
informes. SSRS ofrece varios tipos de presentación, PDF, Excel, Word..., que permiten
conservar el informe sin tener que imprimirlo, trabajar con él, e incluso publicarlo fuera del
servidor de informes.

1. Configurar página

Las opciones para configurar la página del informe están accesibles en el menú Informe -
Propiedades del informe del estudio de desarrollo.

Solamente la impresión directa y las opciones de representación siguientes toman en cuenta la


configuración de página definida: PDF, Archivo TIFF y Word.

Las opciones para configurar la página son las clásicas: Orientación, Tamaño del papel y
Márgenes.

2. Formatos de representación

SSRS 2008 R2 proporciona los siguientes formatos de representación:

 PDF
 Archivo TIFF
 MHTML
 Excel
 Archivo XML con datos de informe
 CSV (delimitado por comas)

Para no llevarse sorpresas, se aconseja encarecidamente probar cada uno de los formatos de
representación durante la etapa de tests unitarios del informe.

Existen dos instrucciones nuevas que permiten actuar según el formato de representación
escogido: Globals!RenderFormat.Name y Globals!RenderFormat.IsInteractive. Estas instrucciones
pueden usarse para ocultar ciertas zonas del informe que puedan crear efectos indeseados en la
representación en Excel por ejemplo.

=IIF(Globals!RenderFormat.Name = "Excel", True, False)

ShareVideos
3. Impresión desde el puesto cliente

Es posible realizar una impresión de calidad gracias al formato de representación en PDF.

El gestor del informe permite a su vez realizar una impresión directamente a partir de la
barra de botones. La impresión se hace mediante un cliente ActiveX. El usuario debe
aceptar su instalación la primera vez, y tal vez modificar las opciones de seguridad del
navegador.

Administración
La administración del servidor de informes tiene como objetivo asegurar su
funcionamiento, gestionar los permisos de acceso de los usuarios finales y optimizar el
rendimiento. Este capítulo describe los aspectos principales a tener en cuenta para iniciarse
en SSRS.

1. Configuración del servidor


a. Administrador de configuración de Reporting Services

La primera tarea consiste en instalar SSRS y verificar que la instalación se ha desarrollado


correctamente según sus necesidades. A continuación es importante realizar una copia de
seguridad de la clave de cifrado. Estas acciones pueden llevarse a cabo desde el gestor de
configuración de SSRS.

1. Abra desde el menú Inicio: Inicio - Microsoft SQL Server 2008 R2 - Administrador
de configuración de Reporting Services.
2. Conéctese al servidor de informes.
3. El administrador está organizado en varias páginas. Cada página le permite
administrar un aspecto del despliegue del servidor SSRS. La primera le informa
acerca del Estado de Report Server.
4. En la página Cuenta de servicio, introduzca o modifique la cuenta de Windows del
usuario local, o de dominio, que ejecuta el servicio del servidor de informes.
5. La página Dirección URL del servicio Web permite definir una o varias URL para
el servidor de informes, y eventualmente habilitar la conexión segura SSL.
6. Base de datos es útil para crear o cambiar de base de datos. El servidor de informes
almacena toda la información en una base de datos llamada por defecto
ReportServer. Tras un incidente, es importante poder restablecer esta base de datos
y reinstalar un servidor de informes para usarla.
7. Igual que para el servicio Web, una página similar le permite definir la URL del
Administrador de informes.
8. El servidor tiene la posibilidad de entregar los informes a los usuarios suscritos por
mensajería SMTP, la página Configuración de correo electrónico le permite definir
la dirección del servidor SMTP que desea utilizar.

ShareVideos
9. Para todas las operaciones que consumen recursos externos al servidor sin pasar por
las bases de datos, por ejemplo para cargar una imagen en un informe, se aconseja
definir una cuenta de Windows de dominio distinta a la cuenta de servicio. Esta
cuenta, llamada Cuenta de ejecución, se debe definir en la página del mismo
nombre.
10. Claves de cifrado es una de las páginas más importantes. Entre toda la información
almacenada en la base de datos del servidor de informes, una parte es ciertamente
sensible y está encriptada por el motor. Las fuentes de datos, o las suscripciones de
usuarios, se encuentran entre esta información. En caso de ocurrir un incidente, o de
una migración, usted quiere evidentemente conservarla. Por ello le será útil realizar
una copia de seguridad de la clave utilizada en la instalación del servidor. La copia
de seguridad se hace en un archivo protegido por contraseña. A su vez, es
indispensable asegurarse de que las copias de seguridad de la base de datos se
realizan correctamente.

La problemática de la clave de cifrado es muy importante para asegurar la disponibilidad de la


aplicación. Diseñe un procedimiento de explotación para restaurarla, y pruébelo bien. En este
procedimiento es más sencillo usar la herramienta de línea de comandos rskeymgmt.exe en vez
del administrador de configuración.

2. Seguridad

Por defecto, SSRS hace uso de la seguridad de Windows. SSRS usa dos tipos de roles para
definir los permisos de un usuario o de un grupo: los roles sobre los elementos y los roles
de sistema. Los primeros definen la seguridad de acceso a los elementos desplegados,
mientras que los segundos lo hacen sobre las funcionalidades del sistema.

a. Roles sobre los elementos

Los elementos securizables son:

 Carpetas
 Informes
 Orígenes de datos compartidos
 Conjuntos de datos
 Modelos de informe
 Partes de informe
 Cualquier otro recurso desplegado en el servidor (recuerde que es posible descargar
un archivo de cualquier tipo desde el servidor de informes).

ShareVideos
Por defecto, se hereda la seguridad del elemento padre, tomando como punto de partida la
Carpeta raíz. Por defecto, todos los elementos de una carpeta heredan la seguridad de la
carpeta.

Un rol se define como un conjunto de tareas que abren o cierran los permisos de acceso a
las familias de elementos agrupados según el tipo: modelos de informe, informes... Las
tareas definidas son las siguientes:

Tarea Elementos Autorización


Leer el contenido
Informes
Leer los informes Leer la definición del informe
Conjuntos de datos
compartidos
Leer las propiedades
Crear un enlace
Crear informes enlazados Informes
Leer las propiedades
Leer las propiedades

Leer cualquier suscripción


Administrar las
Informes Crear cualquier suscripción
suscripciones
Borrar cualquier suscripción

Actualizar cualquier suscripción


Crear un origen de datos en la
carpeta
Carpetas
Actualizar sus propiedades
Administrar los orígenes
de datos Orígenes de datos
Borrar el contenido de
compartidos
actualización

Leer las propiedades


Crear una carpeta

Borrar las propiedades de


Administrar las carpetas Carpetas
actualización

Leer las propiedades


Leer las propiedades
Administrar las
Informes
suscripciones individuales Crear una suscripción

ShareVideos
Tarea Elementos Autorización
Borrar una suscripción

Leer una suscripción

Actualizar una suscripción


Crear el modelo en la carpeta

Leer las propiedades

Leer el contenido

Borrar el contenido de
actualización

Leer los orígenes de datos


Carpetas
Administrar los modelos
Actualizar los orígenes de datos
Modelos
Leer las estrategias de autorización
de los elementos de los modelos

Actualizar las estrategias de


autorización de los elementos de
los modelos

Borrar las propiedades de


actualización
Leer las propiedades

Crear un histórico del informe

Borrar un histórico del informe


Administrar el histórico
Informes
del informe
Ejecutar la estrategia de lectura

Actualizar la estrategia

Archivar el histórico del informe


Carpetas Crear un informe o un conjunto de
datos en la carpeta
Informes
Administrar los informes
Leer las propiedades
Conjuntos de datos
compartidos Borrar las propiedades de

ShareVideos
Tarea Elementos Autorización
actualización

Actualizar los parámetros

Leer los orígenes de datos

Actualizar los orígenes de datos

Leer la definición del informe

Actualizar la definición del


informe

Ejecutar la estrategia de lectura

Actualizar la estrategia
Crear un recurso o una parte de
informe en la carpeta
Carpetas
Actualizar las propiedades
Administrar los recursos Recursos
Borrar el contenido de
Partes de informe actualización

Leer las propiedades


Informes

Orígenes de datos
compartidos
Leer las estrategias de seguridad
Definir la seguridad para
Conjuntos de datos
elementos individuales Actualizar las estrategias de
compartidos
seguridad
Carpetas

Recursos
Leer el contenido
Mostrar los orígenes de Orígenes de datos
datos compartidos
Leer las propiedades
Leer las propiedades

Mostrar las carpetas Carpetas Ejecutar y visualizar

Archivar el histórico del informe

ShareVideos
Tarea Elementos Autorización
Leer las propiedades
Modelos de
Mostrar los modelos Leer el contenido
informe
Leer los orígenes de datos
Informes
Leer el contenido
Mostrar los informes
Conjuntos de datos
Leer las propiedades
compartidos
Recursos Leer el contenido
Mostrar los recursos
Partes de informe Leer las propiedades

La gestión de los roles se hace con SSMS conectado al servidor de informes. Es posible
crear, modificar o suprimir roles. Con la instalación se incluyen varios roles predefinidos.
Por cada rol existente se genera una asociación con una o varias de las tareas arriba
descritas.

El mecanismo que permite securizar el contenido de su gestor del informe se llama


atribución de roles. La atribución de roles se realiza en el administrador de informes, a
nivel de elemento a securizar. Asocia un elemento, una cuenta o grupo de Windows y uno o
varios roles. Basta con abrir la página de Seguridad del elemento.

Para la carpeta raíz la página de Seguridad se accede mediante el botón Parámetros de la carpeta
en la página de la carpeta raíz.

Se aconseja simplificar al máximo e intentar agrupar los elementos en las carpetas


correspondientes según los permisos que se otorguen a los usuarios finales.

Esta gestión de permisos no tiene efecto sobre los permisos de acceso a los datos que se han
definido en los orígenes de datos.

b. Roles de sistema

Del mismo modo, los roles de sistema se definen con SSMS asociando una o varias tareas
predefinidas.

Tarea Descripción
Mostrar las tareas Permite ver una tarea programada que está disponible
programadas compartidas para su uso general.

ShareVideos
Tarea Descripción
Mostrar las propiedades del Permite ver las propiedades que se aplican al servidor
servidor de informes de informes.
Ejecutar la definición del Iniciar la ejecución a partir de la definición del
informe informe sin publicarlo en Report Server.
Proporciona una aplicación que permite generar
Generar eventos eventos en el espacio de nombres del servidor de
informes.
Administrar la seguridad Permite ver y modificar los atributos de los roles a
del servidor de informes nivel de sistema.
Permite crear, modificar y suprimir tareas
Administrar las tareas
programadas compartidas que se usan para ejecutar o
programadas compartidas
actualizar los informes.
Administrar las Permite ver y modificar las propiedades que se
propiedades del servidor de aplican al servidor de informes y a los elementos
informes administrados en él.
Permite crear, ver y modificar las definiciones de
Administrar los roles
roles.
Administrar las tareas Permite ver y anular las tareas en curso de ejecución.

La asociación entre roles de sistema y cuentas o grupos de usuarios de Windows se hace en


el administrador de informes a través de la Configuración del sitio, página Seguridad.

Por defecto los BUILTIN\Administradores del servidor están definidos como


Administradores del sistema. Es probable que esto no responda a sus necesidades.

c. Usuarios externos

SSRS no tiene un catálogo de usuarios. Se basa en el del sistema operativo. En muchos


escenarios esta arquitectura no es suficiente. SSRS incluye un framework completo para
extender el sistema de seguridad y crear una extensión de seguridad personalizada.

Sobre este asunto, lea el artículo: http://msdn.microsoft.com/en-us/library/ms152825.aspx

Presentación de SSIS
SSIS es un ETL (del inglés Extract, Transform & Load - Extraer, Transformar y Cargar):
está compuesto principalmente por un potente motor de procesamiento de datos. Este motor
permite leer múltiples orígenes de datos heterogéneos, efectuar transformaciones sobre los
datos y escribirlos en uno o varios destinos, incluso en modo diferido. Aunque esta
funcionalidad puede parecer interesante en todo el conjunto del SI (Sistema de
Información), el ETL está reconocido como una herramienta muy valiosa de Business
Intelligence destinada a la alimentación del Data Warehouse.

ShareVideos
SQL Server ya es en sí mismo un potente motor de datos. Microsoft complementa esta
potente solución con ETL SSIS, permitiéndole separar las aplicaciones OLTP de los
procesos de BI, acceder a orígenes de datos variados y presentar una paleta de
funcionalidades complementarias como transferencias FTP, realizar una copia de seguridad
de la base de datos SQL Server, o enviar un correo electrónico. Todas estas funcionalidades
complementarias, o parte de ellas, se pueden acceder a través de otros medios (scripts,
desarrollos .NET, Transact SQL), pero aquí se integran en un entorno de desarrollo
puramente gráfico, lo que supone al mismo tiempo una ventaja y un inconveniente. Una
ventaja porque los algoritmos se muestran de forma visual a los desarrolladores o incluso a
una persona no iniciada. Un inconveniente porque más allá de la representación gráfica
toda la configuración está oculta en las ventanas de propiedades.

Para grandes proyectos se recomienda recurrir a procesos ETL, aunque no es obligatorio. Si los
orígenes de datos son de tipo SQL Server o de tipo texto, y los motores de bases de datos OLTP no
están muy saturados, utilizar el motor SQL para cargar los datos en el Data Warehouse es una
solución viable y económica (véase el capítulo Sacar provecho al motor SQL).

SSIS se compone de un motor de flujo de datos, el núcleo del ETL, y un motor de flujo de
control. Más que una simple caja de herramientas, el flujo de control permite orquestarlas
enlazándolas mediante restricciones de precedencia que condicionen la ejecución de una
tarea respecto a la ejecución de alguna otra. En el flujo de control, el flujo de datos es una
simple tarea al mismo nivel que las demás. Por consiguiente diremos que el flujo de datos
es el núcleo del producto.

Ciertos desarrollos SSIS cargan los datos brutos en la base de datos y a continuación usan
únicamente consultas SQL para cargar el DW: jamás recurren al motor de flujo de datos. En este
caso, escoger SSIS puede verse como un error en la evaluación de productos. En efecto, ¿por qué
no usar simplemente un script Transact SQL? Esto evitaría al equipo de desarrollo adquirir
competencias SSIS.

1. Paquetes DTSX

Usar SSIS pasa por el desarrollo y la puesta en producción de paquetes (packages). El


paquete es un archivo con extensión .DTSX escrito en formato XML. Contiene la
descripción de los flujos de datos, los orígenes, los destinos y sus transformaciones, la
correspondencia entre ellos así como los flujos de control.

El uso de un origen con formato XML, y el hecho de que este mismo origen se use para la
ejecución, le permite crear su propio generador de orígenes en función de un diccionario de
metadatos y comentar sus desarrollos mediante consultas XML. Como inconveniente
diremos que el lenguaje XML puede llevarnos a usar archivos de origen de datos de tamaño
considerable.

ShareVideos
Se aconseja por tanto limitar el ámbito de un paquete a la alimentación de una única tabla en el
Data Warehouse. Trabajar con un único paquete responsable del proceso de alimentación
completo de todo el DW se convierte rápidamente en un freno para mantener su nivel de calidad.
Haciéndolo al revés y desacoplando el proyecto en paquetes pequeños, uno por destino, le
permite trabajar en equipo, realizar una gestión óptima de los orígenes de datos y, sobretodo,
asegurar la contención del perímetro de los tests de regresión en caso de que se haya corregido un
error, como ocurre en todo lenguaje de programación. Esta buena práctica implica a día de hoy
una complejidad que no es despreciable, aunque el beneficio es superior.

Asistente de creación de paquetes

SSMS (SQL Server Management Studio) proporciona un asistente de creación de paquetes


SSIS. Sobre una base de datos SQL Server, escoja Tareas - Importar datos o Tareas -
Exportar datos. Son tareas básicas sin transformación pero que pueden ser muy útiles por
ejemplo para alimentar un escenario.

2. El estudio de desarrollo

El desarrollo de un paquete se hace en BIDS (Business Intelligence Development Studio),


creando o abriendo un proyecto de Integration Services.

a. Apariencia del estudio

Para familiarizarse con el estudio de desarrollo propio de SSIS, es más sencillo abrir un
proyecto existente.

1. Abra BIDS desde el menú de Inicio: Inicio - Microsoft SQL Server 2008 R2 - SQL
Server Business Intelligence Development Studio.
2. En el menú Archivo - Abrir seleccione Proyecto/Solución.
3. Vaya a la carpeta de ejemplos \Samples\Integration Services\Package
Samples\LookupSample\LookupSample y seleccione el proyecto
LookupSample.dtproj.
4. En el menú Ver, seleccione Explorador de soluciones.
5. En el Explorador de soluciones, bajo la carpeta Packages SSIS, haga doble clic en el
paquete LookupSample.dtsx.

Si en la carpeta de la solución aparece un archivo del mismo nombre que la solución pero con
extensión .suo, permite abrir automáticamente uno o varios paquetes cuando se abra la solución.
El archivo .suo guarda la última configuración. Este archivo puede suprimirse para abrir
únicamente el proyecto.

ShareVideos
Tras abrir del paquete BIDS se muestra la pestaña de diseño del flujo de control.

Pestaña Flujo de control del estudio de desarrollo SSIS

Además de los habituales Explorador de soluciones y Propiedades, el estudio muestra los


siguientes paneles:

 Panel de diseño central. La interfaz del estudio permite abrir varios paquetes,
separados en pestañas bajo el menú. Cuando seleccionamos una de las pestañas
BIDS muestra un panel de diseño que está compuesto a su vez de cuatro pestañas:
o Flujo de control: el flujo de control constituye el punto de partida del
desarrollo y de la ejecución. Diseñar el flujo de control consiste en deslizar
tareas y contenedores desde el Cuadro de herramientas y enlazarlas por
restricciones de precedencia. Un paquete contiene un único flujo de control.
o Flujo de datos: cuando se agrega una tarea al flujo de control esta pestaña
permite editarla. Diseñar un flujo de datos consiste en deslizar orígenes y
destinos y enlazarlos por caminos de acceso al flujo de datos pasando por
transformaciones. Un paquete puede contener varios flujos de datos.
o Controladores de eventos: el estudio permite crear flujos de control llamados
controladores de eventos o flujos de trabajo (workflow) bien a nivel de
paquete o bien a nivel de una tarea o contenedor del flujo de control
principal. La ejecución de tal flujo se inicia mediante un evento como:
OnError, OnWarning, OnProgress...

El controlador de eventos le permite interceptar y procesar un evento mediante la


ejecución de un flujo de control especial a todos los niveles del flujo de control
principal, aunque su uso no es evidente. En efecto, los eventos OnError y
OnTaskFailed ya están controlados mediante restricciones de precedencia del flujo
de control principal, y el evento OnWarning puede interceptarse para alimentar
una traza gracias a la funcionalidad registro. En cuanto a los demás elementos... La
implementación de eventos puede no parecer evidente a un desarrollador que
abra el paquete por vez primera, y añade una complejidad innecesaria al
desarrollo y al mantenimiento. Esta funcionalidad debe enmarcarse estrictamente
según reglas especiales de desarrollo, o bien descartarse.

o Explorador de paquetes: el explorador de paquetes permite ver el contenido


del paquete en forma de arborescencia similar al explorador de archivos.
Esta herramienta es práctica sobretodo para descubrir si el paquete contiene
controladores de eventos. Las tareas y los contenedores del flujo de control
aparecen bajo el nodo Ejecutables. Se trata principalmente de una interfaz de

ShareVideos
lectura, aunque no obstante permite modificar las propiedades de los
elementos e incluso borrarlos.

 Administradores de conexión: este administrador permite gestionar las conexiones a


los orígenes y destinos del flujo de datos, pero también conexiones a recursos como
un servidor FTP (File Transfer Protocol) o SMTP (Simple Mail Transfer Protocol).
El administrador de conexiones es un panel integrado en el panel de diseño central.
No aparece en el explorador de paquetes.
 Cuadro de herramientas: el cuadro de herramientas muestra las tareas y
contenedores del flujo de control o los orígenes, destino y transformaciones del
flujo de datos según el contexto.

El menú SSIS permite acceder a otras funcionalidades:

 Registro (logging): habilita el registro de eventos y mensajes de ejecución en un


archivo de log (texto, tabla SQL...).
 Configuraciones de paquetes: permite desplegar un paquete sobre distintos entornos
(pruebas, preproducción, producción, etc.) extrayendo en una configuración todos
los parámetros del paquete. Véase la sección Flujo de datos (Data Flow) -
Desarrollos - Configuración en este capítulo.
 Firma digital: permite firmar un paquete con un certificado digital para identificar
su origen. Existen varios métodos adicionales que permiten controlar esta firma
digital antes de la ejecución.
 Variables: muestra un panel que permite administrar las variables. Véase la sección
Flujo de datos (Data Flow) - Cuadro de herramientas del flujo de datos en este
capítulo.
 Trabajar sin conexión: tras abrir un paquete el estudio intenta acceder a todas las
conexiones y, a continuación, validar los metadatos ligados a las mismas. Si su
puesto de desarrollo no tiene acceso a una o varias de estas conexiones, esta etapa
puede bloquear temporalmente el estudio de desarrollo. Esta molesta situación
puede evitarse activando esta opción, accesible antes de abrir el paquete.
 Registrar eventos: permite ver en un panel dedicado toda la información que se
dirige al registro (véase arriba).
 Depurar informes de progreso: la ejecución en el estudio de un paquete provoca la
aparición de una nueva pestaña de progreso o resultado de la ejecución en el panel
de diseño central. Si selecciona esta opción (por defecto), la información de
depuración alimenta esta pestaña.

b. Proyecto SSIS

El Explorador de soluciones muestra cómo un proyecto SSIS puede contener orígenes de


datos y DSV (vistas del origen de datos). Los orígenes de datos permiten centralizar la
información de conexión a una base de datos compartida por varios paquetes: se puede
crear una conexión en cada paquete haciendo referencia a este origen de datos. La DSV
permite crear una capa de abstracción entre los paquetes y una base de datos con el objetivo

ShareVideos
de ocultar al diseñador aquellos elementos innecesarios y cargar una única vez la caché en
tiempo de desarrollo.

El uso de orígenes de datos no resulta interesante, pues tendrá que recurrir a la configuración para
administrar la información de conexión. En cuanto a las DSV, sus ventajas no son suficientes como
para justificar su uso.

c. Ejecución

El estudio permite ejecutar en modo de depuración un paquete, o una parte de un paquete,


gracias a la opción Ejecutar... del menú contextual en el Explorador de soluciones, o de un
elemento del flujo de control. El usuario puede seguir la ejecución de forma visual gracias a
un juego de colores: amarillo: en curso, verde: ejecución terminada con éxito y rojo:
ejecución errónea. En el flujo de datos este sistema se completa con un recuento visual del
número de registros tratados por cada camino de acceso al flujo de datos.

La ejecución también puede iniciarse a través del menú Depurar - Iniciar depuración o mediante el
botón correspondiente en la barra de herramientas, y aunque el paquete ejecutado no siempre
esté activo esto se indica en las propiedades del proyecto. Para configurar la ejecución del
paquete activo abra el menú contextual del proyecto en el Explorador de soluciones, haga clic en
Propiedades, vaya a la página de depuración y elija la opción ExecutePackage en StartAction y
seleccione el <Paquete activo> en StartObjectID.

Gestión de conexiones
La alimentación del DW pasa por la lectura de distintos orígenes de datos. Estos datos
pueden transitar por una base de datos intermedia (staging area o área de ensayo) antes de
escribirse en el DW. El paquete puede buscar los datos en un sitio FTP, enviar un registro
de errores por correo electrónico, enviar un mensaje a una cola MSMQ (Microsoft Message
Queuing), iniciar el procesamiento de una dimensión de un cubo... Todas estas operaciones
requieren conexiones.

1. Centralizar las conexiones

La administración de conexiones está centralizada en el administrador de conexiones. Si


varios elementos del paquete van a acceder al mismo recurso defina la información de
conexión una sola vez creando una conexión única en el administrador.

La creación de conexiones se hace desde los editores de tareas, de orígenes, de destinos, de


transformaciones o directamente desde el administrador mediante la opción Nueva
conexión del menú contextual.

ShareVideos
Tipos de conexión disponibles

2. Tipos de conexión

Cada conexión tiene un tipo de conexión definido. A cada tipo de conexión le corresponde
un editor del administrador de conexiones que le permite crear la cadena de conexión o
ConnectionString de su conexión.

Sería posible escribir un libro entero para describir todas estas conexiones. En la captura de
pantalla anterior no aparecen todas. Para más información, diríjase a las direcciones:

 http://msdn.microsoft.com/es-es/library/ms140203(SQL.105).aspx
 http://msdn.microsoft.com/en-us/library/dd299429.aspx
 http://ssis.wik.is/Data_Sources

Seleccione sus conexiones con precaución ayudándose de los enlaces anteriores, ganará un
tiempo precioso.

3. Conexiones a base de datos

Las conexiones a motores de bases de datos más corrientes son las realizadas por los tipos
OLE DB, ADO.NET, ADO o ODBC. Cada tipo tiene sus propias particularidades. Para
realizar una alimentación masiva y con buen rendimiento, seleccione OLE DB. Para
llamadas unitarias con uso de variables como parámetros, seleccione ADO.NET.

Sería inteligente crear dos conexiones a un mismo origen de datos: la primera, de tipo OLE DB,
para lecturas y tareas de carga y la segunda, de tipo ADO.NET, para llamadas a procedimientos
almacenados y otros comandos que requieran el paso de parámetros.

Aunque este no es el único argumento para justificar la observación anterior es preciso


saber que cada tipo tiene una sintaxis propia para gestionar el paso de parámetros a las
consultas SQL. SSIS no sobrecarga esta sintaxis y usted tiene que adaptarse a cada caso. La
tabla siguiente realiza una síntesis.

Tipo de Parámetro de la Número de parámetros


Ejemplo SQL
conexión consulta SQL en la interfaz SSIS
Entero, 0 para el primer SELECT precio FROM
OLE DB (&
? parámetro, 1 para el HechosPrecios WHERE
Excel)
segundo... ClaveProducto = ?

ShareVideos
Tipo deParámetro de la Número de parámetros
Ejemplo SQL
conexión consulta SQL en la interfaz SSIS
El parámetro tiene el SELECT precio FROM
mismo nombre que el HechosPrecios WHERE
ADO.NET @<parámetro>
que se usa en la ClaveProducto =
consulta. @QueProducto
Cadena Param seguida
de un entero: Param1 SELECT precio FROM
ADO ? para el primero, HechosPrecios WHERE
Param2 para el ClaveProducto = ?
segundo...
Entero, 1 para el primer SELECT precio FROM
ODBC ? parámetro, 2 para el HechosPrecios WHERE
segundo... ClaveProducto = ?

4. Seguridad

Para conectarse a la base de datos SQL Server, es posible optar por una autenticación
Windows o SQL Server. La autenticación Windows de SQL Server es un caso particular
puesto que la conexión no contiene ni el nombre ni la contraseña. En otros tipos de base de
datos la conexión incluye un nombre de usuario y una contraseña. Esta información
confidencial puede poner en peligro su sistema si llega a manos incorrectas, por ello está
encriptada por defecto en el paquete SSIS. Esto puede suponerle una preocupación desde el
momento del desarrollo.

1. En el Explorador de soluciones, dentro de la carpeta Packages SSIS, haga doble clic


en un paquete.
2. Haga clic dentro del panel de flujo de control abierto, en una zona vacía (sin tarea ni
contenedor), y clic derecho en el mismo lugar para ver las propiedades del paquete.
3. La categoría seguridad contiene las propiedades para administrar la seguridad de las
conexiones: PackagePassword y ProtectionLevel. Abra la lista desplegable de
ProtectionLevel para mostrar los posibles valores.

SSIS proporciona varios niveles de encriptación. ¿Basta con encriptar todo (All) el
paquete? Algunos de los metadatos que se guardan, como por ejemplo el esquema de la
base de datos, constituyen en sí mismos un problema de seguridad. ¿Basta con encriptar
solamente la información sensible (Sensitive) como el nombre y la contraseña de la
conexión? ¿Qué clave podemos usar para realizar el cifrado? ¿Una clave propia del usuario
(UserKey), calculada a partir de su identificador Windows, o una contraseña (Password)
que puede compartir un equipo?

Por defecto los datos sensibles se encriptan usando la clave de usuario


(EncryptSensitiveWithUserKey). Esto puede suponer un problema evidente siempre y
cuando abandone el equipo el usuario en cuestión.

ShareVideos
La configuración ideal consiste en no salvar los datos sensibles con el paquete (DontSaveSensitive)
e inicializar las cadenas de conexión ConnectionString por variables de tipo String. De hecho esta
información tendrá que ser parametrizable si queremos desplegar en producción usando una
configuración, un archivo XML por ejemplo. Esta configuración es la que se tiene que securizar, por
ejemplo con NTFS, para proteger el sistema.

1. En la lista ProtectionLevel, seleccione DontSaveSensitive.

1. Haga clic en el flujo de control sobre una zona vacía (sin tarea ni contenedor) para
seleccionar el nivel paquete.
2. En el menú SSIS seleccione Variables.
3. En el panel Variables haga clic en el botón Agregar variable

situado arriba a la izquierda.

4. Introduzca el nombre MiCadenaDeConexion, de tipo String.

1. Haga clic sobre una conexión del administrador de conexiones y muestre sus
propiedades (menú contextual - Propiedades).
2. Seleccione el contenido de ConnectionString.

1. Cópielo y péguelo en el valor de su variable.


2. En las propiedades de la conexión, el botón

en Expressions le permite abrir el editor de expresiones de la propiedad. Haga clic en él.

3. Incluya para la propiedad ConnectionString la expresión


@[User::MiCadenaDeConexion] (la palabra clave User puede variar según la
versión de SSIS, se trata del espacio de nombres de la variable).

Flujo de control (Control Flow)

ShareVideos
El flujo de control está constituido por elementos del cuadro de herramientas, por tareas y
por contenedores, enlazados por restricciones de precedencia.

1. Restricciones de precedencia

Los contenedores pueden contener tareas u otros contenedores. Las restricciones de


precedencia están representadas por flechas que enlazan un elemento de origen,
PrecedenceExecutable, con un elemento de destino, ConstrainedExecutable.

Varias restricciones de precedencia pueden partir o llegar al mismo elemento, tarea o


contenedor. Dos elementos pueden estar ligados por una restricción a condición de que
estén alojados en el mismo contenedor.

Ejemplo de flujo de datos de control con sus opciones de restricción de precedencia

Una propiedad de la restricción de precedencia, ShowAnnotation, permite mostrar en el flujo de


control el contenido de la restricción, ConstraintOptions, o incluso su nombre o su descripción.

Un doble clic sobre una restricción permite abrir el editor de restricciones de precedencia
para configurar las opciones: operación de evaluación y la operación lógica en caso de
restricciones múltiples.

La operación de evaluación es una expresión booleana construida a partir del resultado de


la ejecución del elemento origen, del valor (Correcto, representado gráficamente por una
traza verde, Error, en rojo, y Finalizado, es decir correcto o en error, en azul) y de una
expresión booleana introducida manualmente. En la siguiente captura de pantalla la
restricción verifica el éxito del origen y el hecho de que la variable @MiCondicion sea
igual a 0.

Editor de restricciones de precedencia

En el caso de restricciones múltiples se utiliza el operador lógico para hacer que la


ejecución de un elemento dependa de varias restricciones. Su ejecución estará condicionada
por la realización de todas sus restricciones (operador AND representado por un trazo
continuo), o por la realización de al menos una de ellas (operador OR, en trazo
discontinuo).

ShareVideos
Es posible forzar el resultado de la ejecución de un elemento del flujo de control modificando su
propiedad ForceExecutionResult.

2. Cuadro de herramientas del flujo de control

EL cuadro de herramientas contiene Elementos de flujo de control y Tareas de plan de


mantenimiento. Estas últimas están destinadas a los DBA (Administradores de Bases de
Datos) SQL Server, aunque pueden tener su uso en BI, como por ejemplo realizar la copia
de seguridad de la base de datos antes de su carga incremental o la reconstrucción de un
índice a partir de ella.

Puede modificar el orden de las herramientas con ayuda del ratón, y situar arriba del todo sus
herramientas preferidas.

Para construir un paquete ETL use los elementos del flujo de control.

a. Tareas de flujo de control

La tarea más importante es la tarea de flujo de datos, que permite la creación de flujos de
datos. Su uso se explica en la siguiente sección.

Entre las demás tareas cabe destacar las siguientes:

 Tarea Ejecutar SQL: para ejecutar un procedimiento almacenado o un código SQL


sobre un servidor de bases de datos especificado por una conexión. El lenguaje SQL
que deba usar dependerá de la base de datos y del tipo de conexión (se aconseja
utilizar ADO.NET para el paso de parámetros). A menudo se usa para ejecutar un
procedimiento almacenado, cargar un valor o insertar en una variable un conjunto
de registros devuelto por una consulta sobre el servidor, o incluso ejecutar
instrucciones DDL (Data Definition Language).

Para más detalles véase la ayuda en línea: http://msdn.microsoft.com/es-


es/library/ms141003.aspx

Crear en una variable su propio código SQL le permite evitar algunas de las dificultades habituales
con el uso de parámetros.

En el modo de procedimiento almacenado IsQueryStoredProcedure, suprima los espacios inútiles


en la propiedad SQLStatement, pues a menudo hacen fracasar la tarea.

ShareVideos
 Tarea Ejecutar paquete: indispensable para construir varios paquetes más pequeños
en vez de un paquete enorme. Esta tarea permite a un paquete padre llamar a otros
paquetes hijos. El paquete hijo se parametriza en la conexión. El paso de parámetros
del padre al hijo se hace mediante la configuración del paquete hijo.

Para más detalles, véase la ayuda en línea: http://msdn.microsoft.com/es-


es/library/ms137609.aspx

Si usa paquetes hijos la ConnectionString de la conexión hacia el paquete hijo contiene la ruta
completa del archivo. A menudo, este valor se verá modificado en los entornos de pruebas y de
producción. Por ello, haga configurable esta conexión.

1. Haga clic en el flujo de control sobre un lugar vacío (sin tarea ni contenedor) para
situarse a nivel de paquete.
2. En el menú SSIS seleccione la opción Variables.
3. En el panel Variables haga clic sobre el botón Agregar variable situado arriba a la
izquierda.
4. Introduzca el nombre de variable MiRuta, de tipo String.
5. Haga clic de nuevo en el botón Agregar variable situado arriba a la izquierda.
6. Introduzca el nombre de variable MiPaqueteHijo, de tipo String.
7. Haga clic en la conexión hacia el paquete hijo del administrador de conexiones y
muestre sus propiedades (menú contextual - propiedades).
8. Seleccione el contenido de ConnectionString.
9. Cópielo y péguelo en el valor de la variable MiRuta. Borre el valor del nombre del
archivo y guarde únicamente la ruta terminada por \.
10. Modifique a True la propiedad EvaluateAsExpression de la variable MiPaqueteHijo.
11. En la propiedad Expression de la variable MiPaqueteHijo, introduzca la fórmula:
@[User::MiRuta] + "hijo.dtsx" siendo hijo.dtsx el nombre del paquete hijo (la
palabra clave User puede variar en función de la versión de SSIS, se trata del
espacio de nombres de la variable).
12. En las propiedades de la conexión, el botón situado a la derecha del todo en
Expressions abre el editor de expresiones de la propiedad. Haga clic en él.
13. Introduzca la propiedad ConnectionString, y la expresión @[User::MiPaqueteHijo].

 Tarea FTP: como su propio nombre indica, esta tarea tiene como finalidad realizar
intercambios de archivos con un servidor FTP. Usa un administrador de conexiones
FTP para almacenar la información de las conexiones. La sintaxis de la
ConnectionString es Servidor:Puerto.NombreUsuario.Contraseña (por ejemplo:
ftppersonal.free.fr:21.Nicolas.p4ssw0rd123)

Para más detalles, véase la ayuda en línea: http://msdn.microsoft.com/es-


es/library/ms137656.aspx

ShareVideos
Es extrañamente complicado implementar la tarea FTP debido a limitaciones en la
gestión de la contraseña. Para un desarrollo robusto que deba ejecutarse en varios
entornos, la primera solución consiste en usar un script, en lugar de una tarea FTP,
con las funciones FTP del framework de .NET (por ejemplo: UploadFile). Una
segunda solución consiste en utilizar en un script el componente FTP de SSIS.

Ejemplo:

Dim cm As ConnectionManager = Dts.Connections.Add("FTP")

Una tercera solución consiste en usar un script para definir dinámicamente la


contraseña en la conexión SSIS FTP.

Ejemplo:

Dim cm As ConnectionManager cm = Dts.Connections("Miftp")


con.Properties("ServerPassword").SetValue...

Por último, una cuarta solución consiste en crear una configuración ligada a las
propiedades de la conexión FTP que no use variables.

 Tarea Script: todo lo que no pueda hacer con las demás tareas puede implementarse
en un script. Los scripts se escriben en Visual Basic o en C# y acceden al conjunto
de funcionalidades disponibles propias de estos lenguajes: transferencias FTP,
añadir una partición a un cubo SSAS, etc. Es posible informar variables a un script.
En el editor de la tarea script, defina las variables de sólo lectura en
ReadOnlyVariables y las variables de escritura en ReadWriteVariables. Edite el
script mediante el botón Editar script. Los comentarios que aparecen al inicio del
script indican la sintaxis para interactuar con SSIS: uso de variables, inicio de un
evento...

La tarea script no debe confundirse con su equivalente en el flujo de datos: el componente script.

Si su script se usa varias veces, es posible crear una tarea en el cuadro de herramientas a partir de
un desarrollo propio (véase: http://msdn.microsoft.com/es-es/library/ms135965.aspx y los
ejemplos: http://ssisctc.codeplex.com/)

 Tarea Sistema de archivos: se usa para realizar operaciones sobre los archivos:
copiar, renombrar... Usa el administrador de conexiones de archivos.

ShareVideos
Esta tarea se usa a menudo con el contenedor de bucle Foreach para iterar sobre los archivos.
Incluso si hay sólo uno, este contenedor permite verificar su existencia.

 Tarea Enviar correo: permite enviar un correo electrónico usando el protocolo


SMTP. Este correo puede incluir adjuntos. La tarea usa un administrador de
conexiones SMTP.

Para conocer las demás tareas, véase la ayuda en línea: http://msdn.microsoft.com/es-


es/library/ms139892.aspx

b. Contenedores del flujo de control

El contenedor es un tipo de elemento del flujo de control en el que es posible integrar otros
elementos, tareas o contenedores.

Para agrupar las tareas gráficamente, por ejemplo para desplazarlas todas juntas, el editor de flujo
de control proporciona la opción agrupar disponible en el menú contextual.

Los contenedores ofrecen más que una simple agrupación, permiten gestionar las
transacciones, interrumpir el proceso tras un error de ejecución en un conjunto de tareas
lanzando una tarea de gestión de errores como puede ser el envío de un correo electrónico,
implementar bucles sobre los archivos que queremos cargar en la tabla...

 Contenedor de secuencias: se usa para agrupar elementos cuya ejecución forme una
unidad. Permite realizar la gestión de transacciones.

Para más detalles, véase la ayuda en línea: http://msdn.microsoft.com/es-


es/library/ms139855.aspx

El propio flujo de control del paquete se comporta como un contenedor de secuencias.

 Contenedor de bucles Foreach: permite realizar bucles sobre los elementos de una
colección. Los principales tipos de colecciones son:
o Enumerador de archivos para Foreach: colección de lista de archivos para
una carpeta especificada y una máscara de archivo (con la misma sintaxis
que la usada por el comando dir del sistema operativo).
o Enumerador de elementos para Foreach: colección introducida en tiempo de
desarrollo en el editor. Se usa por ejemplo si debe lanzar un procesamiento
particular sobre ciertas categorías de productos, donde estos últimos forman
la colección.
o Enumerador ADO para Foreach: colección formada por registros de un
dataset ADO o ADO.NET. El caso clásico consiste en cargar el resultado de

ShareVideos
una consulta en una variable de tipo Object, e iterar sobre las líneas del
resultado. Este componente permite mapear una variable por cada columna
del dataset.
o Enumerador Node list para Foreach: colección formada por un conjunto de
nodos resultado de una consulta XPATH sobre un documento XML.
 Contenedor de bucles For: permite ejecutar un bucle donde la salida está
condicionada por una expresión lógica. Generalmente su implementación pasa por
el uso de una variable inicializada al principio del bucle (InitExpression) que
evoluciona en cada iteración (AssignExpression) hasta cumplir cierta condición
(EvalExpression) que provoca la salida del bucle. Para InitExpression y
AssignExpression, hay que usar el operador = para actualizar la variable. (Ejemplo
de AssignExpression: @varLoop = @varLoop + 1).

Ejemplo:

Uso de ADO ForEach para iterar sobre el resultado de una consulta SQL Server:

1. Cree un nuevo paquete de SSIS.

1. Seleccione Nueva conexión OLE DB... en el menú contextual de los


administradores de conexión.
2. Haga clic en el botón Nueva...
3. En el Nombre del servidor introduzca el nombre de su servidor SQL Server donde
haya instalado las bases de datos AdventureWorks.
4. Escoja AdventureWorks como base de datos.
5. Haga clic dos veces sobre OK, acaba de crear su conexión.
6. Haga clic en el flujo de control sobre una zona vacía (sin tarea ni contenedor) para
situarse a nivel de paquete.
7. En el menú SSIS seleccione Variables.
8. En el panel Variables añada las siguientes variables: NombreTabla de tipo String,
IdObjeto de tipo Int32 y MiLista de tipo Object.

1. En el Cuadro de herramientas haga doble clic en Tarea Ejecutar SQL y a


continuación en Contenedor de bucles Foreach: ambos elementos se han añadido al
flujo de control.

1. Seleccione con un clic la tarea SQL y tome la flecha verde con el ratón para
deslizarla hasta el contenedor de bucles. Acaba de crear una restricción de
precedencia.

ShareVideos
1. Abra el Editor de la tarea Ejecutar SQL. Seleccione la conexión OLE DB que ha
creado antes e introduzca la consulta el SQL Statement siguiente: SELECT name,
object_id FROM sys.tables.

1. Todavía en el Editor de la tarea Ejecutar SQL cambie el valor de la propiedad


ResultSet por Conjunto de resultados completo, seleccione a continuación la página
Conjunto de resultados. Agregue una línea. Nombre del resultado debe tener el
valor 0 (cero) y Nombre de variable debe contener la variable MiLista
(User::MiLista).

1. Acepte haciendo clic en el botón OK.


2. Abra el editor del contenedor de bucles. En la página Colección seleccione el
Enumerador de ADO para Foreach. Como Variable de origen de objeto ADO
seleccione de nuevo la variable MiLista.

1. Abra en el mismo editor la página Asignaciones de variables, seleccione la variable


User::NombreTabla con el índice 0 y a continuación en una segunda fila
User::IdObjeto con índice 1.

1. Acepte haciendo clic en el botón OK.


2. Acaba de crear un bucle sobre el resultado de la consulta. Las variables
NombreTabla e IdObjeto tomarán valores distintos en cada iteración.

Flujo de datos (Data Flow)


El flujo de datos es el núcleo del ETL SSIS. Permite integrar los datos en un Data
Warehouse. Un doble clic sobre una tarea de flujo de datos permite abrir el editor de flujo
de datos. Se parece al del flujo de control, pero el Cuadro de herramientas ha cambiado:
contiene como es natural orígenes, destinos y transformaciones. Como puede haber varios
flujos de datos en un paquete, la aplicación le muestra una lista desplegable de Tarea del
flujo de datos que permite cambiar rápidamente de flujo.

Una tarea de flujo de datos debe contener al menos un origen. Generalmente contiene
también un destino y varias transformaciones, enlazadas por caminos de acceso al flujo de
datos que representan las líneas de datos de un componente a otro.

ShareVideos
Los caminos estándar están representados en color verde. Es posible gestionar los caminos
de errores, donde se redirigen los errores, para la mayoría de componentes. Por ejemplo, en
la lectura de un origen de datos con una columna de tipo numérico, todos los registros que
contengan caracteres alfanuméricos en esta columna pueden enviarse a un archivo de
registro de errores.

Por defecto un error deja como fracasado el conjunto de la tarea de datos. El editor del
componente permite modificar este comportamiento para tratar los errores en el flujo de
datos.

Este comportamiento por defecto está lejos de ser deseable en la mayoría de los casos de
alimentación de un DW. Su alimentación cotidiana, que importa millones de registros, no puede
teóricamente bloquearse a causa de un único error entre todos ellos.

1. Cuadro de herramientas del flujo de datos

Los componentes del cuadro de herramientas son los orígenes, los destinos y las
transformaciones.

a. Orígenes de flujo de datos

Tras haber situado un origen de datos en el flujo de datos un doble clic permite abrir su
editor. El editor se compone de tres páginas:

 Administrador de conexiones: es obligatorio indicar aquí qué conexión del


administrador de conexiones se va a utilizar, o bien crear una nueva. Según el tipo
de conexión esta página muestra información adicional, como la tabla o la consulta
para una base de datos.
 Columnas: esta página permite definir las columnas que va a usar en su flujo de
datos. Es importante optimizar el flujo evitando cargar columnas no utilizadas.
 Salida de error: el editor de la salida de error permite gestionar individualmente
cada caso de error escogiendo para cada uno de ellos una gestión del caso. SSIS
distingue los errores de conversión de los problemas de truncado.

La opción por defecto, Error de componente, deja en estado erróneo el componente


completo y por tanto la tarea del flujo de datos. Las alternativas son Omitir error, o
Redirigir fila.

Omitir error reemplaza el dato erróneo por el valor NULL en el caso de una
conversión, o simplemente trunca el dato en el caso de un truncado. Por ejemplo, si
un carácter alfabético se cuela en la recepción de valores enteros, el motor del flujo
reemplaza silenciosamente este código por un NULL.

ShareVideos
Redirigir fila permite hacer la gestión de errores por un camino distinto al del flujo
de datos, identificado en la salida del origen de datos por una flecha roja. Este flujo
recoge los problemas de conversión (Error) y de truncado.

Configuración de la salida de errores de un origen de datos

Cuando enlace la flecha roja de la salida de errores a otro componente, el programa le propone la
misma ventana modal de configuración de la salida de error, pero fuera del editor del origen de
datos. La configuración de los errores se almacena a nivel de componente y no a nivel de camino
de acceso del flujo de datos.

El menú contextual del origen de datos permite acceder a un editor avanzado. Los datos
leídos y los datos de salida del origen se definen completamente en la pestaña Propiedades
de entrada y salida. Es posible indicar si estos datos ya están ordenados.

La separación de la definición del origen de datos, en el editor avanzado o en el administrador de


conexiones, y de la gestión de errores en el editor de orígenes, comporta una complejidad en la
que la importancia de la configuración se hace clave. Será preciso definir desde el principio del
proyecto las reglas de desarrollo para la gestión de errores de conversión y de truncado.

Es posible modificar un origen o un destino sin estar conectado al mismo, por ejemplo cuando no
existe o cuando se crea como parte de ejecución del flujo ETL. Cambie a False la propiedad
ValidateExternalMetadata del componente. La validación de los metadatos se hace ahora
únicamente en tiempo de ejecución.

Los distintos tipos de orígenes de datos disponibles son:

 Origen de OLE DB: úselo para todas aquellas bases de datos que dispongan de un
cliente OLE DB. El editor le permite leer una tabla, una vista, una consulta o
incluso un procedimiento almacenado. En todos los casos, la configuración puede
introducirse en tiempo de diseño en el editor, o puede estar contenido en una
variable.
 Origen de ADO.NET: menos rico en funcionalidades que el origen de OLE DB, el
origen de ADO.NET muestra un rendimiento ligeramente superior. Úselo en casos
donde las exigencias de rendimiento sean críticas.
 Origen de archivo plano: úselo para leer un archivo de texto plano, es decir con
separadores por columnas o con una longitud de línea fija. Cuando el archivo de

ShareVideos
texto tenga una estructura más compleja, este origen puede usarse para cargar las
líneas en una estructura temporal para después explotarlas.
 Origen XML: para leer un archivo XML o una variable que contenga información
en formato XML. Se aconseja usar igualmente un archivo XSD de definición de
esquema para evitar sorpresas. Habida cuenta de la riqueza del lenguaje XML, es
posible que existan varias salidas desde este origen.

Este origen no usa ninguna conexión del administrador de conexiones.

 Origen de Excel: un origen dedicado a la lectura de una hoja de cálculo Microsoft


Excel.
 Origen de archivo sin formato: el archivo sin formato es un formato propio de SSIS.
Ofrece un rendimiento mejor dado que su estructura es muy similar a los buffers
que usa SSIS para trabajar en memoria. Este formato puede usarse para almacenar
datos temporales del mismo modo que una tabla temporal, por ejemplo, el área de
ensayo de su ETL.

Este origen no usa ni conexión del administrador de conexiones ni salida de error.

Para acceder a otros orígenes de datos:

 Vea la sección Orígenes disponibles para la descarga de la ayuda en línea (véase:


http://msdn.microsoft.com/es-es/library/ms141093(v=SQL.105).aspx).

Hay tres drivers disponibles para descargar para la versión Enterprise de SSIS:
Oracle - Attunity, SAP BI y Teradata.

 Use el componente script como origen de datos: permite escribir un script en


lenguaje Visual Basic o C# para leer o generar datos (véase
http://msdn.microsoft.com/es-es/library/ms137640(v=SQL.105).aspx)
 Cree su origen de datos en el Cuadro de herramientas gracias a un desarrollo .NET
(véase: http://msdn.microsoft.com/es-es/library/ms136078(v=SQL.105).aspx y los
ejemplos disponibles en: http://ssisctc.codeplex.com/)

b. Destinos de flujo de datos

Los destinos constituyen igualmente el final de los caminos de acceso del flujo de datos.
Igual que los orígenes, poseen un editor y un editor avanzado. Los destinos menos
utilizados sólo tienen editor avanzado.

El editor se compone de tres páginas:

 Administrador de conexiones: para indicar el destino y eventualmente la forma de


escribir en él.
 Asignaciones: esta página permite definir el enlace entre las columnas del flujo de
entrada y las de destino.

ShareVideos
 Salida de error: el editor de salida de error permite gestionar los errores devueltos
por el destino, como una violación de integridad en la base de datos relacional.

La opción por defecto, Error de componente, deja en error el componente completo


y la tarea del flujo de datos. Las alternativas son Omitir error, o Redirigir fila.

Los distintos tipos de destino disponibles son:

 Destino de OLE DB: para escribir en cualquier destino OLE DB. Para bases de
datos que no son SQL Server, este destino no permite igualar el rendimiento de la
utilidad bulk de la base de datos. En este caso, puede exportar los datos en un
archivo de texto plano y a continuación usar una carga de tipo bulk en el flujo de
control.
 Destino de SQL Server: limitado a una base de datos SQL Server instalada en la
máquina que ejecuta el paquete SSIS, escribe directamente en el destino, omitiendo
así ciertas operaciones. Puede seleccionarse cuando el rendimiento sea un factor
crítico.
 Destino de DataReader: permite escribir en memoria del ordenador. Este destino se
usa para comunicarse con aplicaciones de terceros como SSRS o una aplicación
desarrollada por su propia compañía. Por ejemplo, el paquete puede gestionar un
juego de datos en un DataReader y a continuación solicitar la creación de un
informe SSRS a partir de este DataReader. Otro ejemplo, un programa C# puede
ejecutar un paquete SSIS que carga en memoria un DataReader que el programa
leerá a continuación. (véase http://msdn.microsoft.com/es-
es/library/ms135917(v=SQL.105).aspx)
 Procesamiento de la dimensión: sirve para escribir en una dimensión SSAS sin tener
que pasar por una tabla de dimensión.
 Procesamiento de la partición: sirve para empujar los datos en un cubo SSAS sin
tener que pasar por una tabla de hechos. Úselo para reducir el tiempo de espera de
actualización del cubo, para acercarse al tiempo real.
 Destino de archivo plano: para gestionar archivos con exportaciones con el fin de
comunicarse con otros servidores, herramientas o clientes en un formato universal.
 Destino de archivo sin formato: este formato propio de SSIS se usa para alcanzar
mejores rendimientos a la hora de almacenar datos temporales necesarios para el
procesamiento del ETL (vea más arriba los orígenes de datos).
 Destino de conjunto de registros (recordset): permite crear un objeto recordset en
una variable del tipo Objeto, explotable a continuación por ejemplo en el flujo de
control para realizar un bucle sobre sus registros.

Para usar otros destinos:

 Consulte la lista completa en: http://msdn.microsoft.com/es-


es/library/ms141089(v=SQL.105).aspx
 Consulte la sección Destinos disponibles para la descarga en la misma página.
 Use el componente script como destino del flujo de datos: véase
http://msdn.microsoft.com/es-es/library/ms137640(v=SQL.105).aspx

ShareVideos
 Cree su propio destino de datos integrado en el Cuadro de herramientas a partir de
un desarrollo .NET: (véase: http://msdn.microsoft.com/es-
es/library/ms135899(v=SQL.105).aspx y los ejemplos disponibles en:
http://ssisctc.codeplex.com/)

c. Transformaciones de flujo de datos

Las transformaciones permiten modificar los datos del flujo. Tienen una o varias entradas y
una o varias salidas. Incluyen una gestión de errores fina similar a la de los orígenes de
datos.

Son síncronas o asíncronas.

Una transformación síncrona se efectúa fila a fila: se procesa una fila cada vez, y no es
necesario leer ninguna otra fila del flujo para devolver en la salida la línea procesada. De
este modo, entra una fila en la transformación y sale simultáneamente. Como toda fila de
entrada se corresponde con una fila de salida, SSIS usa el mismo buffer para la entrada y
para la salida. Ejemplo: la conversión en mayúsculas del nombre de la familia de productos.
Una transformación síncrona como la multidifusión puede tener varias salidas.

A la inversa una transformación asíncrona no puede sincronizar la entrada con la salida, y


necesita crear un nuevo buffer para la salida. Entre las transformaciones asíncronas, cabe
distinguir las parcialmente bloqueantes de las bloqueantes.

Una transformación bloqueante necesita leer todas las filas de un buffer antes de poder
crear la salida. Por ejemplo realizar una ordenación es una transformación bloqueante: es
necesario leer todas las filas para poder crear la salida.

Una transformación parcialmente bloqueante, o semibloqueante, no necesita haber leído


todas las filas de la entrada para generar la salida, pero por lo general necesita leer varias
filas para producir una. Por ejemplo, la transformación Fusionar fusiona dos entradas
ordenadas (ejemplo: A,G,K,P y B,U,Y) para devolver una salida única (A,B,G,K,P,U,Y).
En este caso, el componente necesita leer alternativamente una o varias filas de cada
entrada antes de crear una o varias filas de salida.

En el editor avanzado del componente, la pestaña Propiedades de entrada y salida permite


inspeccionar para cada columna el valor de su LineageID: un valor entero que identifica la primera
vez que la columna aparece en el flujo, y que es igual al ID de la columna en su primera aparición.
Cuando este valor sea igual en la entrada y en la salida, para una misma columna, se trata de un
componente síncrono.

Al reutilizar el mismo buffer las transformaciones síncronas son las que presentan mejor
rendimiento y las menos exigentes en términos de consumo de memoria.

ShareVideos
A la inversa, el uso de transformaciones bloqueantes debe realizarse con el mayor cuidado
y probarse bien ajustándose a las condiciones próximas a las condiciones de producción
especialmente para volúmenes de datos grandes.

En este sentido, sería lógico exportar las operaciones asíncronas sobre el motor de base de datos
donde el rendimiento a este respecto es mucho mejor.

Las transformaciones síncronas, no bloqueantes, propuestas en el Cuadro de herramientas


incluyen:

 Transformación de Columna derivada (Derived column): permite modificar o crear


una columna con la ayuda de una fórmula construida a partir de otras columnas y
variables.
 Transformación de Copiar columna (Copy column): crea el doble de una o varias
columnas. Esta operación puede llevarse a cabo igualmente por medio de una
columna derivada.
 Transformación de Conversión de datos (Data Conversion): convierte una o varias
columnas. Esta operación puede llevarse a cabo igualmente por medio de una
columna derivada.
 Transformación de Mapa de caracteres (Character Map): útil para convertir una
columna de tipo cadena en mayúsculas, minúsculas, cadenas internacionales. Esta
operación puede llevarse a cabo igualmente por medio de una columna derivada.
 Transformación de Búsqueda (Lookup): realiza una unión para buscar una o varias
columnas en una tabla de búsqueda. En el marco de la alimentación de un DW, la
búsqueda se usa a menudo para buscar las claves de sustitución para las
dimensiones.

La salida principal de la búsqueda está constituida por el flujo de entrada al que se


asocia una o varias columnas de la tabla de búsqueda. Cuando no existe ninguna
correspondencia entre la entrada y la tabla de búsqueda, es posible marcar la
transformación como errónea, con la opción Error de componente, devolver un
valor NULL en las columnas devueltas, con la opción Omitir error, Redirigir filas
hacia la salida sin correspondencia, lo que permite tratar estos registros de forma
adecuada, o por último Redirigir filas hacia la salida de error, para agruparlas con
las eventuales filas erróneas.

La nueva opción Redirigir filas hacia la salida sin correspondencia permite gestionar
adecuadamente la búsqueda.

Por defecto, la transformación carga todas las filas de la tabla de búsqueda en una caché en
memoria. Existe una opción en el administrador de conexiones de caché que permite
unificar la misma caché para varias búsquedas.

ShareVideos
Muy a menudo la tabla de búsqueda contiene muchas columnas inútiles para su búsqueda. Para
minimizar el uso de memoria necesaria, estas columnas no hay que cargarlas. Para ello use una
vista o una consulta.

La transformación gestiona completamente el caso de las filas sin correspondencia en la


búsqueda, pero no gestiona el caso de que existan filas con varias correspondencias. En este
último caso se devolverá la primera fila encontrada en la tabla de búsqueda.

Solamente en el modo caché completa la transformación genera una advertencia en tiempo de


ejecución.

 Transformación de Dimensión de variación lenta (SCD - Slowly Changing


Dimension): esta transformación está destinada a gestionar el caso de dimensiones
de variación lenta que comprendan la actualización de columnas de tipo 1, la
creación de registros para columnas de tipo 2 y la gestión de columnas constantes.
Tiene la particularidad de iniciar un asistente que crea las transformaciones y los
destinos necesarios. Su uso no es sencillo, especialmente para realizar alguna
modificación, pero presenta muchas ventajas. Véase la sección Alimentación de una
dimensión.
 Transformación de Recuento de filas (Row count): efectúa un recuento del número
de filas y lo almacena en una variable.
 Transformación de Comando de OLE DB (OLE DB command): permite lanzar un
comando SQL por cada línea del flujo entrante. La usa el SCD para actualizar
(UPDATE) las columnas de tipo 1. No existen otras posibilidades de hacer un
UPDATE sobre la base de datos.

El comando de OLE DB fila a fila no presenta muy buen rendimiento. SQL jamás ha destacado por
su rendimiento en operaciones unitarias. Para actualizar volúmenes de datos importantes, que
requieran de un rendimiento óptimo, use una tabla temporal y un comando SQL desde el flujo de
control.

 Transformación de Multidifusión (Multicast): permite multiplicar la entrada en


tantas salidas como necesite el flujo. Cada salida es idéntica a la entrada.
 Transformación de División condicional (Conditional Split): crea varias salidas a
partir de una entrada. El editor de la transformación le pide introducir una condición
lógica por cada salida. Cada fila verifica una a una las condiciones en orden y se
envía hacia la primera salida en que se cumple la condición. Si no cumple ninguna
condición, se envía a una salida por defecto en la que no se ha definido ninguna
condición.

ShareVideos
 Transformación Exportar columna (Export column): se utiliza, por ejemplo, para
guardar en archivos las imágenes contenidas en el flujo de entrada.
 Transformación Importar columna (Import column): al revés que con la
exportación, la importación permite añadir al flujo información almacenada en
archivos.
 Transformación de caché (cache): para gestionar las cachés. La caché es una
estructura en memoria o en disco destinada a mejorar el rendimiento de la
Transformación de búsqueda. Esta Transformación permite crear y escribir en una
caché.
 Transformación de Auditar (audit): añade al flujo columnas de información tales
como la hora de ejecución, el nombre del servidor, el identificador de ejecución...
 Transformación de Muestreo de porcentaje (Percent sampling): sirve para guardar
solamente una muestra aleatoria de filas, normalmente representativa de la entrada.
Esta Transformación no la usa directamente el flujo ETL, pero puede usarse en
tiempo de desarrollo para crear juegos de datos menos voluminosos.

Las transformaciones semibloqueantes incluyen:

 Transformación Unión de todo (Union All): de modo similar al comando SQL


UNION ALL, construye, a partir de varios flujos de entrada, un flujo de salida
donde el número de filas es la suma de las filas de todos los flujos de entrada.
 Transformación Mezclar (merge): realiza la misma tarea que la unión de todo pero
de forma ordenada. Las entradas deben estar ordenadas. La salida también está
ordenada, la Transformación selecciona sucesivamente las filas de la entrada
adecuada para conservar el orden de salida.

 Transformación de Combinación de mezcla (merge join): se usa para realizar la


unión de tipo INNER, LEFT o FULL entre dos entradas ordenadas.

Limite el uso de la unión al caso en que los datos provengan de orígenes de datos distintos. Si los
datos vienen de la misma base de datos, utilice mejor una consulta ejecutada por el motor de base
de datos.

 Transformación de Dinamización (pivot): reduce el número de filas transformando


filas en columnas.
 Transformación de Anulación de dinamización (unpivot): al revés que la
transformación de dinamización, esa Transformación aumenta el número de filas
transformando columnas en filas.

Y también: Transformación de Búsqueda de términos (Term lookup), Transformación de


Consulta de minería de datos (data mining query).

Las transformaciones bloqueantes son:

ShareVideos
 Transformación de Ordenar (sort): se utiliza para ordenar las filas del flujo. Permite
de forma opcional suprimir los valores duplicados.
 Transformación de Agregado (aggregate): sirve para crear agregados de modo
similar a las cláusulas GROUP BY, COUNT, SUM... La Transformación puede
generar varias salidas con varios agregados.
 Transformación Muestreo de fila (Row sampling): es igual que la Transformación
de Muestreo de porcentaje pero permite especificar el número exacto de filas de
salida.

Y también: Transformación de Agrupación aproximada (Fuzzy grouping), Transformación


de Búsqueda aproximada (Fuzzy lookup), Transformación Extracción de términos (Term
extraction).

Si estas transformaciones no fueran suficientes:

 Componente Script (Script): permite crear un script de transformación del flujo.


Puede también servir como origen o destino. (véase: http://msdn.microsoft.com/es-
es/library/ms137640(v=SQL.105).aspx).
 Cree su propia transformación integrada en el Cuadro de herramientas a partir de un
desarrollo .NET (para transformaciones síncronas véase:
http://msdn.microsoft.com/es-es/library/ms136027(v=SQL.105).aspx, para
transformaciones asíncronas véase: http://msdn.microsoft.com/es-
es/library/ms135931(v=SQL.105).aspx y los ejemplos disponibles en:
http://ssisctc.codeplex.com/).

2. Alimentación de una dimensión

Para alimentar una dimensión, hay que extraer los datos del origen, limpiarlos, procesarlos,
buscar las claves de sustitución a partir de las claves del origen, y a continuación alimentar
la tabla de dimensiones: insertar los nuevos registros, actualizar los existentes y
eventualmente gestionar los atributos de tipo 2.

El DW AdventureWorksW2008R2 contiene una dimensión de empleados DimEmployee.


El objetivo es alimentar nuestra dimensión DimEmployee sobre nuestro esquema [ei].

1. Conéctese a la base de datos y cree el esquema y la tabla.

USE [AdventureWorksDW2008R2]
GO
CREATE SCHEMA [ei] AUTHORIZATION [dbo]
GO
/****** Object: Table [ei].[DimEmployee] Script Date:
05/30/2010 12:13:18 ******/
CREATE TABLE [ei].[DimEmployee](
[EmployeeKey] [int] IDENTITY(1,1) NOT NULL,
[EmployeeNationalIDAlternateKey] [nvarchar](15) NULL,
[SalesTerritoryKey] [int] NULL,
[FirstName] [nvarchar](50) NOT NULL,

ShareVideos
[LastName] [nvarchar](50) NOT NULL,
[BirthDate] [date] NULL,
[CurrentFlag] [bit] NOT NULL,
[StartDate] [date] NULL,
[EndDate] [date] NULL,
CONSTRAINT [PK_MyDimEmployee_EmployeeKey] PRIMARY KEY CLUSTERED
( [EmployeeKey] ASC)) ON [PRIMARY]

GO

El origen es la base de datos OLTP AdventureWorks.

Las reglas de alimentación pedidas son las siguientes:

Columna Columna
Tabla origen Descripción/Transformación
Dimensión origen
Clave de sustitución generada
EmployeeKey
por el motor de base de datos.
Cadena de caracteres que
contiene el DNI. Puede contener
espacios a la derecha o a la
Employee
izquierda que es preciso limpiar.
[HumanResources]. National
National
Esta columna es la clave
[Employee] IDNumber
funcional de la dimensión de
IDAlternateKey
empleados. Se usa para buscar el
registro en el proceso de
alimentación.
El campo TerritoryID es la clave
funcional usada para buscar la
clave de sustitución de la
dimensión DimSalesTerritory.

En el sistema de origen el enlace


entre SalesPerson (vendedor) y
Sales
Employee (empleado) se hace
[Sales].
por medio de la clave común.
Territory TerritoryID
[SalesPerson]
La mayoría de los empleados no
Key
son vendedores. No están
ligados a un territorio. En la
dimensión DimSalesTerritory,
se ha creado un miembro
especial de la dimensión con la
clave funciona 0 (cero) para
agrupar los empleados sin

ShareVideos
Columna Columna
Tabla origen Descripción/Transformación
Dimensión origen
territorio.

Los usuarios finales quieren


seguir la evolución de esta
dimensión (tipo 2).
Ninguna transformación.
[Person].
FirstName FirstName Actualizar si existe una
[Contact] modificación en el origen (tipo
1).
En el DW, el apellido debe estar
en mayúsculas.
[Person].
LastName LastName
Actualizar si existe una
[Contact]
modificación en el origen (tipo
1).
En el DW, la fecha se almacena
[HumanResources]. en el nuevo formato Date de
BirthDate BirthDate SQL Server 2008.
[Employee]
Prohibido modificarla.
Ninguna transformación.
[HumanResources]. Current
CurrentFlag Actualizar si existe una
[Employee] Flag modificación en el origen (tipo
1).
Campo de carácter técnico
StartDate usado por la dimensión de
variación lenta.
Campo de carácter técnico
usado por la dimensión de
variación lenta.
EndDate
Cuando este campo valga
NULL, se trata del registro en
curso para el empleado.

La extracción de datos del origen, la base de datos AdventureWorks, se realiza con la


consulta siguiente:

SELECT [E].[NationalIDNumber]
,[E].[BirthDate]
,[E].[CurrentFlag]

ShareVideos
,[C].[FirstName]
,[C].[LastName]
,COALESCE([SP].[TerritoryID],0) AS
[SalesTerritoryAlternateKey]
FROM [HumanResources].[Employee] [E]
INNER JOIN [Person].[Contact] [C] ON ([E].[ContactID] = [C].
[ContactID])
LEFT OUTER JOIN [Sales].[SalesPerson] [SP] ON ([SP].
[SalesPersonID] = [E].[EmployeeID])

Para extraer datos del origen de datos, si todas las tablas pertenecen a la misma base de datos, no
diseñe un flujo de datos en SSIS con transformaciones de unión, use en su lugar un origen con una
consulta que use de forma óptima los índices del motor SQL.

Observe que la dimensión DimSalesTerritory contiene un miembro especial para gestionar el caso
de los empelados que no están ligados a un territorio, la consulta efectúa una unión de tipo LEFT
JOIN y a continuación un COALESCE, reemplazando el NULL por la clave funcional de este miembro
especial.

Creación de las conexiones

1. Cree un nuevo paquete SSIS.


2. Seleccione Nueva conexión OLE DB... en el menú contextual del administrador de
conexiones.
3. Haga clic en el botón Nueva... En el Nombre del servidor, introduzca el nombre de
su servidor SQL Server donde están instaladas las bases de datos AdventureWorks.
4. Seleccione AdventureWorks como base de datos.
5. Haga clic dos veces en OK, acaba de crear su conexión.
6. Haga lo mismo con la base de datos AdventureWorksDW2008R2.

Creación de variables

1. Haga clic en el flujo de control sobre un área vacía (sin tarea ni contenedor) para
seccionar el nuevo paquete.
2. En el menú SSIS, seleccione Variables.
3. En el panel de Variables, agregue las variables siguientes: nLeidos, nErrores,
nInsertados y nMax de tipo Int32.

Creación del flujo de datos

1. En el Cuadro de herramientas, haga doble clic en la Tarea Flujo de datos para crear
tal flujo.
2. Haga clic en la pestaña del flujo de datos para abrir el nuevo flujo de datos.

Creación de los componentes de gestión de errores

ShareVideos
1. Agregue una transformación Unión de todo. Renómbrela por Unir error.
2. Agregue una transformación Recuento de filas. Renómbrela por Número de errores.
Abra su editor y asigne la variable nErrores a la propiedad VariableName.
3. Enlace Unir error con Número de errores.

Creación del origen

1. Agregue un origen OLE DB apuntando a la conexión AdventureWorks que use la


consulta definida anteriormente.

Origen de datos para alimentar la dimensión

1. Modifique la Salida de error para reencaminar las filas en todos los casos.
2. Valide la creación del origen.
3. Enlace la flecha roja de la salida de este origen a Unir Error.

Auditoría y número de filas leídas

1. Bajo el origen de datos, sitúe una transformación de auditoría, para incorporar al


flujo el GUID de instancia de ejecución.
2. Enlace el origen con la auditoría.
3. Agregue una transformación Recuento de filas. Renómbrela por Número leídos.
Abra su editor y asigne la variable nLeídos a la propiedad VariableName.
4. Enlace la auditoría a Número leídos.

Inicio del flujo de alimentación de la dimensión

Preparación de los datos

1. Bajo Número leídos, agregue una transformación de Columna derivada.


2. Enlace Número leídos con la nueva transformación.
3. Abra el editor de la transformación Columna derivada.
4. Agregue una nueva columna newBirthDate que convierta la columna BirthDate al
formato DBDATE: (DT_DBDATE)BirthDate.
5. Reemplace la columna NationalIDNumber suprimiendo los espacios a la derecha y
a la izquierda.
6. Reemplace la columna LastName, pasando su contenido a letras mayúsculas.

Editor de transformación de columna derivada

ShareVideos
1. Enlace la fecha roja de la columna derivada con Unir error seleccionando redirigir
todos los errores.

Búsqueda de la clave técnica de SalesTerritory

1. Agregue bajo la columna derivada una transformación de búsqueda.


2. Enlace la columna derivada con la búsqueda.
3. La búsqueda usa una caché completa y una conexión OLE DB.

Conserve el valor por defecto Error de componente: en efecto el caso de filas sin
correspondencia ya se trata en la consulta SQL de extracción.

4. En la página Conexión, seleccione la conexión existente del DW.

Use los resultados de una consulta SQL:

SELECT SalesTerritoryKey, SalesTerritoryAlternateKey FROM


dbo.DimSalesTerritory

Presentación
La implementación del conjunto de tecnologías SQL Server en una solución de BI lleva a
menudo a una arquitectura compleja y costosa de desarrollar y mantener. Este capítulo tiene
como objetivo destacar ciertas capacidades del motor relacional SQL Server que pueden
considerarse frente a otras tecnologías a la hora de diseñar la arquitectura BI.

En lo que respecta al Reporting, cabe destacar que Transact SQL está en posición de
realizar consultas muy próximas a las de MDX.

Alimentación ETL
En competencia con ETL SSIS, Transact SQL es suficiente para la alimentación de las
dimensiones y los hechos. Además, el motor SQL permite detectar modificaciones de la
base de datos origen SQL Server sin provocar ninguna modificación en su estructura.

1. Carga de dimensiones y de hechos


a. Contexto

La alimentación del DW a partir de los orígenes de datos se divide generalmente en dos


etapas. La primera consiste en alimentar una base de datos intermedia y temporal,
comúnmente llamada Staging Area. La segunda se usa para alimentar el DW a partir de esta
la Staging Area.

ShareVideos
La primera etapa efectúa controles sobre los tipos de datos y controles de campos
obligatorios, de conversión y de limpieza de datos para garantizar que no habrá problemas
en la siguiente etapa.

La segunda etapa realiza la búsqueda de las claves técnicas en el DW, alimenta las
dimensiones y, a continuación, las tablas de hechos. En el capítulo anterior hemos abordado
el diseño y la construcción de esta etapa con SSIS (véase el capítulo Alimentar el Data
Mart, secciones Flujo de datos (Data Flow) - Alimentación de una dimensión y
Alimentación de un grupo de medidas). A continuación, abordamos las mismas etapas pero
únicamente usando tecnologías SQL partiendo de la hipótesis de que las bases de datos
Staging Area y DW están en el mismo servidor.

b. Dimensión

Generalmente la tabla de dimensión está caracterizada por los campos siguientes:

 Una clave técnica o clave de sustitución, identificador único de tipo secuencia.


 Una clave funcional, identificador único que permite establecer el enlace con el
sistema de origen.
 Atributos de tipo 1, es decir que se actualizan tras la modificación del sistema
origen.
 Atributos de tipo 2: una modificación en el origen provoca la creación de un nuevo
registro en la dimensión para seguir este cambio en los hechos.
 Columnas técnicas de gestión de atributos de tipo 2. En efecto, la creación de un
nuevo registro provoca que se desactive el antiguo. Generalmente se usa un valor
booleano y/o un intervalo de tiempo para seguir al registro activo.

El proceso de alimentación de la dimensión a partir de la Staging Area puede organizarse


de la siguiente forma:

 Extracción de los datos del origen.


 Búsqueda de las claves técnicas.
 Inserción de los registros (nuevos y de tipo 2) y desactivación de los antiguos
registros de tipo 2.
 Detección de las modificaciones de tipo 1: actualización de los registros activos
modificados.

¿Por qué gestionar los atributos de tipo 2 antes que los de tipo 1? En ciertos casos la modificación
de tipo 1 sólo debe implicar al registro activo, por lo que la desactivación del registro antiguo debe
realizarse con antelación.

En lo sucesivo consideraremos la base de datos AdventureWorks como la Staging Area del


procesamiento para la alimentación del DW AdventureWorksDW2008R2. Nuestro objetivo

ShareVideos
es de nuevo alimentar la dimensión de empleados [ei].[DimEmployee] (véase el capítulo
Alimentar el Data Mart).

Lista de campos de tipo 1: FirstName, LastName, BirthDate

Lista de campos de tipo 2: SalesTerritoryKey

Extracción de los datos de origen

Como hemos visto en el capítulo anterior, la consulta de extracción de los datos del sistema
origen es la siguiente:

SELECT [E].[NationalIDNumber]
,[E].[BirthDate]
,[E].[CurrentFlag]
,[C].[FirstName]
,[C].[LastName]
,COALESCE([SP].[TerritoryID],0) AS
[SalesTerritoryAlternateKey]
FROM [AdventureWorks].[HumanResources].[Employee] [E]
INNER JOIN [AdventureWorks].[Person].[Contact] [C] ON ([E].
[ContactID] = [C].[ContactID])
LEFT OUTER JOIN [AdventureWorks].[Sales].[SalesPerson] [SP] ON
([SP].[SalesPersonID] = [E].[EmployeeID])
Búsqueda de las claves técnicas

La búsqueda de las claves técnicas consiste en leer otras dimensiones del DW para sustituir
las claves del sistema de origen por las claves del DW. Esta etapa existe únicamente en el
caso de un esquema en copo de nieve. Aquí, si los empleados poseen un territorio
comercial, este territorio es objeto de una tabla dedicada de la que es preciso recuperar la
clave primaria.

Podemos construir otra consulta a partir de la consulta anterior para hacer el enlace con la
tabla de territorios comerciales. La unión es una unión externa de forma que no se pierda el
empleado en esta operación. La posibilidad de que no se encuentre ningún territorio debería
gestionarse, bien aquí, o bien más adelante en la cadena decisional, por ejemplo en el cubo.

La instrucción correspondiente es la siguiente, donde se ha marcado en negrita el código


SQL que se ha agregado respecto a la anterior:

SELECT [S].*,[DimTer].[SalesTerritoryKey]
INTO #OrigenConClavesTecnicas
FROM
(SELECT [E].[NationalIDNumber]
,[E].[BirthDate]
,[E].[CurrentFlag]
,[C].[FirstName]
,[C].[LastName]
,COALESCE([SP].[TerritoryID],0) AS
[SalesTerritoryAlternateKey]

ShareVideos
FROM [AdventureWorks].[HumanResources].[Employee] [E]
INNER JOIN [AdventureWorks].[Person].[Contact] [C] ON ([E].
[ContactID] = [C].[ContactID])
LEFT OUTER JOIN [AdventureWorks].[Sales].[SalesPerson] [SP]
ON ([SP].[SalesPersonID] = [E].[EmployeeID])
) AS [S]
LEFT OUTER JOIN [AdventureWorksDW2008R2].[dbo].
[DimSalesTerritory] AS [DimTer] ON ([S].
[SalesTerritoryAlternateKey] = [DimTer].
[SalesTerritoryAlternateKey])

Técnicamente es posible que la clave SalesTerritoryKey devuelta tome el valor NULL.


Aunque este caso se ha tratado anteriormente (véase el capítulo Alimentar el Data Mart)
mediante la instrucción COALESCE en la consulta al origen.

Los datos se almacenan en una tabla temporal, #OrigenConClavesTecnicas, puesto que van a ser
utilizados en las dos etapas siguientes. Esto nos permite evitar introducir y ejecutar dos veces el
mismo código SQL.

Inserciones y Tipo 2

La presencia de un atributo de tipo 2 en la dimensión da lugar a varias operaciones que


obedecen las siguientes reglas:

 Cuando se detecta un nuevo registro en el origen de datos, se crea en la dimensión.


 Cuando se detecta un registro existente con una modificación en uno de los
atributos de tipo 2:
o Se desactiva el registro activo de la dimensión.
o Se crea un nuevo registro activo.

Esto puede transcribirse en el algoritmo siguiente:

 Búsqueda del registro activo de la dimensión correspondiente al registro del origen:


o Si no se encuentra se genera la creación de un nuevo registro activo.
o En caso contrario, y si es una modificación de Tipo 2, se desactiva el
registro activo, y a continuación se genera la creación de un nuevo registro
activo.

Transact SQL contiene, tras la versión SQL Server 2008, instrucciones del tipo
MERGE. MERGE permite fusionar los datos de un origen y un destino provocando,
en función de cierta condición lógica de búsqueda, una operación A o una operación
B. Desgraciadamente, para escribir nuestro algoritmo, tenemos que lanzar dos
operaciones en el caso en que sí se encuentre el registro...

MERGE por tanto no basta, aunque permite realizar ya buena parte del procesamiento, a
saber:

ShareVideos
 Búsqueda del registro activo de la dimensión correspondiente al registro de origen:
o Si no se encuentra: creación del nuevo registro activo.
o En el caso contrario, y si es una modificación de Tipo 2: desactivación del
registro.

La instrucción correspondiente es la siguiente:

MERGE INTO [AdventureWorksDW2008R2].[ei].[DimEmployee] AS [D]


USING
#OrigenConClavesTecnicas AS [SS]
ON ([SS].[NationalIDNumber] = [D].[EmployeeNationalIDAlternateKey]
AND ([D].[CurrentFlag] = 1))
WHEN NOT MATCHED
THEN INSERT VALUES ([SS].[NationalIDNumber], [.SS].
[SalesTerritoryKey], [SS].[FirstName], [SS].[LastName], [SS].
[BirthDate], 1, GETDATE(), NULL)
WHEN MATCHED AND ([D].[SalesTerritoryKey] <> [SS].
[SalesTerritoryKey])
THEN UPDATE SET [D].[CurrentFlag] = 0, [D].[EndDate] =
DATEADD(d,-1,GETDATE());

Se realiza una verificación para detectar la modificación de al menos uno de los atributos de tipo
2. En nuestro caso no hay más que uno: SalesTerritoryKey. Si hubiera más, sería preciso incluir las
condiciones correspondientes usando la cláusula OR.

Para completar este comando, es necesario recuperar el conjunto de filas que han
provocado la desactivación para insertarlas como activas en la tabla de dimensión. Esta
operación es posible gracias a la cláusula Transact SQL OUTPUT.

OUTPUT devuelve las filas del origen así como la operación que ha provocado en el
destino. Filtrando aquellas que han provocado una actualización (UPDATE) el motor SQL
devuelve un conjunto de filas que basta insertar en la dimensión como los nuevos registros
activos.

La instrucción correspondiente es la siguiente, donde se ha marcado en negrita el código


SQL que se ha agregado respecto a la anterior:

INSERT INTO [AdventureWorksDW2008R2].[ei].[DimEmployee]


SELECT [NationalIDNumber], [SalesTerritoryKey], [FirstName],
[LastName], [BirthDate],1, GETDATE(),NULL
FROM
(MERGE INTO [AdventureWorksDW2008R2].[ei].[DimEmployee] AS [D]
USING
#OrigenConClavesTecnicas AS [SS]
ON ([SS].[NationalIDNumber] = [D].[EmployeeNationalIDAlternateKey]
AND ([D].[CurrentFlag] = 1))
WHEN NOT MATCHED
THEN INSERT VALUES ([SS].[NationalIDNumber], [SS].
[SalesTerritoryKey], [SS].[FirstName], [SS].[LastName], [SS].
[BirthDate], 1, GETDATE(), NULL)

ShareVideos
WHEN MATCHED AND ([D].[SalesTerritoryKey] <> [SS].
[SalesTerritoryKey])
THEN UPDATE SET [D].[CurrentFlag] = 0, [D].[EndDate] =
DATEADD(d,-1,GETDATE())
OUTPUT $Action [TypeAction],[SS].[NationalIDNumber], [SS].
[SalesTerritoryKey], [SS].[FirstName], [SS].[LastName], [SS].
[BirthDate]
) AS [MergeScd]
WHERE [MergeScd].[TypeAction] = ’UPDATE’

Este comando SQL bastaría si todos los atributos de la dimensión fueran de tipo 2. A la inversa, si
todos fueran de tipo 1, sería inútil ejecutarlo.

Queda actualizar los atributos de tipo 1.

Actualización de Tipo 1

La gestión de atributos de Tipo 1 es más sencilla. O bien el registro ya existe y en ese caso
debe actualizarse si se ha modificado alguno de sus atributos, o bien no existe y es preciso
crearlo.

Un comando MERGE está perfectamente adaptado a nuestra necesidad:

MERGE INTO [AdventureWorksDW2008R2].[ei].[DimEmployee] AS [D]


USING #OrigenConClavesTecnicas AS [SS]
ON ([SS].[NationalIDNumber] = [D].
[EmployeeNationalIDAlternateKey]) -- option (AND [D].[CurrentFlag]
= 1)
WHEN NOT MATCHED
THEN INSERT VALUES ([SS].[NationalIDNumber], [SS].
[SalesTerritoryKey], [SS].[FirstName], [SS].[LastName], [SS].
[BirthDate], 0, NULL, NULL)
WHEN MATCHED AND ([D].[FirstName] <> [SS].[FirstName] OR [D].
[LastName] <> [SS].[LastName] OR [D].[BirthDate] <> [SS].
[BirthDate])
THEN UPDATE SET [D].[FirstName] = [SS].[FirstName]
,[D].[LastName] = [SS].[LastName]
,[D].[BirthDate] = [SS].[BirthDate];

Este comando actualiza el conjunto de filas devueltas. La opción entre comentario permite
actualizar solamente la fila activa.

La instrucción propuesta gestiona a su vez el caso de la inserción de nuevos registros que ya


hemos efectuado en la instrucción de Tipo 2. Por ello podría usarse sola siempre y cuando no
hubiera ningún atributo de Tipo 2.

ShareVideos
Estos tres comandos SQL ejecutados juntos y en orden garantizan la correcta alimentación
de la dimensión.

c. Hechos

Las tablas de hechos son muy voluminosas. Generalmente se alimentan de forma


incremental: la única operación es la inserción de filas.

Una modificación o un borrado tiene un impacto enorme sobre los cálculos de importes. Es
preciso rehacer completamente todos los cálculos para aplicar este impacto, mientras que una
actualización aditiva necesita muy poco tiempo para aplicar su impacto. Una tabla de hechos
puede contener varios cientos de miles de hechos.

El proceso de alimentación de la tabla de hechos a partir de la Staging Area se organiza de


la forma siguiente:

 Extracción de los datos de origen


 Búsqueda de las claves técnicas
 Inserción de los registros

Extracción de los datos de origen

Como hemos visto en el capítulo anterior la consulta de extracción de datos del sistema de
origen es:

SELECT RTRIM(LTRIM([E].[NationalIDNumber])) AS
[NationalIDNumber]
,[SPQH].[QuotaDate]
,MAX([SPQH].[SalesQuota]) AS [SalesQuota]
FROM [AdventureWorks].[Sales].[SalesPersonQuotaHistory] [SPQH]
LEFT OUTER JOIN [AdventureWorks].[HumanResources].[Employee] [E]
ON ([SPQH].[SalesPersonID] = [E].[EmployeeID])
GROUP BY [E].[NationalIDNumber], [SPQH].[QuotaDate]
Búsqueda de las claves técnicas

Los datos de calendario tienen claves técnicas específicas que se calculan. Por tanto no hay
una clave que buscar en la dimensión de empleados. La consulta correspondiente es la
siguiente, donde se ha marcado en negrita el código SQL agregado respecto a la anterior:

SELECT
[DimEmp].[EmployeeKey]
,YEAR([S].[QuotaDate]) *10000 + MONTH([S].[QuotaDate]) * 100 +
DAY([S].[QuotaDate]) AS [DateKey]
,YEAR([S].[QuotaDate]) AS [CalendarYear]
,1 + (MONTH([S].[QuotaDate]) - 1) / 3 AS [CalendarQuarter]
,[S].[SalesQuota]
FROM (

ShareVideos
SELECT RTRIM(LTRIM([E].[NationalIDNumber])) AS [NationalIDNumber]
,[SPQH].[QuotaDate]
,MAX([SPQH].[SalesQuota]) AS [SalesQuota]
FROM [AdventureWorks].[Sales].[SalesPersonQuotaHistory] [SPQH]
LEFT OUTER JOIN [AdventureWorks].[HumanResources].[Employee] [E]
ON ([SPQH].[SalesPersonID] = [E].[EmployeeID])
GROUP BY [E].[NationalIDNumber], [SPQH].[QuotaDate]
) AS [S]
LEFT OUTER JOIN [AdventureWorksDW2008R2].[ei].[DimEmployee] AS
[DimEmp] ON ([S].[NationalIDNumber] = [DimEmp].
[EmployeeNationalIDAlternateKey])

La unión es una unión externa de forma que no se pierda ningún registro en esta operación.
La posibilidad de que no se encuentre algún empleado debería gestionarse bien aquí, o bien
más adelante en la cadena decisional, por ejemplo en el cubo, gracias al Miembro
desconocido.

Inserción

Los registros devueltos en la consulta anterior se pueden insertar directamente en la tabla de


hechos.

La instrucción correspondiente es la siguiente, donde se ha marcado en negrita el código


SQL que se ha agregado respecto a la anterior:

INSERT INTO [AdventureWorksDW2008R2].[ei].[FactSalesQuota]


SELECT
[DimEmp].[EmployeeKey]
,YEAR([S].[QuotaDate]) *10000 + MONTH([S].[QuotaDate]) * 100 +
DAY([S].[QuotaDate]) AS [DateKey]
,YEAR([S].[QuotaDate]) AS [CalendarYear]
,1 + (MONTH([S].[QuotaDate]) - 1) / 3 AS [CalendarQuarter]
,[S].[SalesQuota]
FROM (
SELECT RTRIM(LTRIM([E].[NationalIDNumber])) AS [NationalIDNumber]
,[SPQH].[QuotaDate]
,MAX([SPQH].[SalesQuota]) AS [SalesQuota]
FROM [AdventureWorks].[Sales].[SalesPersonQuotaHistory] [SPQH]
LEFT OUTER JOIN [AdventureWorks].[HumanResources].[Employee] [E]
ON ([SPQH].[SalesPersonID] = [E].[EmployeeID])
GROUP BY [E].[NationalIDNumber], [SPQH].[QuotaDate]
) AS [S]
LEFT OUTER JOIN [AdventureWorksDW2008R2].[ei].[DimEmployee] AS
[DimEmp] ON ([S].[NationalIDNumber] = [DimEmp].
[EmployeeNationalIDAlternateKey])

En los casos reales el número de filas puede ser demasiado grande como para lanzar un único
comando INSERT. Jamás hay que perder de vista que la base de datos de ejemplo Adventure
Works posee un volumen muy pequeño. Permite probar las funcionalidades de la suite SQL, pero
no su comportamiento en un entorno DW estándar.

ShareVideos
El conjunto de comandos para gestionar la alimentación ya están listos. Quedaría
prepararlos para desplegarlos en los entornos de pruebas y producción.

d. Despliegue

SQL Server ofrece una herramienta para ejecutar scripts Transact SQL con parámetros: el
programa SQLCMD, que reemplaza a ISQL.

Permite parametrizar los elementos del script SQL, como por ejemplo el nombre de las
bases de datos o la configuración de la conexión, y automatizar la ejecución de distintos
scripts de alimentación: dimensiones y a continuación hechos.

Es posible trabajar en SSMS con una consulta SQL en modo SQLCMD. Para ello puede añadir un
botón en la barra de herramientas del procesador de consultas SQL. Despliegue el menú
contextual haciendo clic derecho con el ratón en la barra de botones y a continuación elija la
opción personalizar - Consulta, y deslice Modo SQLCMD.

Para habilitar el despliegue de estos scripts, es necesario parametrizar los nombres de las
bases de datos. En nuestro ejemplo, la conexión al servidor SQL, con los permisos
necesarios para la ejecución de los comandos escritos anteriormente, se realiza en tiempo
de llamada a SQLCMD, en modo autenticación Windows.

En un script SQLCMD, podemos declarar una variable gracias a la instrucción SETVAR, y


usarla por medio de la notación $(NombreVariable).

La solución propuesta consiste en crear cuatro scripts SQLCMD y un script de lote de


comandos .CMD:

 ETL_DimEmployee.sql: alimentación de la dimensión de empleados.


 ETL_FactSalesQuota.sql: alimentación de la tabla de hechos.
 ETL_Config.sql: declaración e inicialización de las variables SQLCMD.
 ETL_Maestro.sql: script maestro encargado de llamar a los tres anteriores.
 ETL_Maestro.CMD: línea de comando SQLCMD.

ETL_DimEmployee.sql

El script de alimentación de la dimensión de empleados está adaptado para usar variables


que designan las bases de datos de origen y de DW. Estas variables se declaran antes
gracias al script ETL_Config.sql.

--comandos SQLCMD
print ’Origen : $(DBSOURCE)’
print ’Data Warehouse : $(DBDW)’

--variables contador

ShareVideos
DECLARE
@nLineasOrigen AS BIGINT
,@nLineasTipo2 AS BIGINT
,@nLineasTipo1 AS BIGINT

--origen en tabla temporal


SELECT [S].*,[DimTer].[SalesTerritoryKey]
INTO #OrigenConClavesTecnicas
FROM
(SELECT [E].[NationalIDNumber]
,[E].[BirthDate]
,[E].[CurrentFlag]
,[C].[FirstName]
,[C].[LastName]
,COALESCE([SP].[TerritoryID],0) AS
[SalesTerritoryAlternateKey]
FROM $(DBSOURCE).[HumanResources].[Employee] [E]
INNER JOIN $(DBSOURCE).[Person].[Contact] [C] ON ([E].
[ContactID] = [C].[ContactID])
LEFT OUTER JOIN $(DBSOURCE).[Sales].[SalesPerson] [SP] ON
([SP].[SalesPersonID] = [E].[EmployeeID])
) AS [S]
LEFT OUTER JOIN $(DBDW).[dbo].[DimSalesTerritory] AS [DimTer]
ON ([S].[SalesTerritoryAlternateKey] = [DimTer].
[SalesTerritoryAlternateKey])
--Total Origen
SET @nLineasOrigen = ROWCOUNT_BIG()

--actualización de los atributos de TIPO 2 e inserción de los nuevos


atributos
INSERT INTO $(DBDW).[ei].[DimEmployee]
SELECT [NationalIDNumber], [SalesTerritoryKey], [FirstName],
[LastName], [BirthDate],1, GETDATE(),NULL
FROM
(MERGE INTO $(DBDW).[ei].[DimEmployee] AS [D]
USING
#OrigenConClavesTecnicas AS [SS]
ON ([SS].[NationalIDNumber] = [D].[EmployeeNationalIDAlternateKey]
AND ([D].[CurrentFlag] = 1))
WHEN NOT MATCHED
THEN INSERT VALUES ([SS].[NationalIDNumber], [SS].
[SalesTerritoryKey], [SS].[FirstName], [SS].[LastName], [SS].
[BirthDate], 1, GETDATE(), NULL)
WHEN MATCHED AND ([D].[SalesTerritoryKey] <> [SS].
[SalesTerritoryKey])
THEN UPDATE SET [D].[CurrentFlag] = 0, [D].[EndDate] =
DATEADD(d,-1,GETDATE())
OUTPUT $Action [TypeAction],[SS].[NationalIDNumber], [SS].
[SalesTerritoryKey], [SS].[FirstName], [SS].[LastName], [SS].
[BirthDate]
) AS [MergeScd]
WHERE [MergeScd].[TypeAction] = ’UPDATE’
--Total Tipo 2
SET @nLineasTipo2 = ROWCOUNT_BIG()

--actualización de TIPO 1 e inserción de nuevos registros


--Nota: inserción redundante respecto a la anterior, pero permite

ShareVideos
--usar el mismo modelo de consulta si se borrara la consulta
--anterior (si no hubiera atributos de tipo 2)
MERGE INTO $(DBDW).[ei].[DimEmployee] AS [D]
USING #OrigenConClavesTecnicas AS [SS]
ON ([SS].[NationalIDNumber] = [D].
[EmployeeNationalIDAlternateKey]) --option (AND [D].[CurrentFlag] = 1)
WHEN NOT MATCHED
THEN INSERT VALUES ([SS].[NationalIDNumber], [SS].
[SalesTerritoryKey], [SS].[FirstName], [SS].[LastName], [SS].
[BirthDate], 0, NULL, NULL)
WHEN MATCHED AND ([D].[FirstName] <> [SS].[FirstName] OR [D].
[LastName] <> [SS].[LastName] OR [D].[BirthDate] <> [SS].
[BirthDate])
THEN UPDATE SET [D].[FirstName] = [SS].[FirstName]
,[D].[LastName] = [SS].[LastName]
,[D].[BirthDate] = [SS].[BirthDate];
--Total Tipo 1
SET @nLineasTipo1 = ROWCOUNT_BIG()

print CAST(@nLineasOrigen AS VARCHAR) + ’ Leidos’


print CAST(@nLineasTipo1 AS VARCHAR) + ’ Tipo1’
print CAST(@nLineasTipo2 AS VARCHAR) + ’ Tipo2’
DROP TABLE #OrigenConClavesTecnicas
GO

Se han incluido variables SQL para contar el número de operaciones efectuadas.

Las instrucciones SQL usadas no permiten obtener los mismos indicadores que en la modelización
SSIS.

ETL_FactSalesQuota.sql

Para la inserción en la tabla de hechos:

--comandos SQLCMD
print ’Origen : $(DBSOURCE)’
print ’Data Warehouse : $(DBDW)’

--variables contador
DECLARE @nLineasInsertadas AS BIGINT

INSERT INTO $(DBDW).[ei].[FactSalesQuota]


([EmployeeKey]
,[DateKey]
,[CalendarYear]
,[CalendarQuarter]
,[SalesAmountQuota])
SELECT
[DimEmp].[EmployeeKey]
,YEAR([S].[QuotaDate]) *10000 + MONTH([S].[QuotaDate]) * 100 +
DAY([S].[QuotaDate]) AS [DateKey]

ShareVideos
,YEAR([S].[QuotaDate]) AS [CalendarYear]
, 1 + (MONTH([S].[QuotaDate]) - 1) / 3 AS [CalendarQuarter]
,[S].[SalesQuota]
FROM (
SELECT RTRIM(LTRIM([E].[NationalIDNumber])) AS [NationalIDNumber]
,[SPQH].[QuotaDate]
,MAX([SPQH].[SalesQuota]) AS [SalesQuota]
FROM $(DBSOURCE).[Sales].[SalesPersonQuotaHistory] [SPQH]
LEFT OUTER JOIN $(DBSOURCE).[HumanResources].[Employee] [E] ON
([SPQH].SalesPersonID] = [E].[EmployeeID])
GROUP BY [E].[NationalIDNumber], [SPQH].[QuotaDate]
) AS [S]
LEFT OUTER JOIN $(DBDW).[ei].[DimEmployee] AS [DimEmp] ON ([S].
[NationalIDNumber] = [DimEmp].[EmployeeNationalIDAlternateKey])

--Total Tipo 1
SET @nLineasInsertadas = ROWCOUNT_BIG()

print CAST(@nLineasInsertadas AS VARCHAR) + ’ Inserciones’


GO
ETL_Config.sql

Dedicamos un script a la inicialización de las variables:

--Variables SQLCMD
:SETVAR DBSOURCE [AdventureWorks]
:SETVAR DBDW [AdventureWorksDW2008R2]

El comando :r permite lanzar otro script SQLCMD. El script maestro es el más sencillo y
simplemente llama a los tres anteriores.

--Carga de variables
:r ETL_Config.sql
print ’Origen : $(DBSOURCE)’
print ’Data Warehouse : $(DBDW)’

--Carga de dimensiones
:r ETL_DimEmployee.sql

--Carga de hechos
:r ETL_FactSalesQuota.sql

print ’Carga finalizada.’


ETL_Maestro.cmd

Por último, el comando SQLCMD simplemente inicia la ejecución del script maestro:

sqlcmd -i"ETL_Maestro.sql"

ShareVideos
e. Resumen

Hemos visto cómo es posible automatizar y desplegar programas en producción. Hay que
destacar que el tiempo de procesamiento es mucho mejor que el que se obtiene con SSIS:
del orden de 15 a 20 veces más rápido partiendo de la hipótesis de que el origen y el destino
están en el mismo servidor...

Se plantea por tanto la duda entre usar Transact SQL o SSIS para alimentar el DW...

Elementos a favor de SSIS:

 SSIS permite realizar una gestión de errores, por ejemplo de conversión. Con SQL,
un error en una fila bloquea toda la instrucción y no permite redirigirla a una tabla
de errores.
 SSIS permite gestionar más finamente la auditoría de operaciones, como contadores
del número de filas insertadas, leídas, en error, actualizadas.
 SSIS puede conectarse a numerosos orígenes. SQL permite conectarse a archivos de
texto y orígenes OLE DB con OPENROWSET (véase
http://msdn.microsoft.com/en-us/library/ms190312.aspx), pero esto no siempre es
suficiente.
 La interfaz gráfica de SSIS supone un valor añadido: la imagen del flujo de datos
documenta en cierto modo el procesamiento.
 SSIS proporciona el Registro (Logging) para crear un registro del procesamiento.
 SSIS puede implementarse sin SQL Server, por ejemplo en un entorno ORACLE.

Elementos a favor de Transact SQL:

 SQL tiene mejor rendimiento.


 Las empresas poseen a menudo personal formado en SQL. SSIS es una tecnología
más compleja de dominar. Supone un servicio más que hay que administrar y
mantener.
 El script SQL es completo. Con él, el desarrollador tiene toda la información
delante mientras que con SSIS, aunque es visual, exige tener que buscar las
propiedades concretas en los componentes adecuados.
 El script SQL es fácil de mantener, basta con tener a mano un editor de texto.
 En una solución SSIS habrá de todos modos código SQL. En efecto, generalmente
las extracciones desde orígenes SQL, o ciertas operaciones SSIS, como las
ordenaciones, tienen un mal rendimiento y ello le conducirá a usar operaciones
directamente sobre el motor SQL o sobre componentes a medida.

Cada proyecto tiene sus propias restricciones y su contexto, no existe por tanto una regla
universal.

ShareVideos
2. Detección de las modificaciones de la base de datos de origen

En BI los volúmenes de datos que se manipulan son considerables. Un método para superar
este inconveniente consiste en no leer en la base de datos de origen más que el diferencial
de las modificaciones que han aparecido desde la última lectura. Desgraciadamente, en
ciertos casos esta información está ausente en el origen de datos si no se expresó la
necesidad durante su diseño y creación. Si, por suerte, la base de datos de la aplicación está
alojada en una edición Enterprise de SQL Server 2008 o superior puede activarse la
funcionalidad CDC (Change Data Capture).

a. Principio del CDC

Conservar un histórico de las modificaciones de la base de datos es una función que ya es


posible llevar a cabo gracias al registro de transacciones. Existen de hecho ciertos usos
especializados de las herramientas en su fase de explotación. La funcionalidad CDC
(Change Data Capture) realiza exactamente las mismas acciones que se realicen para
alimentar las tablas concretas que almacenan las modificaciones que hayan tenido lugar tras
la última lectura de la base de datos o en una franja horaria determinada.

Para ello el administrador crea la petición de seguimiento de una o varias tablas. Un agente
se encarga de sincronizar el registro de transacciones y almacena la información útil en la
base de datos.

La activación de CDC para una tabla provoca la creación de numerosos objetos en la base de datos.
Estos objetos se usan bien por el proceso asíncrono del registro de CDC, o bien para consultar al
CDC.

Los datos almacenados pueden volverse muy voluminosos. Su supresión también está
automatizada por un agente. Por defecto, la información se conserva 3 días, ¡aunque es
posible aumentar este rango hasta varios años! El procedimiento almacenado
sys.sp_cdc_change_job permite configurar este parámetro.

Por defecto, CDC anota todos los cambios. Existe una opción que permite obtener los
cambios netos: si han tenido lugar varios cambios sobre el mismo registro y únicamente
nos interesa el último, entonces CDC sólo reportará este último.

Esta opción no modifica el comportamiento de CDC sino que añade una funcionalidad más.

ShareVideos
b. Ejemplo de CDC

El ejemplo se realiza sobre una tabla reducida en la base de datos AdventureWorks: la tabla
de los departamentos. Para no alterar la base de datos de ejemplo vamos a crear una copia
en el esquema [ei].

--CREACION TABLA
USE [AdventureWorks]
GO
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N’ei’)
EXEC sys.sp_executesql N’CREATE SCHEMA [ei] AUTHORIZATION [dbo]’
GO
CREATE TABLE [ei].[Department](
[DepartmentID] [smallint] IDENTITY(1,1) NOT NULL,
[Name] [dbo].[Name] NOT NULL,
[GroupName] [dbo].[Name] NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_Department_DepartmentID] PRIMARY KEY CLUSTERED
(
[DepartmentID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =
ON) ON [PRIMARY]
) ON [PRIMARY]
GO

--Inserción de Tabla
INSERT INTO [ei].[Department]
SELECT [Name], [GroupName], [ModifiedDate] FROM [HumanResources].
[Department]

Los comandos siguientes activan la funcionalidad CDC para la base de datos y a


continuación comprueban esta activación. Si se ha ejecutado con éxito el script la última
fila debería devolver el valor 1.

use [AdventureWorks]
exec [sys].[sp_cdc_enable_db]
select [is_cdc_enabled] from [sys].[databases] where [name] =
’AdventureWorks’

A continuación hay que pedir que se realice el seguimiento de la tabla de los


departamentos. Se puede definir un rol para dotar de seguridad al acceso a esta
información. Existen otras opciones como el soporte a la funcionalidad de cambios netos, o
la restricción de la funcionalidad a ciertas columnas de la tabla, tal y como se define a
continuación.

exec [sys].[sp_cdc_enable_table] @source_schema = ’ei’,


@source_name = ’Department’, @role_name = ’cdc_role’,
@supports_net_changes = 1, @captured_column_list =
’DepartmentID,Name,GroupName’

ShareVideos
Transact SQL proporciona varios comandos para integrar la configuración de CDC, por
ejemplo:

select [is_tracked_by_cdc] from [sys].[tables] WHERE [OBJECT_ID] =


OBJECT_ID(’[ei].[Department]’)
select * from [cdc].[captured_columns]
select * from [cdc].[change_tables]
EXEC [sys].[sp_cdc_help_change_data_capture]

Para probar la funcionalidad, el siguiente juego de instrucciones realiza ciertas


modificaciones en la nueva tabla. La segunda instrucción anula la primera: su objetivo es
comprobar el funcionamiento de los cambios netos.

UPDATE [ei].[Department] SET [Name] = ’Sales 2’ WHERE


[DepartmentID] = 3
UPDATE [ei].[Department] SET [Name] = ’Sales 3’ WHERE
[DepartmentID] = 3
INSERT INTO [ei].[Department] VALUES (’Export’, ’Sales and
Marketing’, GETDATE())
UPDATE [ei].[Department] SET [GroupName] = ’Inv Management’ WHERE
[DepartmentID] = 5
UPDATE [ei].[Department] SET [ModifiedDate] = GETDATE() WHERE
[DepartmentID] = 8

Para consultar los cambios capturados es preciso determinar un intervalo de tiempo de


modificación. Los límites del intervalo se definen mediante LSN. Existen varias funciones
de Transact SQL que permiten obtener los LSN, por ejemplo a partir de una fecha y una
hora. Aquí los valores mínimo y máximo se preguntan directamente al servidor:

DECLARE @from_lsn binary(10), @to_lsn binary(10)


SET @from_lsn = [sys].[fn_cdc_get_min_lsn](’ei_Department’);
SET @to_lsn = [sys].[fn_cdc_get_max_lsn]();

El siguiente comando tiene como objetivo pedir el conjunto de modificaciones brutas en el


intervalo indicado:

SELECT * FROM [cdc].[fn_cdc_get_all_changes_ei_Department]


(@from_lsn, @to_lsn, ’all’)

El tercer parámetro "all" indica que el comando debe recuperar únicamente aquellos valores que
se han producido tras la modificación. Reemplace este parámetro por "all update old" para tener
los valores anteriores y posteriores.

Esta consulta devuelve la siguiente información:

__$operatio __$updat DepartmentI


__$start_lsn __$seqval Name GroupName
n e _mask D

ShareVideos
__$operatio __$updat DepartmentI
__$start_lsn __$seqval Name GroupName
n e _mask D
0x0000002C 0x0000002C
Sales and
000006CB00 000006CB00 4 0x02 3 Sales 2
Marketing
04 02
0x0000002C 0x0000002C

000006CD0 000006CD0 Sales and


4 0x02 3 Sales 3
0 0 Marketing

04 02
0x0000002C 0x0000002C
Sales and
000006CF00 000006CF00 2 0x07 17 Export
Marketing
04 03
0x0000002C 0x0000002C
Inv
Purchasin
000006D000 000006D000 4 0x04 5 Managemen
g
t
04 02

Para conocer los cambios netos tenemos una segunda función a nuestra disposición:

SELECT * FROM [cdc].[fn_cdc_get_net_changes_ei_Department]


(@from_lsn, @to_lsn, ’all’)

Que, como es lógico, devuelve una línea menos:

__$start_lsn __$operation __$update_mask DepartmentID Name GroupName


0x0000002C
Sales and
4 NULL 3 Sales 3
Marketing
000006CD0004
0x0000002C
Sales and
2 NULL 17 Export
Marketing
000006CF0004
0x0000002C
Inv
4 NULL 5 Purchasing
Management
000006D00004

Para la próxima carga es preciso memorizar el final del intervalo usado, por ejemplo en una
tabla temporal...

ShareVideos
SELECT @to_lsn AS [TO_LSN] INTO #MEMO_LAST_LSN

Si efectuamos una nueva modificación en la tabla de departamentos.

DELETE FROM [ei].[Department] WHERE DepartmentID = 11

Puede detectarse gracias a la consulta siguiente que calcula el nuevo intervalo a partir del
final del anterior. El nuevo intervalo comienza justo después del final del precedente,
gracias a la función fn_cdc_increment_lsn().

DECLARE @from_lsn binary(10), @to_lsn binary(10), @save_to_lsn


binary(10);
SET @save_to_lsn = (SELECT [TO_LSN] FROM #MEMO_LAST_LSN)
SET @from_lsn = [sys].[fn_cdc_increment_lsn](@save_to_lsn);
print @from_lsn
SET @to_lsn = [sys].[fn_cdc_get_max_lsn]();
print @to_lsn
SELECT * FROM [cdc].[fn_cdc_get_net_changes_ei_Department]
(@from_lsn, @to_lsn, ’all’)
--supresión tabla temporal
DROP TABLE #MEMO_LAST_LSN

El proceso de captura es asíncrono, por lo que es preciso esperar antes de interrogar a CDC para
que realmente aparezca la modificación que acabamos de efectuar. Espere primero a que la
transacción finalice y se almacene...

La consulta anterior devuelve la modificación que hemos realizado:

__$start_lsn __$operation __$update_mask DepartmentID Name GroupName


0x0000002C00 Executive
Information
1 NULL 11 General and
Services
0007D80005 Administration

Consulta decisional
Este capítulo presenta dos ejemplos, entre otros, de funcionalidades del motor SQL que
compiten con SSAS: las vistas indexadas y las consultas GROUPING SETS.

1. Vistas indexadas

La vista indexada es una funcionalidad de la edición Entreprise de SQL Server. El principio


consiste en crear una vista y sobre esta vista crear un índice clusterizado (CLUSTERED
INDEX). Como tal índice se materializa, SQL Server almacena el contenido de la vista en
una tabla. Cuando se actualiza alguna de las tablas, la vista se actualiza automáticamente
para reflejar la modificación del origen. La ventaja de las vistas indexadas consiste en que
el motor SQL Server puede usarlas incluso si una consulta no llama directamente a la vista.

ShareVideos
Esto significa que una consulta escrita antes de la creación de la vista indexada puede
aprovechar el rendimiento ligado al uso de esta vista.

Una funcionalidad similar de OLAP consiste en crear una vista indexada de agregados. El
motor alimenta automáticamente esta vista, y las consultas de los usuarios aprovechan de
forma transparente los agregados.

Además de necesitar la edición Enterprise, la implementación de vistas indexadas es


limitante debido a numerosas condiciones de uso: en particular, el uso del SCHEMA
BINDING para crear la vista y la restricción de funciones de agregación soportadas,
limitadas a la suma (SUM) y el recuento (COUNT_BIG).

Los siguientes enlaces contienen más información acerca de las vistas indexadas:

 http://msdn.microsoft.com/en-us/library/ms187864.aspx
 http://msdn.microsoft.com/en-us/library/ms191432.aspx

Es posible crear tablas de agregados en la edición Standard de SQL Server, pero el motor no las
usará ni las actualizará automáticamente. Existen dos funcionalidades abordadas en este capítulo
que pueden implantarse para aprovechar la implementación de las tablas de agregación: el
comando MERGE (edición Standard), que permite realizar una actualización de la tabla de
agregado en una única instrucción, y el CDC (edición Entreprise), que permite el comportamiento
incremental.

2. Consultas

Una consulta diseñada para realizar un análisis tiene a menudo como objetivo cruzar ejes de
análisis en filas y en columnas para dar, en cada cruce, un agregado sobre un indicador de
la tabla de hechos.

Por ejemplo, la tabla de hechos FactResellerSales proporciona información acerca de las


ventas indirectas. Supongamos que se pide una consulta para obtener una tabla sintética que
presente el número de productos distintos vendidos en una lista de países por trimestre.

Escribir tal consulta sobre la base de datos SSAS en MDX es bastante intuitivo: basta con
devolver la lista de países en columnas, la lista de trimestres en filas y agregar una columna
con una expresión MDX que defina el valor solicitado.

La siguiente consulta MDX puede lanzarse sobre la base SSAS Adventure Works DW
2008R2 SE:

WITH
MEMBER [Measures].[Número] AS {NONEMPTY([Product].[Product].
[Product].MEMBERS, [Measures].[Reseller Order Quantity])}.COUNT
SELECT

ShareVideos
{[Geography].[Country].&[France],[Geography].[Country].&[United
Kingdom],[Geography].[Country].&[Canada],[Geography].
[Country].&[United States], [Geography].[Country].[All
Geographies]} * {[Measures].[Nombre]} ON COLUMNS,
{[Date].[Calendar].[All Periods],[Date].[Calendar].[Calendar
Quarter].&[2005]&[1]:[Date].[Calendar].[Calendar
Quarter].&[2006]&[4]} ON ROWS
FROM (SELECT
{[Date].[Calendar].[Calendar Year].&[2005]:[Date].[Calendar].
[Calendar Year].&[2006]} ON 0
FROM [Adventure Works])

La expresión MDX calculada puede incluirse en el cubo SSAS. En este caso, la consulta no necesita
la cláusula WITH MEMBER.

Devuelve el juego de resultados siguiente:

France United Kingdom Canada United States All Geographies


Número Número Número Número Número
All Periods 104 106 166 167 167
Q3 CY 2005 0 0 46 46 46
Q4 CY 2005 0 0 59 60 60
Q1 CY 2006 0 0 51 51 51
Q2 CY 2006 0 0 59 59 59
Q3 CY 2006 104 105 107 107 107
Q4 CY 2006 93 96 100 100 100

Este resultado nos recuerda que existen pocas diferencias entre las ventas a nivel nacional.
No obstante, el último trimestre de 2006 parece que el intervalo entre el mercado europeo y
el mercado norteamericano se ahonda.

La transcripción de este tipo de extracción en SQL clásico plantea varios problemas:

 El rendimiento sobre volúmenes de datos importantes sería catastrófico sin


agregaciones precalculadas.
 El cálculo de agregados se realiza generalmente gracias a la cláusula GROUP BY.
Pero la consulta MDX realiza agregaciones a varios niveles: año, trimestre, país y
año, trimestre y país por separado.
 La presentación de la información requiere que un campo de la tabla se presente en
columnas.

El motor SQL Server 2008, en su edición Standard, permite superar los dos primeros
puntos usando comandos Transact SQL:

ShareVideos
 La cláusula GROUPING SETS, junto a la cláusula GROUP BY, permite realizar las
agregaciones de mayor nivel.
 La cláusula PIVOT, que existe desde SQL Server 2005, permite pivotar el
contenido de un campo en columnas.

Combinadas, ambas cláusulas Transact SQL permiten crear una tabla similar a la que
devuelve la consulta MDX. Hemos descompuesto la construcción de la consulta SQL en
dos etapas.

La primera etapa consiste en realizar los tres niveles de agregación necesarios. La consulta
que se muestra a continuación se puede ejecutar sobre la base de datos SQL
AdventureWorksDW2008R2.

SELECT
D.CalendarYear
, D.CalendarQuarter
, T.SalesTerritoryCountry
, COUNT(DISTINCT F.ProductKey) AS DistinctProductCount
FROM dbo.FactResellerSales F
INNER JOIN dbo.DimDate D ON F.OrderDateKey = D.DateKey
INNER JOIN dbo.DimSalesTerritory T ON F.SalesTerritoryKey =
T.SalesTerritoryKey
WHERE D.CalendarYear IN (’2005’ , ’2006’)
GROUP BY GROUPING SETS ( (D.CalendarYear, D.CalendarQuarter,
T.SalesTerritoryCountry), (D.CalendarYear, D.CalendarQuarter),
(T.SalesTerritoryCountry),())
ORDER BY 1,2,3;

Es posible encontrar información complementaria acerca del conjunto de funcionalidades de la


cláusula GROUP BY que son comparables a OLAP en la siguiente dirección:
http://msdn.microsoft.com/en-us/library/bb522495.aspx.

Las primeras filas del juego de datos devuelto por la consulta SQL son:

CalendarYear CalendarQuarter SalesTerritoryCountry DistinctProductCount


NULL NULL NULL 167
NULL NULL Canada 166
NULL NULL France 104
NULL NULL United Kingdom 106
NULL NULL United States 167
2005 3 NULL 46
2005 3 Canada 46
2005 3 United States 46
2005 4 NULL 60
2005 4 Canada 59

ShareVideos
CalendarYear CalendarQuarter SalesTerritoryCountry DistinctProductCount
2005 4 United States 60
2006 1 NULL 51
... ... ... ...

La segunda etapa consiste en pivotar los países en columnas. Para ello se usa la cláusula
PIVOT que requiere el uso de una función de agregación: la consulta usa arbitrariamente
MIN(), aunque esto no tiene el menor impacto dado que sólo existe una fila por cada cruce.

SELECT * FROM
(SELECT
D.CalendarYear
, D.CalendarQuarter
, COALESCE(T.SalesTerritoryCountry,’Total’) AS
[SalesTerritoryCountry]
, COUNT(DISTINCT F.ProductKey) AS DistinctProductCount
FROM dbo.FactResellerSales F
INNER JOIN dbo.DimDate D ON F.OrderDateKey = D.DateKey
INNER JOIN dbo.DimSalesTerritory T ON F.SalesTerritoryKey =
T.SalesTerritoryKey
WHERE D.CalendarYear IN (’2005’ , ’2006’)
GROUP BY GROUPING SETS ( (D.CalendarYear, D.CalendarQuarter,
T.SalesTerritoryCountry), (D.CalendarYear, D.CalendarQuarter),
(T.SalesTerritoryCountry),())
) AS [SUB]
PIVOT(
MIN(DistinctProductCount) FOR SalesTerritoryCountry IN ([France],
[United Kingdom],[Canada],[United States],[Total])
) AS [PVT]
ORDER BY 1,2

La consulta, ejecutada sobre la base de datos SQL AdventureWorksDW2008R2, devuelve


la tabla siguiente, similar a la que se obtiene con MDX:

United United
CalendarYear CalendarQuarter France Canada Total
Kingdom States
NULL NULL 104 106 166 167 167
2005 3 NULL NULL 46 46 46
2005 4 NULL NULL 59 60 60
2006 1 NULL NULL 51 51 51
2006 2 NULL NULL 59 59 59
2006 3 104 105 107 107 107
2006 4 93 96 100 100 100

Conviene no obstante observar que aunque MDX es un lenguaje muy poco extendido,
escribir la consulta MDX del ejemplo es mucho más sencillo que escribir la consulta SQL,
que requiere conocer en profundidad el modelo de la base de datos relacional.

ShareVideos
Si desea profundizar, Microsoft proporciona el siguiente ejemplo de uso de una consulta
MDX en SSRS (véase
http://msftengprodsamples.codeplex.com/wikipage?title=SS2008!Grouping%20Sets%20Re
port).

Enriquecer el funcionamiento de la base de


datos SSAS
En este capítulo se presentan las funcionalidades avanzadas de SSAS, comenzando por
algunos objetos que permiten enriquecer la capa lógica de negocio.

1. Comandos de script

El capítulo Crear el cubo explica la creación de medidas calculadas y de conjuntos con


nombre. La pestaña Cálculos en el editor del cubo del estudio de desarrollo permite a su
vez incluir comandos de script.

A diferencia de las medidas calculadas y de los conjuntos con nombre, que son expresiones
MDX, los comandos son scripts MDX donde el objetivo consiste en modificar la estructura
del cubo.

El script puede realizar cantidad de operaciones sobre el cubo, tales como definir el
miembro por defecto de una dimensión realizadora de funciones (véase el capítulo Crear el
cubo, sección Expresiones MDX - Miembro por defecto), pero también se usa para
sobrecargar un valor contenido en el cubo sobre un perímetro definido.

Típicamente es útil cuando un cálculo no se puede ejecutar más que en un ámbito


restringido, o cuando un cálculo depende de parámetros variables. Por ejemplo, si el IVA
de los productos de lujo cambiara el uno de enero de 2011, el cálculo del importe sin IVA
puede definirse de la forma siguiente:

SCOPE([Geografia].[Pais].[España], [IVA].[IVA].[Lujo],[Measures].
[Importe sin IVA]);
THIS = [Measures].[Importe con IVA] * (1 - 0.18);
SCOPE([Fecha].[Calendario].[Mes].&[2011]&[1]:NULL);
THIS = [Measures].[Importe con IVA] * (1 - 0.18);
BACK_COLOR = 9035969 (-Verde) = --Verde
END SCOPE;
END SCOPE;

Un primer ámbito (SCOPE) restringe el cálculo al mercado español, a la tasa de IVA para
los productos de lujo y al cálculo de la medida Importe sin IVA.

Esta medida se evalúa actualmente con el impuesto antiguo.

ShareVideos
Se define un subperímetro sobre los meses posteriores al cambio y el cálculo se define con
el nuevo impuesto. Para trazar bien el cambio en el valor del impuesto, el color de fondo de
las celdas (BACK_COLOR) implicadas aparece coloreado en verde.

A continuación se cierra el perímetro.

En el script del cubo, el ámbito en la instrucción CALCULATE; no debe suprimirse. Representa el


cálculo de valores agregados. Permite sobrecargar un valor a nivel de hoja antes de ejecutar esta
instrucción, los agregados se calcularán con el nuevo valor, y no con el de la celda de origen.

La ayuda de referencia en línea sobre este asunto puede encontrarse en:


http://technet.microsoft.com/es-es/library/ms145973.aspx

2. KPI

El indicador clave de desempeño o KPI (Key Performance Indicator) es una medida


calculada especial, definida por diversas expresiones. El uso de un KPI se corresponde con
el uso de componentes visuales como indicadores de nivel o indicadores de tipo
semafórico. El KPI proporciona al diseñador de un informe el conjunto de información
necesaria para crear un u otro componente visual.

El KPI es un concepto que no tiene sentido más que cuando la herramienta de visualización cliente
lo soporta.

La pestaña Indicador clave de desempeño permite gestionarlos dentro del editor del cubo en
el estudio de desarrollo.

Para crear un KPI existen cuatro valores obligatorios definidos por expresiones MDX:

 Expresión del valor:

Define el valor del KPI, que generalmente es una medida del cubo o una medida
calculada.

 Expresión del objetivo:

Define el objetivo o umbral fijado por la empresa siempre y cuando pueda


calcularse.

 Estado:

ShareVideos
El estado permite alimentar el semáforo en función de la posición del valor respecto
al valor objetivo fijado. La expresión debería devolver un -1 para el rojo, 0 para el
ámbar y 1 para el verde.

 Tendencia:

Ciertos componentes visuales proporcionan un indicador de tendencia. Se define a


continuación.

Las expresiones deben corresponderse con reglas de negocio definidas con los usuarios, y a
continuación bien documentadas. No es responsabilidad del equipo de BI definir un umbral
arbitrario únicamente porque sea necesario para crear un KPI.

Las funciones MDX dedicadas a la consulta de estos valores son:

SELECT
{KPIValue("Product Gross Profit Margin")
,KPIGoal("Product Gross Profit Margin")
,KPIStatus("Product Gross Profit Margin")
,KPITrend("Product Gross Profit Margin")} ON COLUMNS
FROM [Adventure Works]

3. Acciones

Las acciones SSAS son comandos contextuales definidos con ayuda del lenguaje MDX,
que el usuario puede iniciar haciendo clic derecho con el ratón sobre la celda de una tabla.

La acción es un concepto que no tiene sentido si no está soportado por la herramienta de


visualización cliente.

La pestaña Acciones dentro del editor del cubo en el estudio de desarrollo está dedicada a
su gestión.

SSAS propone tres tipos de acciones.

 Acción de extracción:

Más conocida con el nombre de Drillthrough, la acción de extracción permite


mostrar las hojas correspondientes a la celda visualizada, se comporta como un
doble clic en la tabla de referencias cruzadas de Excel. Las hojas son el nivel más
detallado que se encuentra en el grupo de medidas del cubo. No es necesario por
tanto consultar la base de datos de origen.

ShareVideos
 Acción de informe:

Como su propio nombre indica la acción de informe provoca la apertura de un


informe SSRS sobre el servidor de informes. Los parámetros del informe se
inicializan a partir del contexto.

 Acción:

Esta acción genérica reagrupa distintos tipos de acciones. El tipo usado por defecto
es la URL. Permite definir dinámicamente una URL y abrirla en un navegador Web,
por ejemplo para mostrar la ficha de un producto o la dirección de un cliente en un
mapa o incluso para mostrar un informe creado con otra tecnología distinta a
SSRS...

4. Traducciones

SSAS proporciona la posibilidad de introducir traducciones en una pestaña específica del


editor tanto para el cubo como para las dimensiones.

Todas las etiquetas definidas en la etapa de diseño son susceptibles de ser traducidas.

El caso de los atributos de dimensión es particular. Puede que los miembros del atributo
sean traducibles. Por ejemplo, los miembros del atributo color son traducibles. Pueden
traducirse en las columnas dedicadas de la tabla de dimensión (véase el capítulo Crear el
cubo). En este caso, por cada atributo y cada idioma existe un botón que permite hacer el
enlace entre la columna de traducción con la vista del origen de datos.

Toda la problemática ligada a la localización de un desarrollo SSAS se aborda en el siguiente


artículo: http://technet.microsoft.com/en-us/library/ms175613.aspx (International Considerations
Analysis Services - Multidimensional Data).

5. Perspectivas

Las perspectivas son vistas que se proporcionan para simplificar el trabajo del usuario. En
efecto, cuando haya construido un DW de empresa con numerosos DM (Data Marts), la
capa SSAS contiene tantos grupos de medidas y tantas dimensiones que se vuelve
inmanejable. Los enlaces entre grupos de medidas y dimensiones no se distinguen
visualmente... Si el usuario final tiene permisos definidos sobre varios grupos de medidas
existe el riesgo de perderse en la interfaz de consulta dinámica, como puede ser Excel,
incluso si se trata de un usuario experto... La perspectiva permite separar las vistas DM por
DM, negocio por negocio, dominio por dominio, con el fin de simplificar su uso.

Las perspectivas se gestionan en la pestaña Perspectivas del editor de cubos en el estudio de


desarrollo. La interfaz es muy simple, los objetos del cubo forman las filas, y las

ShareVideos
perspectivas las columnas, y el diseñador selecciona en los cruces las asociaciones que
quiere materializar.

Esta funcionalidad está reservada a la edición Entreprise. Si el cubo es rico en objetos se vuelve útil
para los usuarios que acceden al cubo mediante una aplicación cliente dinámica. La perspectiva se
ve como un cubo.

6. Asistente Business Intelligence

En el estudio de desarrollo, el botón Agregar Business Intelligence de la barra de


herramientas del editor de dimensiones y del editor del cubo permite iniciar varios
asistentes:

 Ejecutar el asistente Time Intelligence:

Este asistente es muy interesante, por un lado porque aporta un valor añadido a los
cálculos de la dimensión temporal, como los totales a partir del inicio del periodo o
incluso progresiones, y por otro lado porque genera comandos de scripts que pueden
servirnos de guía para crear nuestros propios scripts. Por último, todo cubo tiene
requisitos de análisis sobre el eje temporal. Aparece detallado a continuación (véase
la sección Enriquecer el funcionamiento de la base de datos SSAS - Asistente
Business Intelligence en este capítulo).

 Definir la inteligencia de cuentas:

SSAS permite modelar una dimensión de tipo plan contable con reglas de
agregación adaptadas a la gestión del plan contable, generalmente útil en DM de
tipo financiero. Este asistente proporciona ayuda al usuario para diseñar tal
dimensión. Se detalla a continuación (véase la sección Enriquecer el
funcionamiento de la base de datos SSAS - Asistente Business Intelligence en este
capítulo).

 Definir la inteligencia de las dimensiones:

Este asistente ayuda al usuario a realizar las asignaciones entre los tipos de
dimensiones y los atributos definidos en SSAS y sus dimensiones y atributos.
Actualmente sólo los tipos Time, Currency y Account son oficialmente útiles. Crear
otras asociaciones puede ser interesante si están reconocidas en las aplicaciones
cliente, por ejemplo desarrollos específicos...

 Especificar un operador unario:

ShareVideos
SSAS permite definir fórmulas de agregación gracias al operador unario. Definido
en cada miembro de una dimensión, el operador unario indica si este miembro se
añade o sustrae, para obtener la agregación de su nivel padre. El asistente ayuda
simplemente a definir la columna que describe el operador unario (véase la sección
la sección Enriquecer el funcionamiento de la base de datos SSAS - Asistente
Business Intelligence en este capítulo).

 Crear una fórmula de miembro personalizada:

De forma complementaria a la inteligencia de cuentas y al operador unario, las


dimensiones SSAS tienen una propiedad CustomRollupColumn, que permite
asignar nombre a una columna en la tabla de dimensión. Es posible sustituir esta
columna por expresiones MDX. El miembro de la dimensión se evaluará entonces
usando expresiones MDX en lugar de la agregación clásica. Este asistente permite
simplemente enlazar la propiedad con la columna (véase la sección la sección
Enriquecer el funcionamiento de la base de datos SSAS - Asistente Business
Intelligence en este capítulo).

 Especificar el orden de los atributos:

Este asistente tiene como objetivo definir el orden de los miembros de los atributos
de una dimensión. Consiste en definir las propiedades OrderBy y OrderByAttribute
de los atributos de la dimensión.

 Definir el comportamiento semiaditivo:

Este asistente, accesible únicamente desde el editor del cubo, permite simplemente
escoger para cada medida la función de agregación, y que sea semiaditiva o no.

 Definir la conversión monetaria:

Este asistente, accesible únicamente desde el editor del cubo, permite implementar
una conversión dinámica de divisa de los importes comprendidos en la tabla de
hechos y también en las dimensiones. El objetivo es mostrar al usuario final un
importe en otra divisa distinta a la que se ha usado para almacenar los datos en el
DW (véase la sección Enriquecer el funcionamiento de la base de datos SSAS -
Asistente Business Intelligence en este capítulo).

El principal interés de los asistentes de BI es ilustrarnos acerca de las propiedades y las


modelizaciones que, a menudo, son poco conocidas y poco utilizadas. Una vez hayamos asimilado
el principio, es más fácil responder a las necesidades sin tener que pasar por el asistente.

ShareVideos
a. Ejecutar el asistente Time Intelligence

Es interesante seguir el funcionamiento de este asistente para estudiar el modelo propuesto


y las fórmulas MDX dedicadas a la manipulación de los periodos.

El asistente no puede funcionar si no existe al menos una dimensión de tipo temporal y sus
atributos están tipados.

La primera etapa permite seleccionar una jerarquía en la dimensión y las fórmulas que se
quiere añadir al cubo.

La segunda etapa consiste en seleccionar las medidas a las que se quiere aplicar las
fórmulas.

Por último, validamos.

El asistente ha hecho las siguientes operaciones:

 Añade a la tabla de dimensión, en la vista de origen de datos, una columna


calculada que contiene una constante: N’Actual Date’. Esta columna se llama
Calendar Date Cálculos done Calendar es el nombre de la jerarquía y Date el
nombre de la dimensión.

Se crea una columna tras cada ejecución del asistente, lo cual no tiene sentido alguno: con una
columna es suficiente. Si se ejecuta varias veces el asistente para la misma jerarquía, aparece un
valor autoincrementado en el nombre (ej: Calendar 2 Date Cálculos).

El valor N’Actual Date’ debería considerarse más bien como N’Valor real’, por ejemplo.

 Ha creado un atributo con el mismo nombre, Calendar Date Cálculos, en la


dimensión ligada a la nueva columna. Este atributo contiene un solo miembro (la
columna no toma más que un valor). Constituye una jerarquía de atributo
(AttributeHierarchyEnabled a True) que no forma parte de la agregación
(IsAggregatable está a False) y tiene por tanto obligatoriamente un valor por
defecto: el miembro único.

ShareVideos
 Ha creado para cada fórmula seleccionada un miembro calculado sobre la nueva
jerarquía de atributo. Este miembro calculado tiene la expresión ’NA’ por No
Asignado. Es el valor por defecto de la nueva medida, que se devolverá cuando no
tenga sentido aplicarla.

 Por último, los comandos de script se han generado para poder definir la fórmula en
el ámbito (SCOPE) de las medidas seleccionadas.

Por ejemplo, para el Valor anual hasta la fecha (en inglés Year To Date):

Scope(
{
[Measures].[Internet Order Quantity],
[Measures].[Sales Amount Quota]
}
) ;

// Valor anual hasta la fecha


(
[Date].[Fiscal Date Cálculos].[Valor anual hasta la fecha],
[Date].[Fiscal Year].[Fiscal Year].Members,
[Date].[Date].Members
)

Aggregate(
{ [Date].[Fiscal Date Calculs].[Actual Date] }
*
PeriodsToDate(
[Date].[Fiscal].[Fiscal Year],
[Date].[Fiscal].CurrentMember
)
) ;
End Scope ;

Este script se explica de la siguiente manera:

 La instrucción Scope define el ámbito, un subcubo, sobre el que se aplicarán las


instrucciones siguientes, hasta la instrucción End Scope.

Esto significa en concreto que sobre las demás medidas no se aplicará el cálculo y
por tanto el nuevo miembro calculado devolverá el valor ’NA’.

 La tupla en la parte izquierda del signo igual define un nuevo subcubo, en el interior
del primero. Esta vez el perímetro está restringido al miembro calculado, a los años
del calendario, y a las fechas. Esto significa que la expresión a la derecha se
evaluará solamente en estos cruces.

ShareVideos
 La expresión en la parte derecha del signo igual solicita una agregación de todos los
periodos desde el comienzo del año hasta la fecha en curso. Dado que no se ha
especificado ninguna medida esta agregación se realiza sobre la medida en curso.
La función Aggregate permite usar la función de agregación definida sobre esta
medida.

El miembro único del nuevo atributo de dimensión creado por el asistente se usa
aquí para crear un producto con el conjunto de los periodos devueltos.

Existen varias formas de escribir este script, si bien es cierto que el script implementado por el
asistente no es el que un desarrollador, incluso partiendo de las mismas condiciones, hubiera
escrito. En efecto éste último hubiera preferido, por ejemplo, la función YTD (Year To Date) frente
a PeriodsToDate que es más genérica.

Ejecute el asistente y estudie las fórmulas generadas para los otros miembros calculados.

Un vistazo a la pestaña Examinador del cubo permite comprender la potencia de este


modelo. La fecha actual presenta los valores del cubo mientras que la expresión calculada
muestra un valor acumulado. Una única fórmula aplica a varias medidas y los miembros
creados pueden combinarse fácilmente con la dimensión en la que aparecen.

Recuede que la etiqueta ’Actual date’ tiene más bien el sentido de ’Valor’ o ’Valor real’.

Considere este asistente como un tutorial. En efecto, el uso práctico de esta funcionalidad pasa
por realizar sus propios desarrollos. Por otro lado, está limitado al cálculo sobre las fechas,
mientras que es posible implementar esta técnica sobre otro tipo de dimensión.

b. Definir la inteligencia de cuentas

Cada miembro de una dimensión de plan contable representa un tipo de datos que puede o
no estar agregado en función de reglas de negocio. El tipo de agregación ByAccount
(Cuenta), disponible en la edición Entreprise, proporciona el borrador para diseñar una
solución propia que a menudo tendremos que completar con fórmulas MDX adaptadas al
caso que estamos modelando.

ShareVideos
Esta sección ya parte de una traducción errónea. De hecho ByAccount se traduce como Cuenta,
que puede confundirse con Recuento, la traducción española de plan contable (Chart of Accounts)
es Gráfico de cuentas.

El principio es el siguiente:

 Se crea la dimensión Plan contable de tipo Account. La jerarquía principal del plan
contable debe poseer el tipo Account. El atributo número de cuenta debe poseer el
tipo Account Number.

Las dimensiones padre-hijo están mejor adaptadas.

 Esta dimensión debe contener a su vez un atributo Tipo de cuenta, que identifique
para cada cuenta el tipo a que estará asociado mediante una regla de agregación. La
propiedad Tipo de cuenta debe ser de tipo Account Type.
 La última etapa consiste en enlazar los tipos de cuenta con los que aparecen
predefinidos en SSAS (Asset, Balance, Expense, Flow, Liability, Income,
Statistical) e indicar una función de agregación.

El Asistente de inteligencia de cuentas permite hacer el enlace entre sus tipos de cuenta y aquellos
predefinidos, pero no el enlace con la función de agregación. Lo encontrará en las propiedades de
la base de datos accesibles en la opción del menú contextual Editar base de datos sobre la base de
datos en el Explorador de soluciones.

La experiencia muestra que esta funcionalidad no cubre más que una parte de la problemática
contable que será preciso completar con el operador unario y el desarrollo de expresiones MDX.

c. Especificar un operador unario

El asistente sólo permite asignar la propiedad UnaryOperatorColumn de una jerarquía.


Generalmente esta propiedad se usa con una jerarquía de tipo padre-hijo.

El principio es sencillo. Una columna de la tabla de dimensión contiene un código donde el


significado está predefinido por SSAS y se llama Operador unario (Unary Operator). Este
código se usa para construir la función de agregación del miembro padre, siguiendo las
reglas definidas:

ShareVideos
Operador
Regla
unario
+ El valor del miembro se suma.
- El valor del miembro se sustrae.
El valor del miembro se usa para multiplicar el agregado constituido
*
por los miembros precedentes.
El valor del miembro se usa para dividir el agregado constituido por
/
los miembros precedentes.
~ El valor del miembro se ignora.
El valor numérico se usa para ponderar el valor del miembro. Se
Valor
suma el valor del miembro multiplicado por el valor del operador
numérico
unario.

La prueba de la dimensión creada en el examinador permite visualizar gráficamente el operador


unario de cada miembro. En la captura de pantalla siguiente, el ingreso neto es igual al margen,
más los demás ingresos, menos los impuestos.

d. Crear una fórmula de miembro personalizado

La propiedad CustomRollupColumn de un atributo de dimensión permite reemplazar el


valor del atributo calculado por el motor de agregación por un cálculo definido mediante
una expresión MDX.

Esta opción se usa en raras ocasiones. Generalmente se adapta mejor el uso de un script de
comandos.

Esta funcionalidad se ilustra en los atributos padre-hijo Accounts de la dimensión Account


del cubo Adventure Works, como muestra esta extracción de la tabla DimAccount:

AccountKey AccountDescription AccountType Operator CustomMembers


50 Net Sales Revenue + NULL
51 Gross Sales Revenue + NULL
Returns and
53 Expenditures - NULL
Adjustments
96 Headcount Balances ~ NULL
97 Units Flow ~ NULL
[Account].[Accounts].
98 Average Unit Price Balances ~
[Account Level

ShareVideos
AccountKey AccountDescription AccountType Operator CustomMembers
04].&[50]/[Account]
[Accounts].[Account
Level 02].&[97]

El precio unitario promedio (Average Unit Price) es igual al cociente de la clave 50, las
ventas netas (Net Sales), entre la clave 97, las unidades (Unit). Precio unitario promedio =
Ventas netas / unidades.

El asistente no permite asignar una columna a la propiedad CustomRollupPropertiesColumn. Se


usa para definir propiedades de visualización de la expresión calculada por una lista separada por
comas (por ejemplo: FORE_COLOR=’255’,FORMAT_STRING=’Currency’).

e. Definir la conversión de moneda

El asistente de conversión de moneda es una funcionalidad que parece reservada a la edición


Entreprise de SSAS.

Para visualizar los datos en distintas divisas es preciso operar con conversiones, a menudo
complejas. Parece lógico efectuar estas conversiones en el momento de ejecutar la consulta.

Es práctico almacenar en el DW los importes en una divisa única, para poder agruparlos sin
problemas. El inconveniente es que los importes que se muestran en la divisa de origen serán los
importes convertidos y presentarán una ligera desviación respecto a los importes de origen.

El asistente permite gestionar el caso en que se almacenen varias divisas llamadas divisas
locales o de origen (Source Currency) y se mostrarán en una divisa llamada divisa de
destino. La conversión pasa naturalmente por una divisa intermedia: la divisa pivote.

Para usar el asistente deben cumplirse ciertos prerrequisitos:

 Debe existir una dimensión de tipo Currency en el cubo. El atributo clave no debe
tener la propiedad IsAggregatable a Falso. Uno de los atributos debe ser de tipo
CurrencyName.
 Debe existir una dimensión de tipo Time en el cubo, con sus atributos igualmente
tipados.
 Una tabla de hechos define la tasa de conversión por periodo entre la divisa pivote y
las demás divisas. Esta tabla contiene, en teoría, la clave de la dimensión de las
divisas, una clave con la dimensión tiempo (por ejemplo con el atributo fecha) y una
tasa de conversión entre la divisa pivote y la divisa referenciada por la clave.

ShareVideos
El ejemplo Adventure Works proporciona dos tasas distintas: la tasa media (Average Rate) y la tasa
de cierre de la jornada (End of day Rate).

 Es preciso crear un grupo de medidas para la tabla de hechos con una función de
agregación apropiada para la tasa de conversión. Se aconseja cambiar el tipo de este
grupo de medidas a ExchangeRate.

Las tasas son medidas semiaditivas, y por tanto reservadas a la edición Entreprise de SSAS. En el
ejemplo Adventure Works, la función de tasa promedio es AverageOfChildren y la función de tasa
de cierre es LastNonEmpty.

El asistente permite gestionar los tres casos posibles de conversión:

 Varios a varios: los hechos se almacenan en varias divisas locales, y pueden


convertirse a varias divisas de destino.
 Varios a uno: los hechos se almacenan en varias divisas locales, y se convierten a
una única divisa de destino.
 Uno a varios: los hechos se almacenan en una divisa y se convierten a varias
divisas.

Igual que con la dimensión Tiempo, pruebe este asistente para ver si responde a su caso concreto,
y estudie la manera de adaptarlo a su problemática. Una vez domine bien la solución propuesta
por el asistente, es posible adaptarlo a su propio caso o escoger otra modelización. Exiten de
hecho otras formas de gestionar las divisas.

Un punto interesante a estudiar con atención en el comando de script generado por el asistente es
el uso, mediante la función MDX LinkMember, de una dimensión de reporting que no esté ligada a
ningún grupo de medida.

7. Objetos vinculados

SSAS permite agregar a nuestra base de datos dimensiones vinculadas y grupos de medidas
vinculados. El objetivo es integrar en nuestra base de datos un grupo de medidas o una
dimensión que ya existan en otra base de datos SSAS, o incluso en la misma (en el caso de
los grupos de medidas).

ShareVideos
Esta operación puede realizarse de varias formas, entre ellas haciendo clic en el botón
Nuevo objeto vinculado de la barra de botones del editor del cubo en el estudio de
desarrollo.

El principio es muy simple: tenemos que definir un origen de datos que apunte a la base de
datos SSAS, a menos que escojamos la base de datos activa. A continuación, los objetos
seleccionados se integran en nuestro proyecto como enlaces hacia el origen.

El enlace se comporta como un proxy: envía las consultas al origen y cachea las respuestas
a las consultas para evitar tener que solicitar varias veces la misma información resultado
de la misma consulta.

El objeto vinculado se comporta como un objeto normal a excepción de que:

 La mayor parte de las propiedades del objeto no son editables.


 Cuando importamos un grupo de medidas vinculado y una dimensión vinculada, la
relación definida en el uso de las dimensiones se importa igualmente y no es posible
modificarla.

8. Reescritura (Writeback)

Si el cubo está dedicado principalmente a la lectura de información, es posible agregar


algunas funcionalidades de escritura en las dimensiones y en los grupos de medidas.

SSAS sigue siendo una herramienta de consulta. La escritura debería limitarse al uso restringido de
pocos usuarios, evitando accesos concurrentes sobre la misma celda.

a. Dimensión en reescritura

El principio consiste en permitir a ciertos usuarios agregar o modificar los miembros de la


dimensión a través de la interfaz de cliente. Esta funcionalidad se extiende a las jerarquías
de tipo padre-hijo para desplazar los miembros o cambiar su orden. Las modificaciones
efectuadas se reflejan automáticamente en la tabla de dimensión.

Para ello, basta con modificar la propiedad WriteEnabled de la dimensión y, a


continuación, procesarla. La dimensión debe estar constituida por una sola tabla (sin
esquema en copo de nieve) y no puede tener definido ningún atributo con la propiedad
NameColumn definida.

A continuación, use la opción de Recorrer la dimensión en SSMS o la pestaña Examinador


en el editor de dimensiones de BIDS, un botón en la barra de herramientas Reescritura
permite activar la escritura del lado del cliente. El menú contextual proporciona la
funcionalidad de escritura.

ShareVideos
b. Grupo de medidas en reescritura

Configurar un grupo de medidas en modo reescritura supone la creación de una partición


dedicada, de modo que las modificaciones introducidas manualmente en las celdas
existentes se registran en esta partición. La restricción es que todas las medidas del grupo
de medidas deben definirse con la función de agregación Suma (Sum).

La reescritura puede activarse para un grupo de medidas en la pestaña Particiones del editor
de cubos. Haga clic en una partición del grupo de medidas y seleccione Parámetros de
reescritura.

No obstante SSAS autoriza la escritura sobre una partición de escritura de tipo MOLAP. Dé
preferencia a esta opción.

Generalmente esta funcionalidad se administra en producción mediante SSMS. En el


explorador de objetos, las particiones de reescritura se encuentran en el interior del cubo, en
el grupo de medidas, en la pestaña Reescritura. El administrador puede Deshabilitar
reescritura o Convertir en partición.

Deshabilitar reescritura suprime la partición de reescritura. Los datos se conservan en una


tabla de la base de datos de origen, pero se borran del cubo.

La tabla de reescritura en el origen se encarga de almacenar las diferencias. Por ejemplo, si la


partición en sólo lectura muestra un 10 y el usuario introduce un 9, la tabla de reescritura
almacena un -1.

Convertir en partición inicia la conversión de la partición de reescritura en una partición


normal de sólo lectura con valores agregados.

Para usar esta funcionalidad, necesita usar una aplicación de BI cliente que soporte esta
característica, o tendrá que desarrollarla. Esta funcionalidad está completamente integrada
en Excel 2010, a través del Análisis de hipótesis en las Herramientas de tabla dinámica.

Cuando se realiza una modificación sobre un valor agregado, se desglosa en los valores
detallados. La Configuración del Análisis de hipótesis permiten escoger el método de
desglose.

ShareVideos
Roles de seguridad
La gestión de la seguridad de acceso a los datos de la base de datos OLAP pasa por la
creación de roles de la base de datos en el estudio de desarrollo (BIDS) o en el estudio de
gestión (SSMS). Otorgan permisos sobre los objetos del UDM a usuarios o grupos de
Windows.

Además de los roles de base de datos, SSAS define un rol de administrador del servidor que
no puede borrarse y es accesible mediante las propiedades del servidor, página Seguridad,
en SSMS. Este rol permite definir los usuario o grupos de Windows que tendrán permisos
de administración sobre la instancia SSAS.

En el estudio de desarrollo, el editor de roles permite definir el rol gracias a sus múltiples
pestañas:

 General: se usa para definir el nombre del rol, su descripción y las autorizaciones
sobre la base de datos. Las autorizaciones son:
o Control total (Administrador): para otorgar permisos de administración de la
base de datos SSAS. Esta autorización otorga todos los permisos sobre la
base de datos, incluidos los datos. Cuando un rol posee este nivel de
autorización las demás pestañas, que permiten definir autorizaciones
concretas, se desactivan en el editor de roles.
o Procesar base de datos: para otorgar permisos para procesar la base de datos
así como sus objetos. No proporciona ningún permiso de lectura sobre los
datos.
o Leer definición: para otorgar el derecho de leer los metadatos de la base de
datos, sin proporcionar permiso alguno sobre los datos.

El nombre no puede modificarse en esta pestaña. Es preciso modificarlo directamente en el


Explorador de soluciones.

 Pertenencia: permite gestionar la pertenencia al rol de usuarios y grupos de


Windows.

Las suscripciones normalmente son una tarea de administración en SSMS.

 Orígenes de datos: para cada origen de datos, el rol puede tener permisos de acceso
de lectura y permisos para leer la definición. Es útil únicamente en el marco del data
mining.
 Cubos: indispensable para otorgar permisos de acceso de lectura al cubo. Permite a
su vez definir los permisos de escritura (véase la sección Reescritura (Writeback)),
de extracción (Drillthrough) de creación de cubos locales y de procesamiento del
cubo.

ShareVideos
Por defecto, la suscripción hereda los derechos de lectura sobre las dimensiones del cubo.
Esta herencia puede desactivarse en la pestaña Dimensiones.

 Datos de celdas: permite restringir los permisos de acceso a un subconjunto de los


datos del cubo. La pantalla permite introducir tres expresiones MDX que definen
cada uno de los perímetros de seguridad según tomen el valor Verdadero o Falso:
o Habilitar permisos de lectura: como su propio nombre indica permite
bloquear la lectura de ciertas celdas. Para una celda prohibida, la consulta
devuelve #N/A.
o Habilitar permisos de contingente de lectura: una celda que sea la
agregación de varias celdas "hijas" hereda automáticamente los permisos de
lectura si todas las celdas "hijas" tienen este permiso activado. Por ejemplo,
el usuario que no vea la región España con la opción anterior pero sí vea
todas las provincias españolas, verá la región España si se marca esta
opción.
o Habilitar permisos de lectura o escritura: permite otorgar permisos de
escritura en un perímetro restringido.

Un hiperenlace en la parte superior de esta pestaña permite probar la seguridad del cubo.

 Dimensiones: permite dar acceso en modo lectura a la dimensión. Permite a su vez


definir permisos de reescritura (véase sección Reescritura (Writeback)) y de
procesamiento del cubo.
 Datos de dimensiones: permite autorizar o revocar el acceso a ciertos miembros de
una jerarquía de atributo según dos políticas. La primera define una lista de
miembros prohibidos, los nuevos miembros serán autorizados sistemáticamente. La
segunda consiste en definir una lista de miembros autorizadas, a los nuevos
miembros se les denegará el acceso sistemáticamente. Puede definirse una
seguridad avanzada mediante tres expresiones MDX: conjunto de miembros
permitido, conjunto de miembros denegado y miembro predeterminado (necesario
cuando el miembro por defecto de origen se rechaza).

En muchos casos se plantea la duda entre autorizaciones sobre los datos de las celdas y los
datos de la dimensión. Si bien ambas opciones pueden parecer similares, no se comportan
del mismo modo. Pruebe y seleccione aquélla que mejor se adapte a su problemática.

 Estructuras de minería de datos: reservada al data mining...

En ciertos casos es teóricamente necesario crear cientos de roles. Esta situación es difícil de
gestionar y administrar. SSAS permite implementar soluciones llamadas de seguridad
dinámica basadas generalmente en el uso de la función MDX USER_NAME() en las
expresiones MDX de un único rol. La expresión MDX puede basarse sobre un grupo de

ShareVideos
medidas dedicado a la definición de permisos o sobre la llamada a un ensamblado
dedicado.

Un usuario que esté ligado a varios roles posee el acumulado de los permisos de sus
distintos roles. No obstante, es posible limitar los permisos a los de uno de sus roles
concretos especificándolo en la cadena de conexión a través del parámetro Roles.

De hecho, el rol no contiene más que un nombre y la lista de sus suscripciones. Toda la
información de seguridad se almacena en otros objetos del cubo, aunque se definan en la
interfaz a nivel de rol.

Almacenamiento y particiones
Igual que para las tablas de la base de datos SQL, SSAS tiene una funcionalidad de
particionamiento de grupos de medidas, accesible únicamente en la edición Entreprise. Con
SQL el particionamiento puede considerarse como una opción que va a jugar un papel
importante en el rendimiento, y en la facilidad de gestión. Con SSAS, el particionamiento
es necesario si el procesamiento de un grupo de medidas puede consumir muchos recursos
de memoria debido a volumetrías importantes.

Lo más sencillo es adoptar la misma estrategia de particionamiento en SSAS que para las tablas
SQL subyacentes. Aun así hay que considerar que más allá de los 100 millones de registros por
grupo de medidas el particionamiento es indispensable, si bien esto depende del número de
parámetros.

El particionamiento (la volumetría) es prácticamente la única razón que plantea el uso de la


edición Entreprise de SSAS. Prácticamente todas las otras funcionalidades de la versión Entreprise
pueden realizarse con desarrollos en la versión Standard sobre volumetrías pequeñas.

Más allá de la filosofía "divide y vencerás", las particiones SSAS, igual que las particiones
SQL, tienen cada una su propia configuración que permite afinar el rendimiento sobre cada
funcionalidad del cubo.

La gestión de las particiones es esencialmente una tarea de gestión de producción que se realiza
en SSMS gracias al Explorador de objetos.

ShareVideos
1. Particiones

Por defecto, todo grupo de medidas está constituido por una partición. Trabajar con
particiones consiste en limitar el perímetro de la primera partición, y agregar otras
particiones sobre perímetros distintos.

Si dos particiones tratan datos en común, estos datos serán contabilizados dos veces, lo cual no es
deseable.

El perímetro de una partición SSAS se define bien por una tabla de la vista del origen de
datos, bien por una consulta.

La primera opción no parece muy práctica. Es preferible la segunda: uso de consultas. Cuando
todas las particiones tienen como origen la misma consulta sobre la misma tabla, debe comenzar
por la creación de la primera mediante una consulta filtrada.

Siempre es práctico escoger, si es posible, un criterio (Slicer) de particionamiento


correspondiente a una dimensión, generalmente la dimensión Tiempo, aunque si escoge un
almacenamiento MOLAP no es obligatorio.

Una partición se caracteriza en primer lugar por su configuración de almacenamiento, en


segundo lugar por su función de agregación y en tercer lugar por su estrategia de
procesamiento.

2. Modos de almacenamiento

SSAS proporciona cuatro modos de almacenamiento:

 MOLAP: OLAP multidimensional, almacena tanto los datos como los valores
agregados en una estructura multidimensional. Como consecuencia, las consultas
presentan un mejor rendimiento aunque el procesado de la partición es un proceso
pesado y que consume muchos recursos.
 ROLAP: OLAP relacional, almacena tanto los datos como los valores agregados en
la base de datos relacional. Es muy lento a la hora de responder a las consultas,
aunque su procesamiento es muy liviano.
 HOLAP: OLAP híbrido, almacena los datos en la base de datos relacional de origen
y los valores agregados en una estructura multidimensional. Supone un compromiso
entre el MOLAP y el ROLAP, aunque por desgracia tiene poco interés y no se usa
muy a menudo.
 InMemory: este nuevo método de almacenamiento que se proporciona al
desarrollador se reserva al uso de PowerPivot. Seleccionar este modo supone un
error.

ShareVideos
El objetivo principal de la capa OLAP es procurar buenos tiempos de respuesta a las consultas. El
MOLAP se usa, por tanto, en la mayoría de los casos. El ROLAP se usa cuando se desea obtener
información en tiempo real sobre volúmenes de información pequeños.

El modo de almacenamiento se define muy fácilmente en el estudio de desarrollo


modificando la propiedad StorageMode de la partición.

Por el contrario, no es tan evidente realizar esta operación en SSMS. Para seleccionar uno
de los tres modos de almacenamiento en SSMS, es preciso abrir las propiedades de la
partición, ir a continuación a la página Almacenamiento en caché automático y hacer clic
en el botón Opciones encima de Anular. El modo de almacenamiento se modifica gracias a
la lista desplegable en la parte superior de la ventana Opciones de almacenamiento.

La página Almacenamiento en caché automático de SSMS es la réplica exacta de los parámetros de


almacenamiento del estudio de desarrollo. Es fácil confundirse. Distinga bien el modo de
almacenamiento del procesamiento de la partición. Es habitual crear particiones sin
almacenamiento en caché automático que poseen no obstante parámetros de almacenamiento. El
almacenamiento en caché automático es una forma de procesar la partición. Las secciones
siguientes de este capítulo abordan este asunto.

3. Diseño de la agregación

Una agregación es un conjunto de datos que calcula y almacena la agregación


correspondiente a un grupo de medidas en un archivo, para evitar al motor OLAP
calcularlos en tiempo de ejecución de la consulta. La agregación es la clave del rendimiento
del cubo, y se basa en un diseño adecuado y eficaz de las dimensiones.

El trabajo de diseño de las agregaciones empieza en el momento del desarrollo en BIDS


una vez se ha estabilizado el cubo, y continúa durante todo el ciclo de vida del cubo en
producción en SSMS para optimizarlo.

a. Diseñar una agregación

En BIDS, el diseño de una agregación (Aggregation Design) se puede iniciar desde la


pestaña Agregaciones en el editor del cubo seleccionando el botón Diseñar agregaciones en
la barra de herramientas.

ShareVideos
En SSMS puede iniciarse desde el Explorador de objetos mediante la opción Diseñar
agregaciones del menú contextual de las particiones.

Cuando existen varias particiones en el grupo de medidas, la primera etapa consiste en


seleccionar la lista de particiones que adoptarán el diseño de la agregación creada. Es
importante seleccionar un grupo homogéneo de la partición. Por ejemplo, las particiones
que correspondan con datos antiguos, poco consultadas, no necesitarán muchas
agregaciones, al contrario que los datos más recientes.

Puede seleccionar una única partición y a continuación aplicar el diseño creado a otras mediante la
opción de menú Asignar diseño de agregaciones. Por defecto, un diseño afecta como mínimo a
una partición. Es posible que algún diseño no se encuentre asignado a ninguna partición o, a la
inversa, que una partición no tenga ningún diseño de agregación.

La siguiente etapa permite revisar el uso de la agregación. Presenta en una página un


resumen completo del conjunto de propiedades AggregationUsage de las jerarquías de
atributos del cubo.

Esta propiedad puede tomar cuatro valores:

 Full: indica que las agregaciones generadas considerarán sistemáticamente este


atributo. Use esta opción con precaución en aquellos casos donde el atributo se use
en el 90% de las consultas.
 None: a la inversa, el atributo nunca será tomado en cuenta por las agregaciones. Es
una opción interesante pues permite al motor de agregaciones descongestionarse de
estos atributos y tener un rendimiento mejor sobre los demás.
 Unrestricted: deja al asistente de diseño de la agregación que construya las
agregaciones a su modo, es decir entre Full y None.
 Default: esta opción asocia a los atributos clave y a los atributos usados en las
jerarquías de reporting la opción Unrestricted. Los atributos de las dimensiones
usadas en las relaciones de varios a varios y de referencia no materializada se
tratarán con la opción None. Todos los que no tengan un miembro All
(IsAggregatable a Falso) usarán la opción Full.

En la etapa siguiente, el diseñador de agregaciones especifica el número de hechos en la


tabla de hechos y la partición así como el número de miembros en la jerarquía de atributo
de la dimensión. De nuevo esta información se basa en propiedades de los grupos de
medidas, particiones y atributos de dimensión. Se centralizan aquí en una pantalla sintética.

ShareVideos
El número de miembros de un atributo de dimensión en la partición no puede informarse en esta
pantalla. Es importante hacerlo, especialmente para aquellos atributos de la dimensión usada
como criterio de particionamiento y, en general, para los de la dimensión de tiempo.

Esta información es capital para que SSAS construya valores agregados correctos. Es útil
actualizarla regularmente en producción. Podemos usar el botón Recuento para contar las
líneas en el origen, aunque esta operación puede volverse increíblemente lenta cuando se
trata de grandes volumetrías.

Recuento no borra los valores informados. Es preciso suprimirlos uno a uno.

La última etapa consiste en Definir las opciones de la agregación. Se trata de solicitar al


motor SSAS que cree el diseño de la agregación en función de los parámetros introducidos
anteriormente. El objetivo es encontrar un punto de equilibrio entre crear todas las
agregaciones posibles haciendo el producto cartesiano de los miembros de las dimensiones
y no crear ninguna agregación. SSAS nos propone alcanzar un compromiso entre ganancia
de rendimiento, medido en %, y el almacenamiento estimado usado por las agregaciones.

100% de ganancia de rendimiento se corresponde con el máximo que puede aportar SSAS
con las agregaciones. 0% se corresponde con no crear ninguna agregación.

Diseñar las agregaciones es una operación que puede tomar su tiempo en SSAS puesto que
tiene que tener en cuenta un número elevado de combinaciones posibles. El botón Iniciar (o
Continuar) permite iniciar el diseño. Durante su creación, el gráfico se actualiza
presentando la ganancia de rendimiento en el eje de ordenadas frente al almacenamiento
estimado en el eje de abscisas.

Existen tres opciones que permiten condicionar la detención del procesamiento:

 El espacio de Almacenamiento estimado se agota: el diseño se detiene


automáticamente más allá de un límite en el espacio de almacenamiento calculado.
 La Ganancia de rendimiento se supera: el diseño se detiene automáticamente por
encima de un límite en la ganancia de rendimiento calculada.
 Haré clic en Detener: el usuario interrumpe el diseño.

La estrategia correcta que se debe adoptar varía según el desarrollo del cubo. Partir de una
ganancia inicial del 30% es prudente. Puede descender hasta un 10% para alcanzar un margen
mayor, cuando los usuarios reclaman mejores rendimientos...

ShareVideos
El Asistente para diseñar agregaciones finaliza con la elección del nombre para el diseño de
la agregación.

b. Optimización basada en el uso

Para afinar el diseño de las agregaciones creadas y desplegadas en producción, SSAS


proporciona una herramienta que toma en cuenta la actividad real de los usuarios del cubo.
Su funcionamiento es sencillo: se registra una muestra de la actividad en un registro (Query
Log) en el ámbito del servidor. El motor de diseño de agregaciones lee este registro y
deduce los pesos relativos de cada agregación que, junto a los parámetros que hemos
expuesto en la sección anterior, permiten realizar de forma más precisa un nuevo diseño de
la agregación.

El primer paso consiste en iniciar el registro de la actividad en una tabla de una base de
datos SQL. Esta operación se define en las propiedades del servidor SSAS, desde SSMS.
Existen cuatro propiedades para ello:

 QueryLogConnectionString: cadena de conexión a la base de datos SQL para


registrar la actividad. El registro se almacenará en una tabla de la base de datos
indicada. Es esta propiedad la que, una vez informada, inicia el registro de
información.
 CreateQueryLogTable: informar a True esta propiedad permite crear la tabla
dedicada (a condición de que la cuenta del servidor SSAS tenga los permisos
necesarios sobre el servidor SQL) o usar una tabla existente.
 QueryLogSampling: define la frecuencia de muestreo. El valor por defecto, 10,
significa que se almacenará una de cada 10 consultas.
 QueryLogTable: define el nombre de la tabla dedicada.

Preste especial atención pues a menudo existen dos tipos de aplicaciones BI: aplicaciones estáticas
como SSRS y aplicaciones dinámicas como Excel. Una aplicación dinámica corre el riesgo de
generar un número de consultas muy elevado si cada acción del usuario provoca una actualización
de los datos. En este caso tomará un peso desproporcionado a la hora de realizar su registro
respecto a la actividad estática, mientras que la actividad dinámica en teoría no debería
representar más que una pequeña parte de la actividad total.

Registro de una consulta de cada 10 en la tabla OlapQueryLog

El registro de consultas (Query Log) no registra más que la información útil a la hora de diseñar la
agregación. No tiene nada que ver con el FlightRecorder que guarda una traza mucho más
detallada y completa de la actividad, explotable por SQL Server Profile, y que le permitirá

ShareVideos
encontrar las últimas consultas ejecutadas, especialmente aquellas que han producido un error
grave.

Una vez registrada la actividad, es preciso dejar a los usuarios trabajar durante un periodo
de tiempo significativo. Al final de este periodo, el asistente Optimización basada en el
uso... puede lanzarse desde SSMS mediante el menú contextual de las particiones.

La primera etapa consiste en filtrar la información registrada que queremos tomar en cuenta
para ejecutar el asistente. Este filtro marca un periodo, una lista de usuarios y un porcentaje
de consultas más frecuentes. Un porcentaje menor favorecerá a las consultas menos
frecuentes.

La etapa siguiente muestra las agregaciones filtradas según la selección anterior y permite
al usuario deseleccionar aquello que no le parezca pertinente.

Por último, las etapas siguientes son las mismas que las del Asistente de diseño de
agregaciones clásico.

Al final de la ejecución SSAS habrá generado un nuevo diseño de agregación que


podremos aplicar a otras particiones del grupo de medidas.

Con las herramientas estándar es posible crear o suprimir un diseño de agregación, pero no
modificarlo.

4. Procesamiento

Procesar (en inglés Process) un objeto de la base de datos SSAS significa que se actualizará
a partir de los datos de origen. En el caso de una dimensión, se leen los datos de origen para
actualizar la dimensión SSAS. En el caso de un cubo, se leen los datos de origen para
actualizar los datos atómicos del cubo así como sus valores agregados.

Para más información sobre las operaciones de procesamiento remítase al capítulo Crear el
cubo.

Existen tres formas de actualizar los objetos de la base SSAS:

 Iniciar una operación de procesamiento

La ejecución manual o mediante programación de una operación de procesamiento


es la solución que se adopta generalmente. En una arquitectura clásica de BI, la

ShareVideos
alimentación del DW o del DM de origen del cubo se hace de manera puntual
mediante un proceso automático llamado ETL. El cubo puede entonces actualizarse
al final de este proceso.

El procesamiento puede iniciarse muy fácilmente mediante SSMS, SSIS o .NET.


SSMS puede a su vez generar un script de procesamiento que podemos usar con
alguna herramienta cliente que use comandos XMLA.

 Almacenamiento en caché automático

El Almacenamiento en caché automático permite dejar que el motor SSAS asegure


la actualización de la partición, a través de un conjunto de mecanismos y
configuraciones.

Almacenamiento en caché automático y OLAP en tiempo real son dos conceptos diferentes que a
menudo se confunden. Es posible llegar a tener un tiempo real con SSAS sin Almacenamiento en
caché automático, o recíprocamente usar el Almacenamiento en caché automático para una
actualización diaria.

Dé preferencia a esta solución cuando el origen sea una fuente de datos operacional y
transaccional.

 Empujar los datos

Igual que es posible insertar filas en una tabla SQL, es posible escribir en una
dimensión o en una partición. Esta funcionalidad, poco usada, tiene su interés en
escenarios de tiempo real para evitar tener que crear una base de datos
desnormalizada. En efecto, el DM y el grupo de medidas son redundantes.

Empujar los datos puede hacerse con SSIS, que tiene en su edición Entreprise los
componentes necesarios.

Para diseñar una arquitectura correcta de base de datos SSAS, hay que tener en cuenta la
noción de latencia de los datos. La latencia califica el tiempo que tarda un dato del sistema
transaccional en estar disponible en el sistema decisional. Cuanto menor sea la latencia, la
base de datos SSAS estará más cerca del tiempo real.

Si hay alguna etapa intermedia entre la base de datos SSAS y los datos operacionales, la noción de
latencia se desvirtúa. Si la base de datos intermedia se actualiza diariamente a primera hora del
día es inútil definir una baja latencia para alimentar la base de datos SSAS.

ShareVideos
5. Almacenamiento en caché automático

El funcionamiento del almacenamiento en caché automático se basa en el uso de dos cachés


de datos. La primera caché almacena los datos de la partición y se usa para responder a las
consultas de los usuarios. La segunda caché se actualiza con los nuevos datos del sistema
de origen. Tras un lapso de tiempo, la segunda caché reemplaza a la primera, pasa a modo
lectura, y el ciclo comienza de nuevo.

Observe que esta noción de caché sólo está disponible para los modos de almacenamiento
MOLAP y HOLAP. Con MOLAP los datos y las agregaciones están en la caché. Con
HOLAP solamente las agregaciones están en la caché. Con ROLAP no hay caché: se lee
directamente el origen relacional.

Antes de que la segunda caché reemplace a la primera, puede darse el caso de que se haya
superado la latencia exigida. En este caso la primera caché de lectura ha sido suprimida sin que se
haya generado la nueva. Las consultas se resuelven directamente en modo ROLAP. Esto puede
causar una degradación significativa en los tiempos de respuesta.

Para profundizar en su conocimiento acerca del funcionamiento de la caché proactiva


consulte la página siguiente: http://technet.microsoft.com/en-us/library/cc966446.aspx

Para configurar la caché abra las propiedades de la partición, vaya a continuación a la


página Almacenamiento en caché automático de SSMS o Configuración de
almacenamiento de BIDS. Esta página está dedicada a la configuración del almacenamiento
y permite activar el almacenamiento en caché automático. Por desgracia, su activación
carece de claridad, y aumenta la dificultad en la configuración.

En esta página simplemente se puede escoger:

 Un modo de almacenamiento para la partición haciendo clic en el botón Opciones, y


a continuación seleccionar un Modo de almacenamiento (véase la sección
Almacenamiento y particiones - Modos de almacenamiento).
 Un modo de almacenamiento en caché automático preconfigurado de entre una lista
propuesta en la configuración estándar:
o ROLAP en tiempo real
o HOLAP en tiempo real
o MOLAP de baja latencia
o MOLAP de latencia media
o MOLAP automático
o MOLAP planificado

Estos modos están preconfigurados, por tanto sólo es posible realizar desde SSAS
una pequeña parte de la configuración. SSAS no puede adivinar cómo funciona el

ShareVideos
origen de datos. Por ello generalmente es necesario indicar las opciones haciendo
clic en el botón Opciones.

 Un modo de Almacenamiento en caché automático mediante el botón Opciones.

Configuración de almacenamiento y Almacenamiento en caché automático

Esta pantalla habría ganado en lógica desplazando el modo de almacenamiento disponible en las
opciones (botón Opciones) a Configuración estándar, desplazando los parámetros estándar a una
página dedicada en Configuración personalizada, y asociando únicamente el modo de
almacenamiento MOLAP con los parámetros de configuración del almacenamiento en caché
automático. El procesamiento MOLAP aprovecha efectivamente la caché para conservar el línea el
cubo durante el procesamiento, pero la actualización manual no puede considerarse como
proactiva.

Las opciones de almacenamiento en caché automático se acceden mediante el botón


Opciones y están organizadas en dos páginas, General y Notificaciones. General sirve para
configurar la gestión de las cachés, Notificaciones para especificar cómo se informa SSAS
de la existencia de actualizaciones en el origen. La notificación designa una actualización
del origen que se notifica a SSAS.

Las opciones generales son las siguientes:

 Actualizar la caché cuando los datos cambien:


o Intervalo de latencia (Silence Interval): permite especificar un lapso de
tiempo mínimo sin notificación antes de iniciar la actualización de la caché.
Es preciso evitar la actualización instantánea de la caché, pues cada
actualización tiene el efecto de reinicializar la actualización de los colores
(el valor -1 permite ignorar las notificaciones).
o Intervalo de invalidación de latencia (Silence Override Interval): este
intervalo se utilizará si tenemos notificaciones constantemente y nunca llega
un primer intervalo sin notificación. Este segundo intervalo máximo de
latencia permite iniciar la actualización de la caché. En otras palabras: si al
finalizar este intervalo de tiempo no se ha producido una actualización de la
caché, pero hemos tenido notificaciones, se inicia la actualización
automáticamente.

 Quitar caché no actualizada:


o Latencia: define el tiempo de vida de la caché. Tras la duración indicada la
caché de lectura se vuelve obsoleta y se destruye. Si la caché queda obsoleta
antes de que se haya actualizado la nueva SSAS, responde a las consultas en
modo ROLAP. El valor -1 se usa para no bascular nunca al modo ROLAP.

ShareVideos
 Actualizar la caché periódicamente:
o Volver a generar intervalo: permite especificar un intervalo de actualización
de caché independientemente de que se produzcan o no notificaciones. El
valor -1 permite ignorar esta actualización periódica.
 Poner en línea inmediatamente: especifica si el servidor debe responder en modo
ROLAP o no responder a las consultas cuando la caché haya quedado obsoleta y la
nueva caché todavía no se haya generado.

Tenga en cuenta que en ocasiones ROLAP puede suponer un tiempo de respuesta mayor que
esperar a la actualización y responder a continuación en modo MOLAP.

 Habilitar agregaciones ROLAP: en caso de bascular al modo ROLAP por ausencia


de una caché actualizada, especifique si la respuesta ROLAP puede crear valores en
el origen de datos. Trate de evitar esta opción.

Opciones de almacenamiento de MOLAP de latencia media

Las opciones de la pestaña de Notificaciones son las siguientes:

 SQL Server:

Los eventos de la base de datos relacional SQL Server (versión 2000 ó superior) se
usan para detectar la actualización del origen. Es posible usar una tabla de
seguimiento para gestionar los eventos, en vez de basarse simplemente en la tabla
de origen. Aunque está optimizado para SQL Server, este modo presenta un
rendimiento bastante limitado y raramente se usa.

 Cliente iniciado:

En este modo SSAS espera una notificación XMLA del cliente (véase el artículo
http://msdn.microsoft.com/es-es/library/ms187202(SQL.100).aspx). Este modo es
difícil de implementar pues precisa la implementación de un sistema de
notificaciones.

 Sondeo programado (Schedule polling):

A menudo este modo es el que mejor se adapta, pues permite realizar


actualizaciones incrementales y presenta por tanto un mejor rendimiento.

Su funcionamiento se basa en una Consulta de sondeo que se ejecuta de modo


regular sobre el origen de datos para detectar actualizaciones y devolver el

ShareVideos
incremental. SSAS genera él mismo las notificaciones si el límite superior es
diferente al límite superior que se ha leído antes.

Una segunda consulta, llamada Consulta de procesamiento, permite extraer las filas
para efectuar una actualización incremental. La consulta de procesamiento debe
especificar un filtro sobre un intervalo definido por un límite superior y un límite
inferior igual al límite superior anterior. Debe usarse una sintaxis del tipo SELECT
... FROM tabla WHERE columna > COALESCE(?,-1) AND columna <=?.

Los dos primeros modos sólo pueden usarse con volúmenes de datos pequeños.

Es posible, e incluso aconsejable, combinar las distintas opciones en las distintas


particiones, generalmente en base a la antigüedad de los datos incluidos en la partición. Los
datos del año anterior se actualizan en principio más bien poco, mientras que los datos de
los últimos días lo hacen de forma constante.

Introducción
En el capítulo Crear informes OLAP se expuso la creación de informes de BI con
Reporting Services (SSRS). Este capítulo se centra en la administración del servidor de
informes.

Es habitual poner en producción una aplicación operacional sin que el equipo de desarrollo del
proyecto tenga acceso al entorno de producción. En el caso de los sistemas decisionales esto va a
suponer generalmente una diferencia. En efecto es deseable que un equipo especializado en
herramientas de análisis decisional, y que conozca bien los requisitos de los usuarios, gestione y
administre los servidores de BI para asegurar un buen rendimiento, resolver cualquier descuadre o
cacheo de los datos y observar el uso de los objetos de negocio. Una de las finalidades del BI es la
rapidez de restitución de los datos. Esto puede optimizarse mediante una explotación fina y
adecuada llevada a cabo por equipos especialistas.

Ciertas funcionalidades expuestas pueden omitirse en tiempo de desarrollo y podrán


ajustarse en el entorno de producción.

Servidor de informes

ShareVideos
1. Despliegue

Es aconsejable contar con un procedimiento de despliegue en producción, y será más eficaz


si se basa en un script de despliegue.

SSRS proporciona una herramienta de línea de comandos rs.exe dedicada a operaciones


como la administración y el despliegue. Permite ejecutar scripts en el servidor de informes
a través de archivos .rss. Está escrito en VB.NET y proporciona una API dedicada a la
comunicación con el servicio Web.

El manual completo para dominar esta API está disponible en MSDN (véase
http://msdn.microsoft.com/en-us/library/aa 256615(v=SQL.80).aspx, Formatting the
Reporting Services Script File).

Para escribir un script de despliegue, lo más eficaz es estudiar los ejemplos que proporciona
Microsoft en su sitio Web CodePlex (véase http://msftrsprodsamples.codeplex.com,
sección Script Samples).

Entre los ejemplos proporcionados, PublishSampleReports.rss muestra cómo crear una


estructura de datos compartida y publicar los informes. Se apoya en dos procedimientos
CreateSampleDataSource y PublishReport. Es muy sencillo reutilizarlos y adaptarlos a
nuestras propia necesidades en un proyecto.

A la hora de lanzar un script obtendrá la ayuda necesaria escribiendo:

rs.exe /?

En línea de comandos, o en la versión en línea de MSDN (véase


http://msdn.microsoft.com/en-us/library/aa179659(v=SQL.80).aspx, rs Utility).

La herramienta autoriza afortunadamente el uso de variables que son necesarias para


despliegues robustos. Esta funcionalidad no aparece ilustrada en PublishSampleReports.rss.
Consulte el ejemplo AddItemSecurity.rss para conocer el uso de variables en los scripts
.rss.

rs -i AddItemSecurity.rss -s http://localhost/reportserver -v
userName="Antonio Machado"...

2. Suscripciones
a. Introducción

Suscribirse a un informe permite programar la ejecución del informe para recibirlo por
correo electrónico o en una carpeta compartida en red, según una planificación definida.
SSRS proporciona dos soluciones de suscripción: las suscripciones, disponibles a partir de
la edición Standard de SSRS, y las suscripciones controladas por datos, disponibles a partir
de la edición Entreprise.

ShareVideos
Con la suscripción Standard, el usuario pide directamente desde el gestor de informes
suscribirse a un informe concreto. En las suscripciones controladas por datos, SSRS lee la
información de distribución de los informes en una tabla relacional.

Existen ciertos prerrequisitos a la hora de usar las suscripciones:

 SQL Server Agent debe estar activo.


 La seguridad usada por los orígenes de datos debe adaptarse eventualmente (véase a
continuación).

b. Seguridad

La suscripción a un informe usando un origen de datos SSAS supone un problema de


seguridad.

El origen de datos debe usar obligatoriamente la información de identificación almacenada


sin tomar prestada la información del usuario autenticado.

Una funcionalidad esencial del origen de datos SSAS consiste en filtrar los datos devueltos
en función del usuario (por ejemplo para que cada comercial vea únicamente su territorio).
Con la seguridad integrada de Windows definida en el origen de datos es fácil reproducir
este comportamiento en SSRS.

Pero para administrar las suscripciones es preciso usar un modelo de seguridad distinto del
origen de datos. En efecto, en una suscripción es la cuenta de servicio la que ejecuta el
informe... SSRS prohíbe la creación de suscripciones en estas condiciones. Es preciso
modificar el origen de datos. Se trata de una tarea complicada y supone el uso de soluciones
complejas y pesadas para conservar el modelo de seguridad SSAS ligado a los datos. Esta
problemática ha sido sintetizada y resuelta convenientemente por Greg Galloway en su blog
(véase la página
http://www.artisconsulting.com/blogs/greggalloway/Lists/Posts/Post.aspx?ID=18, Using
EffectiveUserName To Impersonate in SSAS).

Ciertos lectores verán aquí un fallo importante en la solución de BI de Microsoft. El fabricante de


software considera que se trata de una evolución funcional a implementar en una versión
posterior (véase https:// connect.microsoft.com/SQLServer/feedback/details/543052/cant-create-
a-subscription-if-data-source-is-set-to-impersonate-the-authenticated-user).

Como conclusión diremos que para combinar suscripciones SSRS y la seguridad de SSAS
filtrando sobre los datos es preciso desarrollar una solución propia que debería existir de
forma nativa en el producto.

ShareVideos
c. Programaciones

Durante la creación de una suscripción el usuario puede definir una programación propia,
aunque las buenas prácticas aconsejan el uso de una programación compartida, creada de
antemano por parte del administrador.

Las programaciones compartidas se administran en la configuración del sitio en el servidor


de informes.

1. Abra el servidor de informes en Internet Explorer (por ejemplo:


http://2008r2:8080/Reports).
2. En la parte superior derecha haga clic en Configuración del sitio.
3. Seleccione la página Programaciones.
4. Para crear una nueva planificación compartida haga clic en el botón Nueva
programación.
5. Seleccione en Detalles de programación el tipo de programación que mejor se
adapte de entre: Hora, Día, Semana, Mes, Una vez.
6. Introduzca el resto de detalles.
7. Valide haciendo clic en el botón OK en la parte inferior.

Todos los días de lunes a domingo a las 2 de la mañana

La programación compartida se sincroniza normalmente con eventos de negocio o técnicos.


Si la agenda de estos cambia, es más fácil modificar la programación si está centralizada. A
la inversa, si sus usuarios han creado ciertas programaciones propias, su modificación será
una tarea pesada.

La programación es un objeto SSRS que se usa en más lugares además de en las suscripciones. Está
accesible generalmente en las opciones del procesamiento y en las opciones de instantánea.

d. Suscripción estándar

Cuando un usuario visualiza un informe puede decidir suscribirse (si tiene los permisos
necesarios, véase el capítulo Crear informes OLAP, sección Administración).

Para ello basta con hacer clic en el gestor de informes, sobre el nombre del informe (justo
debajo de las pestañas de Internet Explorer) para abrir la página de gestión del informe.

Existe otro método para llegar a esta página.

ShareVideos
1. Cuando visualice el contenido de una carpeta del servidor de informes en IE
(Internet Explorer), puede mostrarse un menú para cada elemento, gracias a la
flecha que se encuentra a su derecha.
2. Abra este menú y seleccione la opción Administrar.

Administración del informe

Existen dos opciones de entrega del informe: por mensajería SMTP o mediante los recursos
compartidos de archivos.

La mensajería SMTP preferentemente tiene que ser configurada (véase el capítulo Crear
informes OLAP, sección Administración - Configuración del servidor).

Usar los recursos compartidos de archivos de Windows requiere que las carpetas
compartidas sean visibles desde el servidor. Necesitan a su vez incluir en la suscripción un
identificador de Windows y su contraseña.

1. Seleccione en Entregado por el método de entrega que mejor se adapte a sus


necesidades.
2. Complete el formulario de suscripción.
3. Valide haciendo clic en OK.

Suscripción con entrega por mensajería SMTP

Observe las opciones a marcar, en una suscripción por mensajería, Incluir informe e Incluir vínculo.
La primera le permite empujar (push) el informe, en forma de archivo adjunto, hacia el usuario. La
segunda invita al usuario a visitar (pull) el informe. Cuando desmarcamos ambas opciones el
correo se envía sin archivo adjunto ni vínculo, lo cual no es muy útil.

Suscripción con entrega mediante recurso compartido de archivos de Windows

En la compartición de archivos de Windows, puede haber un conflicto con un archivo que ya


exista. Para solventarlo SSRS proporciona las Opciones de sobreescritura.

ShareVideos
e. Suscripción controlada por datos

La Suscripción controlada por datos es una funcionalidad de la versión Entreprise. Se


adapta a situaciones en las que muchos usuarios piden numerosos informes preparados con
parámetros distintos.

Esta funcionalidad aparece bien documentada en MSDN (véase


http://msdn.microsoft.com/es-es/library/ms169673.aspx, Aprendizaje: Creación de una
suscripción controlada por datos).

Si bien esta funcionalidad se solicita a menudo, es posible implementarla a través de una


programación sencilla para llamar al Web Service del servidor de informes.

La guía de programación del Web Service está disponible en:


http://msdn.microsoft.com/en-us/library/ms154699(v=SQL.90).aspx (Building
Applications Using the Web Service and the .NET Framework).

El uso del modo Render para exportar el informe en un formato dado se explica e ilustra
mediante un ejemplo en esta página: http://msdn.microsoft.com/en-
us/library/microsoft.wssux.reportingserviceswebservice.rsexecutionservice2005.
reportexecutionservice.render(v=SQL.90).aspx (ReportExecutionService.Render Method).

Es posible construir una aplicación .NET dedicada, un script rss para rs.exe, un script en
SSIS, o un script Transact SQL para reemplazar la suscripción controlada por datos. La
solución SSIS es la más atractiva, sobretodo si la alimentación del DW y el procesamiento
de la base SSAS ya están implementados con SSIS.

Con SSRS 2008R2, la dirección del servicio Web es


http://NombreServidor/ReportServer/ReportExecution2005.asmx?wsdl (por ejemplo:
http://localhost:8080/ReportServer/ ReportExecution2005.asmx).

Encontrará asimismo un ejemplo completo para SSIS en MSDN (véase http://msdn.microsoft.com


/en-us/library/ff793463.asp, Bulk Report Generation using SSIS and SSRS 2008 R2). Este ejemplo
permite arreglárselas sin la necesidad de una suscripción controlada por datos.

3. Informe vinculado (Linked Report)

El informe vinculado es un enlace lógico al informe. Se usa para crear copias lógicas del
informe.

En el servidor de informes, los informes se clasifican por carpetas. Es cómodo gestionar la


seguridad de acceso de los usuarios a nivel de carpetas. Si el departamento de RRHH sólo

ShareVideos
tiene acceso a la carpeta DepRRHH, y el departamento de compras sólo tiene acceso a la
carpeta COMPRAS, ¿cómo sería posible hacer que un informe esté accesible para ambos
grupos? La solución es el informe vinculado.

Para crear un informe vinculado basta con abrir en el administrador de informes la ventana
de administración del informe y, a continuación, hacer clic en el botón Crear un informe
vinculado.

Es posible desplegar todos los informes construidos por los desarrolladores en una carpeta
invisible a los usuarios, y no darles acceso más que a los informes vinculados. Esto permite
simplificar la administración del catálogo de informes.

El mismo informe estará disponible para varios departamentos sin complicar las reglas de
administración de permisos. Por otro lado, el informe vinculado se comporta en todo
momento como un informe normal en la interfaz de usuario.

El informe vinculado también es práctico para crear una copia de un informe que tenga una
configuración por defecto diferente. En efecto, es posible modificar la configuración por defecto
del informe vinculado.

4. Instantánea (Snapshot)

En ocasiones es útil guardar un informe en una fecha concreta. Esto puede hacerse
mediante una exportación en formato PDF por ejemplo, pero también puede realizarse en el
servidor de informes gracias a las instantáneas.

La instantánea registra el informe en su formato intermedio para una combinación concreta


de los parámetros en la base de datos del servidor de informes.

Los principales métodos de creación de instantáneas están limitados a tomar únicamente la


configuración por defecto del informe. Esto es muy limitante pero puede salvarse gracias a
los informes vinculados.

La gestión de las instantáneas se realiza a nivel de informe, en el administrador de


informes. La ventana de administración del informe tiene una página Historial de informes
y otra página Opciones de instantánea.

El Historial de informes muestra la lista de instantáneas que se conserva en la base de datos


SSRS y permite crear una nueva gracias al botón Nueva instantánea. La instantánea se crea
para la configuración por defecto.

ShareVideos
Es imposible crear una instantánea si falta un parámetro por defecto.

Las Opciones de instantánea son más ricas. Permiten planificar la creación de instantáneas
gracias a una planificación específica o compartida, y precisar el nombre de las instantáneas
que se quiere conservar en la base de datos.

La configuración por defecto del número de instantáneas que se quiere conservar forma parte de
la Configuración del sitio.

SSRS puede utilizar una instantánea para construir un informe (véase la sección Caché). En
este caso SSRS no lee los datos desde la base de datos de origen sino que usa directamente
el formato intermedio, almacenado en la base de datos SSRS, para producir el informe.
Esto puede configurarse en las Opciones de procesamiento del informe (véase la sección
Caché). Es posible escoger una planificación específica o compartida para la creación de
instantáneas.

5. Caché

Cuando se pide un informe, SSRS pregunta a la base de datos de origen, crea un informe
intermedio y a continuación un informe en el formato específico demandado. Si un minuto
después se solicita el mismo informe, estas operaciones van a tener que reproducirse en el
servidor de informes para producir el mismo resultado. Si la base de datos se actualiza de
forma diaria, seguramente el segundo informe no tiene ningún interés respecto al primero y
supone un uso de recursos inútil en la base de datos de origen y en el servidor de informes.

Para ahorrar en el consumo de recursos y aumentar así el rendimiento, SSRS propone un


administrador de caché configurable para cada informe y para cada conjunto de datos
compartido.

Cuando un informe contiene parámetros, el cacheo se produce dependiendo de la


combinación concreta de estos parámetros que se haya informado en tiempo de ejecución
del informe. Esto no afecta a las demás combinaciones de parámetros. En efecto, es posible
cargar en la caché tantas combinaciones de parámetros como se quiera siempre y cuando se
haya ejecutado el informe para estas otras combinaciones.

Para habilitar el cacheo, el origen de datos usado debe contener información de


identificación de conexión a la base de datos.

El informe en caché se registra en su formato intermedio en la base de datos temporal de


SSRS.

ShareVideos
Por naturaleza la caché tiene un tiempo de vida limitado. Su parámetro principal es el
momento de expiración, expresado bien por un tiempo de vida en minutos, o bien por una
planificación que iniciará su purgado.

Si la actualización del origen de datos está planificada lo lógico es iniciar el purgado de los datos de
caché después de esta actualización.

En cada pantalla hay que interpretar la Planificación como específica al informe (report-specific
schedule), y no a todos los informes. Una planificación que se comparte entre varios informes es
una planificación compartida.

El tiempo de espera es el ’timeout’ de ejecución del informe. La traducción no es del todo clara.

Antes de la versión SQL Server 2008 no era posible modificar la expiración de la caché. Se
creaban suscripciones para generar cachés, cargar la caché, pero esta solución no era
óptima. SQL Server 2008R2 aporta una novedad: los planes de actualización de caché.

El plan de actualización de caché es simplemente una planificación, específica o


compartida, de creación de la caché para una configuración específica. Se puede acceder a
ella desde la página de administración del informe o del conjunto de datos, haciendo clic en
Opciones de actualización de caché.

Es habitual cargar la caché al menos para la configuración por defecto del informe, de modo que
se obtenga una visualización inmediata del mismo en IE. A continuación, el usuario cambiará los
parámetros si lo considera necesario.

Hay que distinguir bien entre caché e instantánea. A su vez, es conveniente recordar que ambos
elementos pueden utilizarse a la hora de ejecutar un informe. Por último, recuerde que la caché se
aplica a los informes y a los conjuntos de datos compartidos, gestionando correctamente su
configuración. Sin embargo, la instantánea está limitada a los informes y a su configuración por
defecto.

Existen muchas otras aplicaciones de las cachés, por ejemplo:

ShareVideos
 Para acelerar la carga de las listas de parámetros en los informes, y evitar tener que
solicitarlos al origen de datos cada vez, cree conjuntos de datos compartidos para
inicializar estos parámetros del informe y programe su caché.
 Si, durante su actualización, la base de datos no está disponible, cree una caché que
oculte a los usuarios finales esta interrupción momentánea del servicio.

Desarrollo avanzado
En el capítulo Alimentar el Data Mart se abordaron las principales funciones del ETL, con
el objetivo de alimentar una tabla de hechos y una dimensión. Es preciso presentar otras
funcionalidades avanzadas que pueden utilizarse en un proceso ETL.

1. Ordenación de los elementos

En un flujo de datos ciertas transformaciones no funcionan más que con datos de entrada
ordenados. Es el caso de las transformaciones Combinación de mezcla y Fusión. Hay tres
posibilidades para que un flujo esté ordenado: bien el origen está ya ordenado, bien se usa
la transformación SSIS Ordenar, o bien se usa un desarrollo a medida, generalmente un
desarrollo propio.

En el estudio de desarrollo, cuando se conecta un flujo con la transformación Fusión, este


último muestra una pequeña cruz de color rojo si el flujo no está ordenado. No puede saber
si el origen, un archivo por ejemplo, está ordenado o no.

La ordenación se declara en el camino de acceso del flujo de datos. Las propiedades de este
último se acceden haciendo doble clic en una flecha del flujo de datos entre dos
transformaciones, lo que provoca que se abra el Editor de rutas de flujo de datos. La página
de Metadatos muestra el detalle de los campos del flujo, donde la columna Posición de
criterio de ordenación define el criterio de ordenación. Los campos que contengan el valor
0 no intervienen en el orden. Para los demás, la cifra indicada define la posición del campo
en la clave de ordenación. Los datos se ordenan en primer lugar según la posición 1,
después según la posición 2...

Las posiciones del criterio de ordenación pueden fijarse de dos formas:

 Mediante una transformación, por ejemplo las transformaciones Ordenar o Fusión.


Cuando la transformación garantiza el orden de los datos de salida, señala a SSIS
que los datos están ordenados.
 Mediante las propiedades avanzadas de ciertas transformaciones o fuentes de datos.
Cuando el desarrollador sabe que los datos están ordenados, debe indicarlo a SSIS
fijando las buenas prácticas. Es el caso por ejemplo de datos que se extraen de un
origen de datos SQL mediante una cláusula ORDER BY. El desarrollador debe
informar a SSIS de la ordenación efectuada por la cláusula.

ShareVideos
Por ejemplo, para configurar un origen de datos OLE DB, sobre la base de datos SQL
AdventureWorks, que contenga la siguiente consulta ordenada según tres columnas:

SELECT [StateProvinceID]
,[StateProvinceCode]
,[IsOnlyStateProvinceFlag]
,[StateProvinceName]
,[TerritoryID]
,[CountryRegionCode]
,[CountryRegionName]
FROM [Person].[vStateProvinceCountryRegion]
ORDER BY [StateProvinceID],[TerritoryID],[CountryRegionCode]

1. En el editor del flujo de datos, haga clic con el botón derecho y seleccione Mostrar
editor avanzado.
2. En el Editor avanzado para Origen OLE DB, seleccione la última pestaña
Propiedades de entrada y salida.
3. En la zona Entradas y salidas seleccione Salida de origen OLE DB.
4. Asigne a la Propiedad común llamada IsSorted el valor True.

1. En la zona Entradas y salidas, despliegue el árbol Salida de origen de OLE DB para


visualizar las Columnas de salida.
2. StateProvinceID es la primera columna de ordenación, selecciónela haciendo clic y
fije a su Propiedad común llamada SortKeyPosition el valor 1.

1. Repita la operación para TerritoryID con el valor 2.


2. Repita la operación para CountryRegionCode con el valor 3.
3. Valide haciendo clic en OK.

Tras realizar estas modificaciones usted no habrá modificado la ordenación de los atributos,
simplemente habrá señalado a SSIS que se trata de datos ordenados.

2. Seguimiento de la producción

SSIS no proporciona una plataforma de seguimiento de la producción. Contiene únicamente


un sistema de registro que, junto a la implementación de una auditoría de los
procesamientos, permite implementar dicha plataforma.

a. Registro (Logging)

SSIS posee un único sistema de Registro (Logging). Esta opción permite, cuando se lanza
el paquete DTSX en modo batch desde DTEXEC o SQL Agent, tener una traza del

ShareVideos
procesamiento. Esta traza es de categoría sistema, si bien es posible enriquecerla con
mensajes de aplicación.

En el estudio de desarrollo, en la parte de diseño de un paquete DTSX, la configuración del


registro está accesible en el menú: SSIS - Registro.

Hay ocasiones en que el menú SSIS no se muestra completo. Si se diera el caso haga clic en la
superficie del paquete para situarse a nivel de paquete.

La definición se hace a nivel de paquete. Un paquete puede escribirse en varios registros.


Las posibilidades son muy variadas: el enlace entre el paquete y el registro puede definirse
a nivel de paquete o de los elementos del flujo de control. Para el paquete, o para cada uno
de sus elementos, la pestaña Detalles permite escoger los eventos que se quiere registrar, así
como las columnas que deben registrarse en cada caso. Un elemento que se muestre
deshabilitado hereda el comportamiento de su padre en el árbol de Contenedores, pero
como todos los elementos no tienen los mismos eventos, esta herencia tiene sus límites.

¿Justifica la creación de una traza el tener que usar toda esta riqueza funcional? Para facilitarle la
vida SSIS le proporciona en la pestaña Detalles dos botones Cargar y Guardar para cargar o
guardar una configuración.

SSIS proporciona distintos tipos de proveedores de registro, es decir, distintos tipos de


registro:

 Registro de eventos de Windows: registra los eventos en el registro Aplicación de


Windows.
 Archivos de texto: archivo de texto con una coma como separador.
 Archivos XML: usa un formato XML para escribir en un archivo.
 Tabla de SQL Server: almacena los eventos en una tabla de la base de datos. SSIS
crea una tabla de sistema con el nombre dbo.sysssislog que se alimenta mediante un
procedimiento almacenado de sistema llamado sp_ssis_addlogentry.
 Archivo para SQL Server Profiler: registra los eventos en un archivo de traza del
Profiler. Para poder explotarlo debe tener la extensión .trc.

Los cuatro últimos tipos requieren una configuración en el Administrador de


configuraciones del paquete para definir el lugar exacto donde se almacena el registro: la
ruta del archivo, el servidor SQL y el nombre de la base de datos (véase el capítulo
Alimentar el Data Mart, sección Desarrollos - Configuraciones).

ShareVideos
El menú SSIS - Registrar eventos permite mostrar en una ventana del estudio de desarrollo
las filas que se emiten al registro de eventos.

Para escribir en el registro mensajes de aplicación, use el elemento Tarea de script. El script
básico creado por defecto en SSIS muestra un ejemplo de cómo usarlo, en C#:

Dts.Log("Registro", 999, null);

Esta llamada no tendrá ningún efecto siempre que no haya enlazado específicamente la tarea de
script en cuestión con el registro y haya seleccionado trazar el evento ScriptTaskLogEntry...

Esta configuración es un poco compleja para mostrar una simple fila en el registro de log,
es más rápido generar un evento en la tarea de script.

Dts.Events.FireWarning(0, "Mi warning", "Aviso de ejecución",


String.Empty, 0);
bool fireAgain = true;
Dts.Events.FireInformation(0, "Mi información", "Se ha generado...",
String.Empty, 0, ref fireAgain);

Usar una tarea de script para escribir un simple comentario en la traza es una solución algo
desproporcionada. La comunidad de desarrolladores proporciona una tarea dedicada en el
sitio Web CODEPLEX (véase
http://ssisctc.codeplex.com/wikipage?title=Other%20Tasks%20and%20Components%20av
ailable%20from% 20TheJoyOfCode&referringTitle=Home, Tasks and Components
available from The Joy of Code).

En la misma dirección encontrará una tarea que le permite modificar una variable a lo largo de la
ejecución de un flujo de control.

En el caso de un paquete padre que llama a un paquete hijo los eventos del paquete hijo se
devuelven al paquete padre. Es posible implementar el registro de eventos sólo a nivel del
padre. No obstante, implementarlo también a nivel del paquete hijo permite establecer el
enlace entre el registro y la ejecución del paquete hijo (identificado por la variable de
sistema ExecutionInstanceGuid).

El paquete hijo que implementa un registro de eventos supone un caso algo particular. En
este caso el administrador de configuraciones del registro también debe configurarse. SSIS
presenta una limitación a este respecto: no puede escribir en el registro si éste no ha sido
configurado. La configuración del paquete padre no funciona. Esta situación puede
resolverse usando una configuración XML indirecta para cargar el administrador de
configuraciones del registro. Este tipo de configuración se administra en SSIS.

ShareVideos
Toda la información detallada acerca del Registro está disponible en MDSN (véase
http://msdn.microsoft.com/es-es/library/ms138020.aspx, Implementar inicios de sesión en
paquetes).

En CODEPLEX encontrará una aplicación para analizar los registros generados (véase
http://ssisloganalyzer.codeplex.com/, SSIS Log Analyzer).

b. Auditoría

En la fase de concepción del ETL la auditoría designa la actividad opcional que permite
trazar integralmente los datos en el DW hasta el usuario final. La auditoría generalmente
permite alcanzar los siguientes objetivos:

 Datación del dato y posibilidad de reagrupar todos los datos del mismo lote.
 Calidad: igual que en un entorno industrial, cada registro que se crea está
identificado por un número de lote, y su recorrido dentro de la cadena de
producción de los registros puede trazarse hasta el origen.
 Estadística de rendimiento del proceso de integración, estadísticas en general,
recuento de errores o del número de filas por tablas.
 Cuadro de mando de la carga ETL: ¿el procesamiento del día ha terminado con
errores? ¿Por qué?
 Detección de problemas: un tiempo de procesamiento que aumenta para un volumen
constante de datos de entrada puede revelarnos la necesidad de corregir algún
índice.

Para ayudar al desarrollador en esta tarea SSIS proporciona una transformación de flujo de
datos llamada Auditoría. Esta transformación no hace más que agregar campos al flujo de
datos, inicializados por variables del sistema SSIS. Los campos disponibles en la tarea
Auditoría son: GUID de instancia de ejecución (ExecutionInstanceGuid), ID del paquete
(PackageID), nombre del paquete (PackageName), ID de versión (VersionGUID), hora de
inicio de la ejecución (StartTime), nombre de la máquina (MachineName), nombre del
usuario (UserName), nombre de la tarea (TaskName) e ID de la tarea (TaskID).

La variable ExecutionInstanceGuid permite establecer el enlace con una traza del registro. A partir
de la auditoría y del registro es posible construir una consola de seguimiento de producción
completa, aunque su desarrollo corre por cuenta propia.

En el caso de una tabla de hechos que contenga varios millones de filas no es factible
agregar información sobre cada fila en el registro. Una solución más elegante consiste en
crear una clave de auditoría, haciendo el enlace entre la tabla y la información de auditoría.

El principio consiste en crear una tabla de auditoría con una clave de tipo entero
autoincrementada, ClaveAuditoria por ejemplo. Cada tabla de hechos (normalmente
alimentada sólo en inserción) agregará un campo nuevo ClaveAuditoria. Se agregan dos

ShareVideos
campos a las demás tablas: ClaveAuditoriaInsercion y ClaveAuditoriaActualizacion. Al
comenzar cada procesamiento ETL se crea una fila nueva en la tabla de auditoría con toda
la información pertinente y útil. Se devuelve el valor de la clave de auditoría, que se usará a
lo largo del procesamiento para informar los campos ClaveAuditoria,
ClaveAuditoriaInsercion y ClaveAuditoriaModificacion. Al finalizar el procesamiento la
fila de la tabla de auditoría se actualiza con el resultado del procesamiento, la estadística del
número de inserciones, de errores, etc.

Este esbozo es un punto de partida y debería enriquecerse con sus propias necesidades al
respecto. Un único registro de auditoría que realice el seguimiento de la alimentación de 10 tablas
de hechos y 50 dimensiones no es suficiente para observar de manera fina el conjunto del sistema
ETL.

3. Recuperación frente a fallos

Los usuarios de bases de datos relacionales están habituados a realizar operaciones


atómicas gracias a las transacciones: o bien la operación tiene lugar de forma unitaria o
bien se anula. SSIS permite implementar transacciones gracias al servicio de Windows
DTC (Distributed Transaction Coordinator). Existe otra funcionalidad de SSIS que puede
utilizarse de forma combinada o separada: puntos de control (Checkpoints) que en caso de
error permiten retomar el procesamiento antes del error.

a. Transacción

Las transacciones SSIS se basan en el uso de DTC (o MSDTC). Sólo es posible incluir en las
transacciones aquellos servicios que implementen DTC.

SSIS permite definir una transacción a cualquier nivel en el flujo de control: de paquete, a
nivel de tarea o de contenedor de tareas. Cada uno de estos componentes tiene la propiedad
TransactionOption que puede tomar los siguientes valores:

 Required: el componente inicia una transacción si no está incluido ya en una, si lo


está la retoma.
 Supported: comportamiento por defecto de los componentes. El componente se
suma a la transacción si está incluido en una. En caso contrario, no crea ninguna
transacción.
 NotSupported: el componente queda fuera de la transacción e incluso si está
incluido en una se excluye de ella.

En el caso de un paquete o de otro contenedor los componentes incluidos heredan por


defecto la configuración de la transacción (parámetro Supported), pero el diseñador puede
modificar este comportamiento.

ShareVideos
La configuración de las transacciones no desciende a nivel de flujo de datos. SSIS permite definir la
configuración por flujo de datos, pero no en el interior del flujo de datos, incluso si este último
contiene destinos diferentes.

Para usar las transacciones se aconseja seguir las reglas siguientes:

 Usar un contenedor de secuencias configurado con Required para agrupar varias


tareas en una transacción.
 Evite crear casos muy complejos. Se aconseja usar al máximo la opción Supported
con el fin de heredar el comportamiento del contenedor padre. Esta opción funciona
igualmente en el caso de un paquete hijo llamado dentro de una transacción del
paquete padre.
 La implementación de una transacción necesita un plan de pruebas más potente.

b. Checkpoint

El checkpoint tiene como objetivo interrumpir parte del flujo de control cuando se devuelve
un error. Puede usarse para hacer frente a incidentes técnicos, como una caída del servidor
FTP en el que se depositan los archivos al finalizar la ejecución, pero también a problemas
de alimentación de los datos.

Es complicado implementar esta funcionalidad para incidentes ligados a los datos. Precisa por un
lado de la corrección del dato erróneo hacia atrás en el flujo y, por otro lado, la gestión coherente
de las transacciones. El checkpoint parece más adecuado para gestionar problemas externos al
flujo de datos como por ejemplo un problema de escritura del archivo porque no se poseen los
permisos necesarios, o porque no hay respuesta por parte del servidor FTP. Si el procesamiento
SSIS ha generado varias decenas de informes y tiene que depositarlos en un servidor FTP es una
lástima tener que relanzar el procesamiento completo por un incidente en la conexión.

La recuperación frente a errores se basa en el uso de un archivo testigo en el que se


registran los puntos de control en el curso de la ejecución del paquete. En la siguiente
ejecución SSIS lee el archivo testigo y determina si la anterior ejecución terminó en error, y
en tal caso en qué punto de control debe retomar la ejecución.

Se puede activar esta funcionalidad en las propiedades del paquete SSIS. Para ello la
propiedad SaveCheckpoints debe tomar el valor True. En este caso la propiedad
CheckpointFileName tiene que definir un archivo, aunque puede informarse mediante una
fórmula en la propiedad Expressions.

La propiedad CheckpointUsage puede adoptar los siguientes valores:

ShareVideos
 Never: el flujo de control se inicia siempre de la misma forma exista o no un
archivo testigo. Es la opción por defecto.
 IfExists: toma en cuenta la existencia de un eventual archivo de control, para iniciar
a partir del punto de control indicado en el archivo. Si no existe se ejecuta el
paquete con normalidad.
 Always: no inicia si no existe un archivo testigo, y lo hace a partir del punto de
control indicado en él.

Para crear un punto de control, fije a True la propiedad FailPackageOnFailure de una tarea
o de un contenedor.

Crear una transacción sobre un contenedor que contenga un punto de control permite gestionar la
transacción y la recuperación frente a errores para un mismo conjunto de tareas.

4. Eventos

Cada paquete contiene un flujo de control principal. Aun así es posible agregar otros flujos
de control para responder a eventos gracias a la pestaña Controladores de eventos del editor
SSIS en el estudio de desarrollo.

A nivel de paquete, de contenedor o de tarea, el desarrollador tiene la posibilidad de


agregar un gestor de eventos que tome la forma de un flujo de control. La paleta de eventos
es muy variada. El uso de esta funcionalidad está por lo general limitada al nivel de paquete
y de los eventos OnError, OnWarning y OnVariableValueChanged.

El evento OnVariableValueChanged sólo se produce si la propiedad RaiseChangedEvent vale True,


al menos para una variable, y si cambia de valor.

Un posible uso de los eventos consiste en registrar los errores y advertencias en una tabla
de la aplicación, enviar una alerta por correo electrónico en caso de error, o incluso limpiar
la base de datos de destino cuando se interrumpe el procesamiento fuera de una transacción.

5. Formatos internacionales

SSIS gestiona los parámetros regionales a todos los niveles del flujo de control y del flujo
de datos, a excepción de ciertos tipos de origen y de destino. En un mismo paquete pueden
existir varias tareas que usen parámetros regionales distintos. La propiedad que se utiliza
para fijar estos parámetros es LocaleID. Esta propiedad se hereda por defecto del padre.
Para los administradores de conexión, se fija igualmente un CodePage (o Página de
códigos) si no se trata de Unicode.

ShareVideos
La gestión de LocaleID en el estudio de desarrollo SSIS no mantiene coherencia respecto al resto
de propiedades. El LocaleID tiene valor en todo momento, se herede o no del padre. Habría sido
práctico identificar esta herencia mediante un valor especial como es el caso de otras
propiedades. Aparte de los componentes del flujo de datos donde la propiedad IsDefaultLocale
aparece o no en modo de sólo lectura para indicar si el componente hereda o no de su padre, la
tarea del flujo de datos, es imposible saber si el valor ha sido fijado o heredado.

En el momento de leer un origen de tipo archivo de texto es probable que contenga campos
de tipo fecha o valores decimales sensibles a la localización. El diseñador debe adaptar el
valor de la propiedad LocaleID del administrador de conexiones de forma consecuente.

En este caso el nivel más fino es la conexión, y no la columna. Si en un mismo origen de datos
existen dos columnas expresadas en dos formatos internacionales distintos, por ejemplo una fecha
en español y un valor decimal en inglés, uno de los dos campos habrá que convertirlo mediante
una expresión.

En ciertos casos extremos donde las filiales internacionales produzcan los mismos archivos
con sus parámetros regionales diferentes, SSIS permite modificar dinámicamente en tiempo
de ejecución el valor de la propiedad LocaleID, por ejemplo mediante configuración.

El conjunto de funcionalidades internacionales de SQL Server (2005) están bien explicadas


y desarrolladas en un manual que hace referencia a toda la problemática ligada a la
localización (véase http://msdn.microsoft.com/es-es/library/bb330962(v=sql.90).aspx,
Características internacionales en Microsoft SQL Server 2005).

Producción
SSIS, contrariamente a MSSQL, SSRS y SSAS, no es un servidor sino un entorno de
ejecución runtime. Su uso y su despliegue necesitan precisar algunos puntos.

1. Arquitectura

Además del estudio de desarrollo, que se usa para la concepción de paquetes, SSIS está
constituido principalmente por dos componentes:

 El runtime SSIS: el runtime permite ejecutar un paquete fuera del estudio de


desarrollo. Esto supone un elemento clave para la producción, que necesita su
licencia SQL Server. Tomará en cuenta todas las funcionalidades implementadas en
el estudio de desarrollo: flujo de control, flujo de datos, registros, eventos,
configuración...
 El servicio SSIS: el servicio SSIS es monoinstancia. Abierto en SSIS, el servicio
permite al usuario controlar los paquetes en tiempo de ejecución y administrar los

ShareVideos
paquetes registrados en ambos almacenes de paquetes (véase Almacén de paquetes):
la base de datos MSDB y el sistema de archivos. La administración los paquetes se
limita a las siguientes operaciones: cargar en un almacén, ejecutar, renombrar,
suprimir, exportar, actualizar y administrar la seguridad.

2. Almacén de paquetes

En producción es posible almacenar los paquetes SSIS de tres formas distintas:

 En cualquier lugar del sistema de archivos que sea visible por el runtime.
 En el almacén de paquetes, administrado por el servicio SSIS, del sistema de
archivos.
 En el almacén de paquetes, administrado por el servicio SSIS, de la base de datos
SQL de sistema MSDB.

Las dos soluciones administradas por el servicio SSIS se pueden configurar en el archivo
MsDtsSrvr.ini.xml presente en la carpeta C:\Program Files\Microsoft SQL
Server\100\DTS\Bin (en el caso de una instalación por defecto en el disco C:).

<?xml version="1.0" encoding="utf-8" ?>


<DtsServiceConfiguration
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<StopExecutingPackagesOnShutdown>true</StopExecutingPackagesOnShut
down>
<TopLevelFolders>
<Folder xsi:type="SqlServerFolder">
<Name>MSDB</Name>
<ServerName>.</ServerName>
</Folder>
<Folder xsi:type="FileSystemFolder">
<Name>File System</Name>
<StorePath>..\Packages</StorePath>
</Folder>
</TopLevelFolders>
</DtsServiceConfiguration>

Esta configuración aplica al servicio y no tiene impacto sobre la ejecución del runtime. La única
forma de actuar sobre los paquetes en producción consiste en modificar las propiedades del
interior de los paquetes, generalmente mediante sus configuraciones.

Puesto que Microsoft proporciona tres posibilidades a la hora de almacenar un paquete, es


preciso escoger. MSDB se diferencia de las otras dos por los roles implementados en la
base SQL Server y porque permite administrar la seguridad de acceso a los paquetes (véase
http://technet.microsoft.com/en-us/library/ms141053.aspx, Using Integration Services
Roles). El particionamiento NTFS permite alcanzar el mismo resultado, pero usar el
servicio para desplegar los paquetes supone no obstante ciertas ventajas. Aun así es preciso

ShareVideos
tener en cuenta las nociones de copia de seguridad y de plan de recuperación frente a fallos
con su DBA para poder escoger.

Esta elección tiene un fuerte impacto en el desarrollo a la hora de invocar a los paquetes hijos. En
un caso la conexión es de tipo archivo con una ruta completa, mientras que en el otro la conexión
es de tipo OLE DB. A la hora de usarlo, OLE DB evita tener que realizar una gestión de la
configuración de la ruta del paquete hijo, aunque en tiempo de desarrollo no se permite trabajar
con la base MSDB. Ninguna solución es del todo perfecta. Esta complejidad en el uso de SSIS nos
impide concentrarnos en el verdadero núcleo del negocio. Si escoge la solución MSDB, la
herramienta BIDS Helper, que puede descargar de CODEPLEX, puede simplificarle la tarea (véase
http://bidshelper.codeplex.com/wikipage?title=Deploy%20SSIS%20Packages&
referringTitle=Home&ProjectName=bidshelper, BIDS Helper). Para desplegar los paquetes en
MSDB antes que su ejecución desde el estudio de desarrollo, use la opción CmdLineArguments de
la página Depurar en las propiedades del proyecto e invoque a la herramienta dtutil.exe (véase
DTUTIL).

3. Runtime

En el estudio de desarrollo el desarrollador aprovecha una interfaz gráfica para visualizar la


ejecución. En producción no existe esta comodidad. El runtime SSIS proporciona dos
ejecutables para lanzar los paquetes: DTEXEC y DTEXECUI. Se trata del mismo
programa: el primero por línea de comandos y el segundo presenta una interfaz gráfica para
configurar y visualizar la ejecución. DTEXECUI permite además la creación de una línea
de comandos para usar DTEXEC.

Estas herramientas son indispensables para la puesta en producción: el desarrollo no termina en el


momento en que se prueba el paquete en el estudio de desarrollo, sino que habrá que hacer
pruebas completas hasta la creación y ejecución mediante el comando DTEXEC.

Generalmente los procesos ETL se planifican a horas regulares. SQL Agent permite
planificar una ejecución desde la interfaz de DTEXECUI en una etapa de tipo Package SQL
Server Integraton Services. No obstante, es posible ejecutar un paquete SSIS desde
cualquier herramienta de programación susceptible de ejecutar un archivo de comandos.

En desarrollo se crea generalmente un paquete principal, que se lanza en producción. Su


cometido es invocar y ejecutar los paquetes hijos. Si este fuera el caso, basta con un
comando DTEXEC para iniciar la ejecución de todo el proceso ETL.

Basta con lanzar DTEXECUI, desde el menú Inicio: Inicio - Microsoft SQL Server 2008
R2 - Integration Services - Execute Package Utility, para darse cuenta de la riqueza de
configuración del runtime.

ShareVideos
Las buenas prácticas oficiales se basan en el uso de configuraciones que inicializan las
variables del paquete, ligadas ellas mismas a propiedades basadas en expresiones. Aunque
si no se respeta esta norma DTEXEC y DTEXECUI permiten igualmente:

 Modificar las conexiones gracias a la página Administrador de conexiones.


 Asignar ciertas propiedades o variables de forma similar a una configuración
gracias a la página Valores definidos.
 Informar las configuraciones definidas en tiempo de desarrollo y también añadir
otras nuevas.

La configuración inyecta nuevos valores en el paquete (a las propiedades o a las variables


existentes). No es preciso haberlo configurado en tiempo de desarrollo.

En el caso de un paquete padre que llama a paquetes hijos la configuración que se pasa en la
llamada desde DTEXEC aplica únicamente al paquete padre. Use las configuraciones de tipo
variable del paquete padre para pasar los parámetros a los paquetes hijos.

Las configuraciones implementadas por DTEXEC son únicamente de tipo XML directo
(véase el capítulo Alimentar el Data Mart). Se cargan después de las configuraciones
definidas en el paquete.

Cada introducción manual en DTEXECUI modifica la línea de comandos generada en la


última página, Línea de comandos. Para crear un archivo de comandos basta con copiar la
Línea de comando, escribir en un archivo DTEXEC, seguido de un espacio, y pegarla a
continuación.

4. Despliegue

Existen varias formas de desplegar la solución SSIS en un entorno de producción. La más


intuitiva es copiar los paquetes y sus configuraciones en el servidor y a continuación
programar los comandos DTEXEC. SSIS proporciona herramientas de soporte al
despliegue.

a. Utilidad de implementación

El proyecto SSIS puede configurarse en el estudio de desarrollo para generar una Utilidad
de implementación.

1. En el explorador de soluciones, abra las propiedades del proyecto mediante el menú


contextual.

ShareVideos
2. Seleccione la página Utilidad de implementación.
3. Establezca la propiedad CreateDeploymentUtility a True para solicitar la creación
de la herramienta.

Esta herramienta se creará tras cada generación del proyecto (menú Generar) en la carpeta
indicada en la propiedad DeploymentOutputPath.

Cuando la propiedad AllowConfigurationChanges tiene el valor True, la utilidad de


implementación permite revisar todas las configuraciones XML directas y modificar sus
valores.

La utilidad de implementación generada está constituida por el conjunto de paquetes del


proyecto, los archivos de configuración XML directa referenciada por estos paquetes, un
archivo manifiesto con el mismo nombre que el proyecto y la extensión
.SSISDeploymentManifest y diversos archivos eventualmente incorporados al proyecto.

Para desplegar los paquetes, basta con copiar la carpeta de la utilidad en el destino y hacer
doble clic en el archivo manifiesto. Esta acción inicia la ejecución del programa
dtsintall.exe.

Este último propone copiar los paquetes bien en el sistema de archivos o bien en el almacén
MSDB. Los archivos de configuración y las demás dependencias se copian en el sistema de
archivos.

b. DTUTIL

Como complemento a SSMS y a la utilidad de implementación, SSIS proporciona una


herramienta de gestión de paquetes: dtutil.exe. Esta herramienta permite trabajar con los
tres almacenes de paquetes: el sistema de archivos, la base MSDB y la carpeta SSIS
administrada por el servicio en el sistema de archivos.

Existe un parámetro dedicado para cada uno de estos almacenes:

 /FILE: para el sistema de archivos.


 /SQL: para MSDB.
 /DT (o /DTS): para la carpeta administrada por SSIS.

La herramienta permite ejecutar, entre otros, los siguientes comandos:

 /COPY: para copiar el paquete desde un origen a un destino.


 /MOVE: para moverlo.
 /FCREATE: para crear una carpeta en MSDB o en la carpeta administrada por
SSIS.
 /DELETE: para borrar un paquete.
 /EXISTS: para comprobar la existencia del paquete.

ShareVideos
Devuelve los códigos siguientes:

 0: Éxito
 1: Error
 4: No se ha encontrado el paquete
 5: Es imposible cargar el paquete
 6: Error de sintaxis

El funcionamiento de dtutil.exe está descrito con detalle en MSDN (véase


http://msdn.microsoft.com/en-us/library/ms162820.aspx, dtutil Utility).

5. Rendimiento

Como no existen propiedades a nivel del servicio, la mejora del rendimiento en la ejecución
de los flujos de datos se hace a nivel de paquete.

El rendimiento depende en gran medida de la plataforma, por lo que es difícil adivinar qué
propiedades es preciso modificar en los programas para mejorar el rendimiento...
Afortunadamente esto puede llevarse a cabo gracias a las configuraciones sin tener que modificar
el código fuente.

La tarea del flujo de datos está concebida para trabajar en memoria. Por este motivo trabaja
con un buffer y carga en memoria un lote completo de registros. En ciertos casos el tamaño
puede ser tal que SSIS se encuentre obligado a escribir estos buffers en el disco duro: trate
de evitar esta situación. Un primer ajuste para su optimización consiste en usar buffers
grandes de modo que SSIS genere la menor cantidad posible, sin empezar a escribir en el
disco.

Por desgracia estos ajustes no son triviales y es preferible evitarlos.

Antes de tener que llegar a estos ajustes se espera que el paquete haya limpiado todas las
columnas inútiles y que el tipo de las columnas esté configurado de forma ajustada. Por ejemplo,
el buffer no trabaja con cadenas de tamaño variable, sino de tamaño fijo. Así el uso de una cadena
de 500 caracteres en lugar de 5 caracteres tiene consecuencias nefastas en el rendimiento.

Toda la información útil para mejorar el rendimiento de los flujos de datos está disponible
en technet (véase http://technet.microsoft.com/es-es/library/ms141031.aspx, Mejorar el
rendimiento del flujo de datos).

Presentación

ShareVideos
PowerPivot es una solución de Microsoft que permite realizar cálculos OLAP en memoria.
Se basa en una tecnología integrada en el motor SSAS, llamada VertiPaq. Hasta el
momento, el motor SSAS permitía realizar análisis OLAP en formato relacional (ROLAP),
multidimensional (MOLAP) o híbrido (HOLAP). Con la nueva edición de SQL Server el
motor SSAS integra el OLAP en memoria.

A diferencia de los modos OLAP anteriores, VertiPaq no está accesible al desarrollador en


BIDS o al administrador en SSMS. La creación de soluciones PowerPivot se hace en Excel
2010. La difusión y la compartición se realizan mediante una granja de servidores
SharePoint, incluyendo una instancia SSAS en modo VertiPaq.

Por el contrario, igual que en las anteriores versiones de SSAS, la tecnología VertiPaq está
totalmente soportada por el cliente MS OLAP. Si antes era posible crear y explotar cubos
locales SSAS únicamente con el cliente, ahora es posible construir carpetas PowerPivot. A
diferencia del cubo local, la carpeta PowerPivot contiene la aplicación de BI más los datos,
es decir las tablas y los gráficos dinámicos para leer los datos.

Este libro no considera los cubos locales. El porvenir de esta tecnología no parece muy claro tras la
aparición de PowerPivot, con mejor rendimiento, menos voluminoso y más rico en
funcionalidades.

1. Despliegue

PowerPivot es una tecnología asociada a SQL Server.

PowerPivot puede utilizarse de forma gratuita siempre que se esté en posesión de una
licencia Excel 2010, descargando el componente completo (véase
http://www.powerpivot.com/). Gracias a esta licencia, el usuario puede construir carpetas
PowerPivot sin mayor limitación que los recursos del puesto local.

Las carpetas PowerPivot con carpetas Excel que contienen además datos OLAP. A este
respecto, pueden difundirse como cualquier otro archivo (de gran tamaño): por carpeta
compartida en red, en un servidor de archivos, en un portal Web como SharePoint. La
compresión de los datos OLAP registrados en PowerPivot es muy eficaz, aunque no parece
apropiado enviar por correo electrónico una carpeta que contenga algunas decenas de miles
de filas.

Hasta aquí, PowerPivot para Excel supone una solución económica para la empresa, incluso
gratuita si los puestos de usuario ya tienen una licencia de Excel 2010.

Cualquier elaboración de cuadros de mando implica su difusión. La compartición o copia


de archivos no es una buena solución a la hora de dirigir la empresa. Por ello Microsoft
proporciona una plataforma completa que toma en cuenta:

ShareVideos
 La distribución en un portal SharePoint de compartición.
 El acceso desde un cliente ligero gracias a SharePoint Excel Services, que permiten
leer los datos sin tener instalado Excel.
 El procesamiento regular y la actualización de los datos OLAP incluidos en las
carpetas PowerPivot en el motor SSAS VertiPaq.
 La carga de la caché de datos para acelerar las lecturas.
 La interfaz de administración completa del conjunto.

La plataforma PowerPivot para SharePoint está compuesta por servidores SQL Server 2008
R2 edición Entreprise o superior, y SharePoint 2010 edición Entreprise. Se ha construido
específicamente para evolucionar fácilmente en cuanto a potencia.

2. El BI en autoservicio

Con la solución PowerPivot, Microsoft proporciona a la empresa la posibilidad de ofrecer a


sus súperusuarios funcionales u operacionales la capacidad de crear sus cuadros de mando
analíticos sin tener que acudir al departamento de desarrollo o al de I+D. El BI está
disponible en autoservicio para estos usuarios. Gracias a la plataforma SharePoint, lo
gestionan los administradores de sistemas, de bases de datos y de SharePoint.

Esta oferta no supone una alternativa respecto a la oferta tradicional, sino que la
complementa. La creación de carpetas PowerPivot se basa en datos preparados. Por un lado
sería ilusorio esperar poder usar esta tecnología directamente sobre una base de datos
OLTP no desnormalizada. Por el contrario, aprovecha la potencia de los Data Marts ya
desnormalizados o de archivos planos. Por otro lado, el equipo decisional podrá usarla para
construir y difundir informes dinámicos que ya forman parte de la oferta de Microsoft.

El informe dinámico se basa generalmente en una capa de presentación que lanza consultas sobre
una base de datos en función de la interacción con el usuario. La solución PowerPivot unifica
ambas, y está disponible en el formato de una hoja de cálculo Excel para los diseñadores o los
puestos portátiles. Se difunde en modo Web en el seno de la empresa.

PowerPivot responde a la problemática de los puestos portátiles que hasta ahora tenían que
usar cubos locales con un cliente pesado, bien Excel o bien una aplicación de terceros.
PowerPivot va mucho más allá que un cubo local puesto que tiene en cuenta no sólo los
datos y su restitución sino también su producción y su difusión.

La cuota de mercado de OLAP en memoria es cada año mayor. Microsoft no podía dejar sin
respuesta esta demanda. El eslogan Self-service Business Intelligence es puro marketing... En la
realidad se trata de proporcionar la capacidad de hacer análisis en memoria en el puesto de
trabajo con la posibilidad de compartir este análisis en un portal corporativo.

ShareVideos
3. Principios de PowerPivot

El diseño de una hoja de cálculo PowerPivot se divide en dos partes: preparar de los datos y
dar formato del informe.

Preparar los datos consiste en cargar los datos y crear un modelo OLAP en memoria.

Dar formato al informe es una actividad dedicada a la creación en una hoja Excel de un
cuadro de mando y las gráficas dinámicas en base a estos datos.

a. Preparar los datos

Se añade un conjunto de datos OLAP a la hoja Excel: PowerPivot. Está representado por
una ventana dedicada separada de la hoja de cálculo.

Esta ventana de PowerPivot permite importar tablas a partir de los orígenes de datos.

PowerPivot soporta tres tipos de origen de datos:

 Copiar/pegar: es posible pegar datos desde el Portapapeles en PowerPivot y crear


así una tabla, que quedará congelada, de modo que no será posible actualizarla.
 La tabla vinculada: desde la hoja de cálculo Excel, es posible enviar una tabla a
PowerPivot para formar una tabla, llamada tabla vinculada. Cualquier modificación
de la tabla de origen provoca la actualización de la tabla vinculada.
 Fuentes de datos externos: PowerPivot soporta numerosas fuentes de datos externos.
Es posible crear tablas PowerPivot a partir de estas fuentes externas. Ciertas fuentes
permiten realizar consultas. La acción de importar permite filtrar sobre cualquier
columna y/o suprimir columnas. Una tabla así creada también puede actualizarse.

Se proporciona conectividad con los siguientes orígenes de datos (véase


http://technet.microsoft.com/es-es/library/ee835543.aspx, Orígenes de datos
admitidos en libros PowerPivot):

o Bases de datos Access


o Bases de datos relacionales SQL Server
o SQL Server Parallel Data Warehouse
o Bases de datos relacionales Oracle, Teradata, Informix, IBM DB2 y Sybase
o Otras bases de datos relacionales (proveedor OLE DB para ODBC)
o Archivos de texto (ficheros planos)
o Archivos de Microsoft Excel
o Libros PowerPivot
o Cubos Analysis Services
o Flujo de datos (se puede utilizar para importar datos a partir de informes
SSRS y Atom)
o Archivos de conexión de base de datos Office (.odc)

ShareVideos
Las tablas están constituidas por columnas. La ventana de PowerPivot muestra cada tabla
en una pestaña. Cada tabla es similar a una hoja de cálculo de Excel en modo de sólo
lectura. En cada tabla el usuario puede:

 Definir el tipo de datos de la columna: texto, número decimal, número entero,


divisa, fecha y booleano.
 Aplicar filtros: la funcionalidad de filtrado es similar a la que existe en la hoja de
cálculo Excel. Aplica un filtro a los datos de PowerPivot, lo cual tiene un impacto
sobre los datos que se muestran en Excel. Atención, el usuario puede modificar
fácilmente este filtro, y no prohíbe la lectura de datos ocultos.

El menú de filtrado proporciona a su vez la opción de ordenación. La ordenación de datos en


PowerPivot no tiene impacto alguno sobre su correspondencia en Excel. La ordenación se realiza
directamente en cada informe.

 Renombrar las columnas: para darles nombres de negocio.


 Ocultar columnas: en la tabla PowerPivot y/o en Excel. Ciertas columnas sirven
para crear una columna calculada y una vez se ha hecho este trabajo ya no es
interesante visualizarlas en PowerPivot. Las columnas usadas para las uniones no
deberían aparecer en la interfaz de usuario en la hoja Excel.

Igual que para el cubo SSAS, es muy importante lograr que el usuario final no se ahogue en una
cantidad demasiado grande de atributos.

 Crear una columna calculada: el usuario puede introducir una fórmula DAX a la
derecha de la tabla para generar automáticamente una columna. El lenguaje DAX es
un nuevo lenguaje dedicado a PowerPivot. Es la síntesis entre MDX y las funciones
Excel.
 Crear una relación con otra tabla. El predecesor de PowerPivot es la tabla de
referencias cruzadas que funcionaba a partir de una tabla plana completamente
desnormalizada. PowerPivot soporta la creación de relaciones entre tablas, lo que
permite crear modelos en estrella, más complejos. Se crea una relación entre una
tabla y una tabla de búsqueda. No soporta claves de búsqueda compuestas. Si una
relación se basa en varias columnas es preciso crear en ambas tablas una columna
calculada que permita construir una clave de síntesis única.

Para crear una relación, la columna de la tabla de búsqueda no debe contener valores vacíos
(BLANK).

ShareVideos
Trate de cargar en PowerPivot solamente datos útiles. Elimine aquellas columnas que no se
utilicen y filtre las filas.

Una vez se ha realizado este trabajo de preparación de los datos, el cubo está creado en
memoria.

A menudo es necesario adjuntar medidas. Esta operación se hace en la hoja Excel. La


medida PowerPivot es muy próxima a la medida calculada SSAS. Se expresa mediante el
lenguaje DAX. Contrariamente a la columna calculada que se evalúa a nivel atómico
cuando se produce la carga de datos, la medida se calcula a nivel agregado en el momento
de su restitución en el informe.

Si bien forma parte del modelo de datos PowerPivot, Microsoft ha considerado más claro situar la
administración de las medidas en la hoja Excel y no en la ventana de PowerPivot.

A continuación se debe preparar el formato de los informes en la hoja Excel.

Es fácil realizar varias iteraciones entre la preparación del formato en la hoja Excel y la preparación
de los datos en la ventana de PowerPivot para afinar el modelo de datos.

Con PowerPivot para Excel, Microsoft pone al fin a disposición de los usuarios una herramienta
verdaderamente sencilla para modelar los informes analíticos. El diseño del modelo en PowerPivot
no tiene nada que ver con el trabajo de creación de la base de datos SSAS o de un informe SSRS en
BIDS. Los conceptos que se explican más arriba son mucho más sencillos.

b. Dar formato al informe

La creación de un informe en una hoja de cálculo se inicia a partir de la ventana de


PowerPivot gracias al menú Vista. También puede crearse desde una hoja Excel a través
del menú PowerPivot.

El informe PowerPivot está constituido por tablas dinámicas (TD), gráficos dinámicos y
segmentos. Estos objetos estándar de Excel, a diferencia de las TD, poseen dos zonas más:
las segmentaciones de datos verticales y las segmentaciones de datos horizontales.

Es igual para los gráficos, que se construyen a partir de TD. Para cada gráfico dinámico que
creemos Excel genera una TD en una pestaña. A menudo se aconseja ocultar estas pestañas.

ShareVideos
Las segmentaciones de datos verticales crean los segmentos a la izquierda, y las
horizontales crean segmentos encima (véase la sección Funcionalidades de Excel).

En la creación del informe las segmentaciones se aplican sobre el conjunto de tablas y


gráficos del informe. Agregar estas dos zonas a una TD supone una facilidad a la hora de
crear el informe, aunque como las segmentaciones son comunes a varias TD, este modo de
presentación puede crear cierta confusión.

Libros PowerPivot
A primera vista no hay nada que permita distinguir un libro PowerPivot de un libro Excel
2010 estándar. Se apoya por un lado en funcionalidades estándar de Excel, y por otro en un
complemento dedicado, que se utiliza en la etapa de concepción del modelo de datos.

1. Funcionalidades Excel

PowerPivot está perfectamente integrado en Excel y aprovecha sus funcionalidades, en


particular:

 Los segmentos (en inglés, slicers): los segmentos son una novedad de Excel 2010,
ligados a la construcción de tablas dinámicas (TD) y de gráficos. El segmento se
comporta como un filtro sobre los datos, aunque su interfaz de usuario es
funcionalmente más rica: se adapta al contexto del conjunto de los datos que filtra.
Un filtro permite escoger aquellos miembros de una columna para filtrar el conjunto
de datos en base a ellos. Cuando hay varios filtros aplicados sobre un mismo
conjunto de datos, el segmento indica visualmente los miembros presentes en la
selección en curso.

Por ejemplo, si los helados de pistacho sólo se venden en España y en Francia, el


filtro sobre el segmento de productos limitado a estos helados tiene un impacto
directo y visual sobre el segmento de los países.

En otro ejemplo, un clic sobre el segmento NES16 (nomenclatura económica de


síntesis) para seleccionar puestos de trabajo relacionados con el comercio filtra los
resultados de la TD, pero también permite visualizar en el segmento NES5 aquellos
sectores económicos relacionadas con el comercio (en nuestro caso el sector
Comercio).

El segmento NES5 se adapta visualmente al contexto seleccionado en NES16.

ShareVideos
Contrariamente a un filtro de informe, un segmento puede filtrar varios TD y
gráficos.

 Las tablas dinámicas (o PivotTable): las TD son muy conocidas entre los usuarios
de datos SSAS.
 Los gráficos dinámicos: los gráficos ofrecen una visualización gráfica de la TD.
Como siempre, el gráfico requiere una TD para funcionar, y este sigue siendo el
caso en Excel 2010.
 Las fórmulas de cubo: aparecidas en Excel 2007, las fórmulas de cubo permiten
visualizar los datos de un origen de datos SSAS en una celda. Con Excel 2010,
funcionan también con la fuente de datos PowerPivot.

=MIEMBROCUBO("PowerPivot Data";"[Provincia trabajo].[Provincia


trabajo].&[PONTEVEDRA]")
=VALORCUBO("PowerPivot Data";$B10;C$3)

 Los Formatos condicionales: barras de visualización de datos, juegos de iconos,


colores de fondo... Todos estos elementos permiten aumentar el impacto visual de
los datos decisionales.
 Las tablas: habitualmente creadas haciendo clic en el botón Filtrar, una tabla Excel
puede servir de origen de datos a PowerPivot. Así, de forma indirecta, es muy fácil
implementar una solución de análisis introduciendo manualmente los valores:
objetivos, escenarios...

2. Funcionalidades PowerPivot

El componente PowerPivot se añade automáticamente a Excel descargando el Add-In


correspondiente (véase http://www.powerpivot.com/).

La instalación del componente provoca la aparición en la barra de menú de Excel de una


pestaña nueva llamada PowerPivot.

Desde esta cinta el usuario puede:

 Abrir la Ventana de PowerPivot.


 Administrar las Medidas.
 Crear un Informe.
 Administrar los Datos de Excel (tablas vinculadas, es decir los datos que
PowerPivot toma como origen en el libro Excel).

Desde la ventana de PowerPivot el usuario puede:

 Importar datos gracias al menú Archivo.


 Administrar las tablas y sus orígenes en el menú Tabla.

ShareVideos
 Administrar las columnas de las tablas en el menú Columna.
 Crear informes Excel usando el menú Vista.

Ejemplo DADS
1. Presentación del ejemplo

Para mostrar las capacidades de PowerPivot un ejemplo debe basarse en un volumen de


datos importante (varios millones de filas como mínimo).

Puede encontrar en los archivos complementarios de descarga de este libro un ejemplo


extraído y adaptado del instituto nacional de estadística del gobierno francés (INSEE, que
pone a disposición del ciudadano todo tipo de datos estadísticos).

El archivo de detalle con el que trabajaremos, DADS 2006 - puestos y salarios -, está
compuesto de un muestreo de datos individuales anonimizados, resultado de la explotación
estadística de las Declaraciones de Renta Anuales en Francia. Estos datos permiten realizar
un análisis de los empleos y los salarios según la naturaleza del empleo (duración, tipo de
contrato, remuneración...), las características del trabajador (sexo, edad, formación...) y del
empresario (sector de actividad, lugar de implantación, tamaño...).

Estos archivos han sido adaptados al castellano y están disponibles para la descarga en los
archivos complementarios de descarga de este libro en este capítulo. Los archivos
originales en formato dBase pueden encontrarse en la página Web del INSEE (véase
http://www.insee.fr/fr/themes/detail.asp?ref_id=fd-dads2006, DADS - puestos y salarios -
2006).

El formato dBase puede abrirse directamente en Excel como un libro. También puede importarse a
través de un origen de datos ODBC.

En nuestro ejemplo vamos a centrarnos en el archivo de puestos de trabajo que contiene


2.788.163 observaciones, es decir, la doceava parte del conjunto total de las declaraciones
de renta. El mismo individuo puede ocupar varios puestos de trabajo durante el mismo año.
Este archivo describe los puestos de trabajo y no los individuos.

El conjunto de archivos y de datos está descrito con precisión en el sitio Web de INSEE
(véase http:// www.insee.fr/fr/themes/detail.asp?ref_id=fd-
dads2006&page=fichiers_detail/DADS2006/description. htm, Description des fichiers).

 Cree una carpeta para guardar los datos, por ejemplo C:\INSEE.

ShareVideos
 Descargue el archivo nacional de puestos de trabajo en Francia para 2006 en
formato dBase (DADS2006_postes06_dbase.zip) de los archivos complementarios
de descarga de este libro.
 Descomprima el archivo en la carpeta creada, se crea el subdirectorio
C:\INSEE\DADS2006_postes06_dbase.

La carpeta creada contiene tres archivos dBase y un archivo Excel:

 postes06.dbf: contiene los registros que describen los puestos de trabajo en 2006.
 varlist_postes06.dbf: contiene la lista de variables (columnas) del archivo.
 varmod_postes06.dbf: contiene, para cada variable, la descripción de las
modalidades, es decir los valores que puede tomar la variable.
 varmod_postes06.xlsx: contiene, para cada variable, los valores que puede tomar,
adaptados al castellano.

Ciertas variables puede que no estén informadas. En este caso el campo se deja vacío. Se define
una modalidad vacía.

En nuestro ejemplo nos interesaremos por las variables siguientes como ejes de análisis:

 Sexo del trabajador (SEXO).


 Nomenclatura económica de síntesis (NES): se trata de una nomenclatura utilizada
por el INSEE para clasificar los sectores de actividad económica en Francia, y que
constituye una jerarquía de tres niveles (NES5, NES16 y NES36) correspondiente a
tres variables.
 Tamaño de la empresa, en tramos (TREFF).
 Salario bruto, en tramos (TRBRUTO).
 Categoría socioprofesional del empleado (CS).
 Dominio de empleo (DOMEMPL).
 Indicador de puesto anexo/no anexo (FILT).

Los informes que se generan son:

 El número de puestos: corresponde con el número de observaciones, o hechos, es


decir los registros en el archivo de puestos.
 La duración del contrato expresada en días (DURACION): este análisis nos lleva a
una duración media.
 El número de horas trabajadas (NHORAS): este análisis nos lleva a un valor medio.
Los trabajadores a domicilio o trabajadores representantes comerciales que no
declaran horas trabajadas no se toman en cuenta en este valor medio (todos los
registros con número de horas igual a cero se eliminan a la hora de calcular el valor
medio).

ShareVideos
Como un archivo no representa más que a la doceava parte de los puestos totales nacionales
se aplica una corrección para crear una medida llamada número de puestos corregido. La
corrección se aplicará sobre el primer nivel de la Nomenclatura económica de síntesis. Para
cada una de las cinco modalidades se aplica un coeficiente corrector que nos permite
ponderar cada puesto ligado a esta modalidad.

2. Creación del juego de datos PowerPivot


Creación del libro

1. Abra Excel 2010.


2. Se crea automáticamente un libro nuevo. Guárdelo con el nombre DADS2006 en
una carpeta llamada C:\INSEE.

Puestos de trabajo

Nuestra primera etapa consiste en importar la tabla de hechos: la tabla de puestos de


trabajo. Como los datos se cargan en memoria es especialmente importante no importar
más que los datos útiles.

1. Abra la Ventana de PowerPivot haciendo clic en el botón de la pestaña PowerPivot.


Al principio la Ventana de PowerPivot está vacía. No contiene ninguna pestaña.
2. Para importar los datos desde el formato dBase seleccione la opción de menú
Archivo - Obtener datos externos desde otros orígenes.
3. Escoja el origen de datos Otros (OLEDB/ODBC) entre las bases de datos
relacionales.

1. Introduzca el Nombre descriptivo de esta conexión, por ejemplo puestos.


2. Haga clic en el botón Generar.
3. En la pestaña Conexión de las Propiedades de vínculo de datos, seleccione Usar la
cadena de conexión, y a continuación Generar.

1. La pantalla Seleccionar origen de datos permite crear un origen de datos. Haga clic
en Nuevo.
2. Seleccione el driver dBase Microsoft dBase driver (*.dbf). Haga clic en Siguiente >.
3. Indique el nombre del archivo origen de datos: EjemploDads y haga clic en
Siguiente >.
4. Haga clic en Finalizar.
5. En la ventana Configuración de ODBC dBASE, desmarque la casilla Usar el
directorio actual y Seleccione el directorio que contenga los datos:
C:\insee\DADS2006_postes06_dbase.

ShareVideos
1. Haga clic en Aceptar.
2. Seleccione el origen de datos creado y haga clic en Aceptar dos veces para volver a
la pantalla Propiedades de vínculo de datos.
3. En la zona Escriba el catálogo inicial introduzca de nuevo la ruta de los datos:
C:\insee\DADS2006_postes06_dbase.

1. Haga clic en Aceptar para volver al Asistente para la importación de tablas. La


cadena de conexión aparece informada.
2. Haga clic en Siguiente >.
3. Seleccione la primera opción, Seleccionar en lista de tablas y vistas para elegir datos
para importar.

1. Seleccione la Tabla de origen postes06, asígnele un Nombre descriptivo, por


ejemplo puestos de trabajo 2006.

Es preciso cargar toda la tabla, y aunque no hemos aplicado ningún filtro sobre sus filas hay no
obstante muchas columnas que son inútiles para nuestro análisis.

1. Haga clic en el botón Vista previa y filtrar.


2. Una casilla en lo alto de cada columna permite seleccionar o no esa columna.
Deseleccione las siguientes columnas: REGR, DEPR, REGT, DEPT, PCS,
TYP_EMPLOI, AT, ETP, DATDEB, DATFIN, CPFD, ETRANGER, AGE, POND.

1. A continuación haga clic en Aceptar.


2. Haga clic en Finalizar.
3. El Asistente para la importación de tablas carga la totalidad de la tabla. Esta
operación toma varios minutos.
4. Cuando termine la importación, haga clic en Cerrar.
5. Los datos se importan en una tabla. La tabla aparece bajo la forma de una pestaña
en la Ventana de PowerPivot.
6. Ordene los datos como desee. Puede verificar que el hecho de ordenar 3 millones de
filas es instantáneo.

ShareVideos
Esta etapa ha sido algo complicada por el hecho de la creación de una conexión a la base de datos
en formato dBase, que requiere cierta configuración de las capas ODBC de Windows. Sin duda le
será más sencillo consultar una fuente de datos SQL Server por ejemplo.

Sexo del trabajador

Las modalidades de la variable Sexo están definidas en el archivo varmod_postes06.xlsx.


La lectura de este archivo nos muestra que no existe ningún valor desconocido para esta
variable llamada SEXO.

Teóricamente es posible importar estas modalidades en una tabla aplicando el mismo método que
cuando antes hemos aplicado un filtro sobre la variable Sexo. El driver dBase proporcionado por
Windows no es suficiente.

Para crear la tabla de dimensión Sexo, utilice el portapapeles.

1. Haga doble clic en el archivo varmod_postes06.xlsx y ábralo con Excel.


2. Seleccione y copie las cuatro celdas (B106:C107) que definen los dos valores de la
variable Sexo.
3. En la Ventana de PowerPivot del primer libro DADS2006.xlsx haga clic en la barra
de herramientas en el botón Pegar el contenido del Portapapeles en una nueva tabla
de PowerPivot, y seleccione Pegar en una nueva tabla.
4. Elija el nombre de la tabla: Sexo.
5. Desmarque la casilla de la parte inferior: Usar primera fila como encabezados de
columna.

1. Haga clic en Aceptar.


2. Se ha creado una nueva pestaña y una nueva tabla en la Ventana de PowerPivot.
3. Renombre la Columna1 por CODIGO.
4. Renombre la Columna2 por Sexo.
5. En el menú seleccione la opción Columna, Ocultar y mostrar.
6. Desmarque el CODIGO En tabla dinámica.

1. Valide haciendo clic en Aceptar. El usuario final no verá más que el campo Sexo.

Falta por enlazar esta tabla con la tabla de hechos mediante una relación.

1. En el menú seleccione Tabla - Relaciones - Crear relación.


2. Enlace la Columna SEXO de la Tabla Postes2006 con la Columna de búsqueda
relacionada CODIGO de la Tabla de búsqueda relacionada Sexo.

ShareVideos
1. Valide haciendo clic en el botón Crear.

Las columnas enlazadas están identificadas por un pequeño icono en la cabecera.

Nomenclatura económica de síntesis NES5

Esta nomenclatura debería servir para corregir la muestra gracias a coeficientes de


ponderación definidos a este nivel.

Los posibles valores de esta variable están definidos en el archivo varmod_postes06.xlsx.


La lectura de este archivo nos muestra que existen valores no informados.

Para crear una muestra, importaremos los datos en una hoja del libro PowerPivot.

1. Haga doble clic en el archivo varmod_postes06.xlsx para abrirlo en Excel.


2. Seleccione y copie las doce celdas (B100:C105) que definen los 6 valores de la
variable NES5.
3. En el libro, pegue estos valores en la celda A2.
4. Introduzca en A1: CODIGO.
5. Introduzca en B1: NES5.
6. Introduzca en C1: Coeficiente.
7. Introduzca en A2, en lugar de un código vacío, el código N/A.

A B C
1 CODIGO NES5 Coeficiente
2 N/A No informado 12
3 ES Agricultura 12
4 ET Industria 12
5 EU Construcción 12
6 EW Comercio 12
7 EX Servicios 12

Para importar esta tabla en PowerPivot, hay que crear una tabla vinculada, de modo que el
usuario pueda modificar los coeficientes y observar el impacto de su modificación.

1. Seleccione estos datos.


2. En la pestaña PowerPivot de la barra de trabajo de la hoja Excel haga clic en Crear
tabla vinculada.

ShareVideos
1. Aparece la ventana Crear una tabla. Asegúrese que la casilla Mi tabla tiene
encabezados está marcada. Valide haciendo clic en Aceptar.
2. La Ventana de PowerPivot contiene una nueva pestaña Tabla1. Renómbrela por
NES5. Un pequeño icono en la pestaña identifica que se trata de una tabla
vinculada.

1. En el menú seleccione Columna - Ocultar y mostrar. Desmarque CODIGO y


Coeficiente En tabla dinámica. Haga clic en Aceptar.

Para crear el vínculo con la tabla de hechos, es preciso reemplazar el valor vacío de la tabla
de hechos por el valor N/A. Esta operación se realiza creando una columna calculada.

1. En la Ventana de PowerPivot, seleccione la pestaña de la tabla de hechos puestos de


trabajo 2006.
2. En la columna de la derecha Agregue una columna, e introduzca la siguiente
expresión:

=IF(ISBLANK(’puestos de trabajo 2006’[NES5]),"N/A",’puestos de trabajo


2006’[NES5])

A diferencia de Excel la introducción manual de una expresión se hace únicamente en la barra de


fórmulas que se encuentra entre la barra de herramientas y la tabla.

1. Renombre la columna creada por NES5NA.


2. Cree la relación entre ambas tablas a partir de esta columna.

El coeficiente es útil para calcular el número de puestos corregido, es decir la suma de los
coeficientes. Para ello vamos a incluir este valor en la tabla de hechos.

1. En la columna de la derecha Agregue una columna e introduzca la siguiente


expresión:

=RELATED(NES5[Coeficiente])

1. Renombre la columna creada por Numero de puestos corregido.

Nomenclatura económica de síntesis NES16

ShareVideos
Los posibles valores de esta variable están definidos en el archivo varmod_postes06.xlsx.
Si leemos el archivo comprobamos que no existen valores no informados.

PowerPivot gestiona muy bien los valores vacíos en la tabla de hechos siempre y cuando no
haya valores vacíos en la columna de la tabla de búsqueda.

Para crear esta tabla copiaremos sus datos, salvo el valor vacío, y los pegaremos
directamente en la Ventana de PowerPivot.

1. Haga doble clic en el archivo varmod_postes06.xlsx para abrirlo en Excel.


2. Seleccione y copie las celdas (B46:C62) que definen los 16 valores de la variable.
3. En la Ventana de PowerPivot del primer libro DADS2006.xlsx haga clic en la barra
de herramientas en el botón Pegar el contenido del Portapapeles en una nueva tabla
de PowerPivot, y seleccione Pegar en nueva tabla.
4. Indique el nombre de la tabla: NES16.
5. Desmarque la casilla de la parte inferior: Usar primera fila como encabezados de
columna.
6. Renombre la Columna1 por CODIGO.
7. Renombre la Columna2 por NES16.
8. Seleccione la opción de menú Columna - Ocultar y mostrar. Desmarque el
CODIGO En tabla dinámica. Haga clic en Aceptar.
9. Seleccione la opción de menú Tabla - Relaciones - Crear relación.
10. Enlace la Columna NES16 de la Tabla puestos de trabajo 2006 con la Columna de
búsqueda relacionada CODIGO de la Tabla de búsqueda relacionada NES16.
Valide.

Nomenclatura económica de síntesis NES36

Repita las operaciones anteriores para NES36 (no posee valores vacíos).

Tamaño de la empresa, en tramos (TREFF)

Repita las operaciones anteriores para TREFF (equivalente al tamaño de la empresa, tiene
un valor vacío que no debe copiarse).

Salario bruto, en tramos (TRBRUTO)

Repita las operaciones anteriores para TRBRUTO (equivalente al salario bruto, no posee
valores vacíos).

Categoría socioprofesional del empleado (CS)

Repita las operaciones anteriores para CS (no posee valores vacíos).

Dominio de empleo (DOMEMPL)

ShareVideos
Repita las operaciones anteriores para DOMEMPL (tiene un valor vacío que no debe
copiarse).

Indicador de puesto anexo/no anexo (FILT)

Repita las operaciones anteriores para FILT (no posee valores vacíos).

Columnas de la tabla de hechos

Ya hemos creado todas las relaciones del esquema en estrella. Quedaría ocultar las
columnas de relación en la tabla de hechos y preparar los valores.

1. En la Ventana de PowerPivot del primer libro DADS2006.xlsx haga clic en la


pestaña puestos de trabajo 2006 para volver a la tabla de hechos.
2. En el menú seleccione la opción Columna - Ocultar y mostrar. Sólo debe ser visible
la columna Numero de puestos corregido en la TD. La columna NES5, que se ha
reemplazado por una columna calculada, puede ocultarse en PowerPivot.

1. Haga clic en Aceptar.


2. En la ventana de PowerPivot seleccione la columna NHORAS, modifique su valor
Tipo de datos por Número entero. Renómbrela por Número Horas.
3. Seleccione la columna DURACION y modifique su valor Tipo de datos por
Número entero. Renómbrela por Duración.

Ciertas columnas de claves, como CS, son enteros importados en modo texto. Una conversión de
estas columnas en las tablas de hechos y de búsqueda supone una optimización que deberíamos
considerar.

El juego de datos de PowerPivot está listo. Sólo queda agregar las medidas calculadas en la
ventana del libro Excel. Esta operación no puede hacerse mientras no se ha creado un
informe.

1. Seleccione Vista - Gráfico y tabla - Vertical.


2. Seleccione a continuación Nueva hoja de cálculo y valide haciendo clic en Aceptar.
3. En el menú superior de PowerPivot, seleccione Nueva medida.

El número de puestos simplemente es igual al número de filas de la tabla de hechos.

=COUNTROWS(’puestos de trabajo 2006’)

1. Informe la Configuración de medida como se muestra a continuación:

ShareVideos
1. Haga clic en Aceptar para crear la medida.

La Duración media es igual a la media aritmética de las duraciones.

=AVERAGE(’puestos de trabajo 2006’[Duración])

Por último, el Número de horas medio debe tener en cuenta el hecho de que ciertas
categorías no informan esta columna.

=IFERROR(SUM(’puestos de trabajo 2006’[Número


horas])/COUNTROWS(FILTER(’puestos
de trabajo2006’,’puestos de trabajo 2006’[Número horas]>0)),BLANK())

La fórmula anterior gestiona correctamente el caso de la división por cero.

1. Agregue las medidas Duración media y Número de horas medio.

El juego de datos PowerPivot está listo.

Quedaría dar formato al informe.

3. Dar formato al informe

El informe que hemos creado está compuesto por un gráfico y una TD. Ambos
componentes son independientes aunque pueden tener columnas en común. Los segmentos
están definidos gracias a las zonas segmentaciones de datos verticales y segmentaciones de
datos horizontales del panel llamado Lista de campos de PowerPivot.

Vamos a incluir la jerarquía de Nomenclaturas económicas de síntesis en la segmentación


vertical.

 Deslice los campos NES5, NES16 y NES36 en las Segmentaciones de datos


verticales.

Excel crea automáticamente tres segmentos en la parte izquierda de la hoja. Puede observar
que seleccionando un valor de NES5, NES16 y NES36 se actualizan los datos
automáticamente. Esta relación se efectúa a nivel de la tabla de hechos (que contiene 3
millones de filas).

1. Agregue a las Segmentaciones de datos horizontales, los campos Sexo, Anexo,


Categoría Socioprofesional (CS) y Tamaño (TREFF).
2. Complemente la gráfica y la TD a su gusto.

ShareVideos
En este paso puede verificar el impacto que tiene una modificación del coeficiente en la Hoja1
sobre los datos visualizados.

1. Modifique los coeficientes en la Hoja1.


2. Haga clic en Actualizar todo en la cinta de PowerPivot.
3. Vuelva al informe y seleccione el gráfico que muestra el número de puestos
corregido.
4. En la pestaña Análisis haga clic en Actualizar y observe el cambio en los valores.

Los segmentos creados están vinculados a los dos componentes. Es posible modificar esta
configuración para ligar un segmento sólo a un componente, o bien para ligarlo a otros situados
quizá en otras hojas del libro Excel. Para determinar las conexiones de un segmento seleccione
uno de ellos en la hoja Excel y busque la opción: Segmento, Herramientas de Segmentación de
datos, Opciones, conexiones de tabla dinámica.

1. Guarde los cambios y cierre el libro. Salga de Excel.

Observe que el libro pesa algo menos de 8 Mb, tamaño habitual y aceptable para un cubo más un
informe de 2,8 millones de filas.

4. Publicación en SharePoint

Existen dos opciones para publicar un libro PowerPivot en SharePoint:

 Publicación como un documento normal, que los usuarios pueden abrir siempre y
cuando tengan Excel 2010 instalado más el Add-In de PowerPivot para Excel.
 Publicación sobre Excel Services y PowerPivot para SharePoint.

Excel Services por sí solo no soporta PowerPivot, necesita el componente PowerPivot para
SharePoint con el motor SSAS VertiPaq (véase http://msdn.microsoft.com/es-
es/library/ee210653.aspx, Componentes y herramientas de PowerPivot).

La publicación del libro PowerPivot sobre SharePoint se hace de forma natural.

1. En la barra de Excel seleccione Archivo - Guardar y enviar.


2. Haga clic en Guardar en SharePoint.

ShareVideos
3. Seleccione una Ubicación y a continuación haga clic en Guardar como.
4. Seleccione el nombre.
5. Para realizar una publicación basada en Excel Services haga clic en el botón
Opciones de Excel Services. Esta pantalla le permite seleccionar las hojas que
quiere publicar.

Cuando se crea un libro para publicarlo en Excel Services con PowerPivot para Sharepoint,
se aconseja respetar cierto número de puntos (véase http://technet.microsoft.com/es-
es/library/ee835561.aspx, Guardar en SharePoint).

Una vez se ha publicado el libro sobre Excel Services con PowerPivot para Sharepoint,
PowerPivot proporciona las siguientes opciones:

 Procesamiento periódico del juego de datos PowerPivot, actualizando la lectura de


los orígenes de datos. Esto presupone que todo está configurado correctamente a
nivel de red y de cortafuegos en el libro para habilitar esta lectura.
 Exponer los datos del libro PowerPivot en un servicio Web. El consumo del
servicio Web se realiza a partir de cualquier aplicación que sea capaz de interpretar
los contenidos de una base de datos SSAS como origen de datos. La cadena de
conexión que tenemos que proporcionar es la dirección del libro
(http://NombreDelServidor/Galeria Powerpivot/Libro.xlsx).
 Crear un informe SSRS con el libro PowerPivot seleccionado como origen de datos.
 Crear otro libro PowerPivot con el libro PowerPivot seleccionado como origen de
datos.
 Administrar los libros PowerPivot. En efecto, la distribución de PowerPivot para
SharePoint incluye un cuadro de mando para su administración. Toda la
información acerca de la actividad PowerPivot y las acciones posibles se centralizan
en un cuadro de mando.

ShareVideos

You might also like