You are on page 1of 31

Creando una Dimensin de tiempo en SQL Server

Analysis Services
Si queremos comenzar a crear un cubo para anlisis de datos en SQL Server Analysis Services
(SSAS) versiones 2005, 200 y 200 !2, en lo primero que debemos pensar es en la dimensi"n de
tiempo# $ es que no tiene sentido crear un cubo para analizar nuestras ventas, inventario, datos de
salud, o cualquier otro %ec%o, sin tener la perspectiva del tiempo que le d& sentido a dic%os datos#
'na dimensi"n de tiempo de(ine adems la )ranularidad en que nuestros datos en las tablas de
%ec%os %an sido )enerados, ya sea a nivel de a*o, semestre, trimestre, mes, d+a, %ora, minuto,
se)undo, por nombrar al)unas escalas# Si bien es cierto que a pesar de que nuestros datos en las
tablas de %ec%os est&n )uardados a un nivel )ranular de tiempo en espec+(ico, por decir ventas a
nivel de mes, ventas a nivel de d+a, etc#, es una buena prctica crear una dimensi"n de tiempo que
incluya todos los niveles de )ranularidad que podr+an usarse no s"lo en las tablas de %ec%os ((act
tables) que se vayan a crear a%ora requieran, sino tambi&n las que se puedan tener a lo lar)o de la
vida de nuestra soluci"n# -or tanto es recomendable por lo menos crear una dimensi"n de tiempo
con los niveles. a*o/semestre/trimestre/mes/d+a#
0n otro caso, si la industria en la que est&n traba1ando lo requiere, se podr+an considerar otros
niveles de tiempo menores a d+a, como %ora/minuto/se)undo, pero la estrate)ia de
implementaci"n de ese nivel de )ranularidad puede ser muy distinta a la que vamos a ver %oy en
este art+culo para el caso de d+a como m+nimo nivel )ranular#
'na de las (acilidades que nos brinda SSAS con respecto a la dimensi"n de tiempo, es que &l
mismo la )enere por nosotros incluso sin tener una tabla (+sica de tiempo pre2e3istente en nuestro
data 4are%ouse# 0ste es el escenario que vamos a e3plorar en esta oportunidad, %ablaremos de
las otras opciones que tiene SSAS ms adelante#
0l prop"sito de este art+culo es entender c"mo SSAS nos (acilita la vida en t&rminos de )enerar
nuestra propia dimensi"n de tiempo, que lue)o adems podremos personalizar a nuestro )usto# 0l
se)undo prop"sito es que podamos aprender c"mo SSAS %ace el traba1o y entender su
(uncionamiento, de modo que nosotros podamos crear nuestra propia dimensi"n de tiempo desde
cero si al)o no nos )usta# 56omencemos7
1. Creando el Data Warehouse
8amos a crear una nueva base de datos con nombre MiDataWarehouse en SQL Server 200 !2,
la cual ser nuestro 9ata:are%ouse (icticio sin tabla u otro ob1eto al)uno.
2. Creando el proyecto de Analysis Services
A%ora crearemos un nuevo proyecto de SSAS en el Business Intelligence Development Studio
(BIDS) de la versi"n de SQL Server 200!2.
4. Creando el Data Source
6reamos un nuevo 9ata Source que apunte %acia nuestra base de datos MiDataWarehouse:
5. Creando el Data Source ie!
A%ora procedemos a crear nuestro 9ata Source 8ie4, en donde posteriormente SSAS )enerar la
de(inici"n de nuestra dimensi"n de tiempo de manera automtica.
6omo mencion& anteriormente, no tenemos tabla al)una en nuestra base de datos, as+ que no
tenemos nada que a)re)ar al 9ata Source 8ie4.
". Creando la dimensin de tiempo
A%ora procedemos a crear nuestra dimensi"n de tiempo en SSAS.
La pantalla que se muestra a continuaci"n es clave, ya que nos permite indicar a SSAS, de qu&
(orma )eneraremos nuestra nueva dimensi"n, en este caso la dimensi"n de tiempo.
;os detenemos aqu+ un momento para e3plicar las opciones que se muestran.
'se an e3istin) table . Se crear una nueva dimensi"n en nuestra base de datos <LA-
(SSAS) basada en una tabla pre#e$istente de nuestro 9ata Source 8ie4 (y por tanto en nuestro
9:)#
=enerate a time table in t%e data source . Se crear una dimensi"n de tiempo en nuestro
9:, su respectiva de(inici"n en el 9ata Source 8ie4 y la dimensi"n de tiempo en nuestra base de
datos <LA-#
=enerate a time table on t%e server . Se crear la dimensi"n de tiempo en nuestra base de
datos <LA- similar a la opci"n anterior# La posible desventa1a de esta opci"n es que no nos crear
nada en nuestro 9ata Source 8ie4 que podamos modi(icar si as+ lo deseamos# >ampoco necesita
de una dimensi"n e3istente en nuestro 9ata :are%ouse#
=enerate a non2time table in t%e data source . Se crear una dimensi"n distinta a una
dimensi"n de tiempo en nuestro 9:, su respectiva de(inici"n en el 9ata Source 8ie4 y la
dimensi"n correspondiente en nuestra base de datos <LA-#
6omo se muestra en la ima)en anterior, seleccionamos la opci"n Generate a time table in the data
source para que SSAS sea el que se encar)ue de todo el traba1o#
La si)uiente pantalla del asistente (9imension :izard) nos pide el ran)o de (ec%as para los cuales
queremos )enerar datos en nueva dimensi"n de tiempo# 9e i)ual manera nos pide seleccionar cul
son los periodos de tiempo que queremos )enerar# 0n mi caso %e seleccionado todas las opciones
pero es muy probable que no todos necesiten la opci"n de ?al( $ear (semestre) o la de >en 9ays
(diez d+as) por mencionar al)una de las menos comunes# @inalmente, esta pantalla nos pide indicar
cul ser el idioma en que se deben )enerar los datos de nuestra dimensi"n de tiempo y como se
muestra a continuaci"n, no incluye el idioma 0spa*ol (lo cual es una de(iciencia siendo el 0spa*ol
el se)undo o tercer len)ua1e ms %ablado del mundo)#
'na de las (ormas superar esta de(iciencia ser+a de(iniendo una traduccin (dimension translation)
para cada atributo# -ueden revisar ms detalles de c"mo %acer esto en A9e(inin) and Bro4sin)
>ranslationsC (%ttp.DDtec%net#microso(t#comDen2usDlibraryDmsEFFG0(SQL#H0)#asp3)# ;osotros
se)uiremos en(ocados en c"mo SSAS )enera la dimensi"n de tiempo (aunque sea en In)l&s) y las
relaciones entre sus atributos#
La si)uiente pantalla del asistente, pre)unta por los tipos de calendario que queremos )enerar en
nuestra dimensi"n# Los ms usados son Regular calendar (calendario natural) y iscal
calendar (calendario (iscal) que son las que seleccionaremos# 0n el caso del calendario (iscal, es
posible indicar cul ser el d+a y el mes en que se inicia dic%o calendario de acuerdo a nuestra
or)anizaci"n, as+ mismo el nombre del a*o (iscal en comparaci"n con el nombre del a*o
calendario.
0sta es toda la in(ormaci"n que SSAS necesita para )enerar nuestra dimensi"n de tiempo en el
lado <LA- (SSAS)# A%ora en la pantalla (inal que se muestra a continuaci"n seleccionaremos
el chec!bo" que diceGenerate schema no# para que en este mismo momento SSAS nos cree
tambi&n la tabla (+sica en nuestro 9ata :are%ouse y su de(inici"n en nuestro 9ata Source 8ie4#
A%ora aparecer un nuevo asistente que nos )uiar a trav&s del proceso de la )eneraci"n del
esquema (+sico y l")ico que soportarn nuestra dimensi"n de tiempo, as+ como los datos
(miembros) que contendr.
La primera pre)unta del asistente es acerca del 9ata Source 8ie4 (9S8) en que deseamos crear
la de(inici"n de la nueva dimensi"n# 0n nuestro caso seleccionaremos el mismo 9S8 que ya
%emos creado al inicio de esta soluci"n y que %asta el momento no contiene elemento al)uno.
A%ora vienen las pre)untas con respecto a la creaci"n (+sica de la tabla sobre nuestro 9ata
:are%ouse incluyendo si queremos poblar de datos nuestra nueva tabla.
'na pantalla ms antes de terminar y esta se re(iere a la convenci"n de nombres o estndares a
usar en las columnas de la nueva tabla.
'na vez (inalizado el asistente, se inicia el proceso de )eneraci"n del esquema y de la tabla (+sica,
el cual puede ser e3aminado en detalle en la si)uiente pantalla.
%. Anali&ando la estructura de la nueva dimensin de tiempo
$a tenemos nuestro nuevo esquema y estamos listos para ver la ma)ia detrs del espectculo,
comenzando por la nueva tabla dbo$%ime creada en nuestra base de datos MiDataWare&ouse#
;oten que el asistente %a creado columnas para cada uno de los periodos de tiempo si)uiendo las
convenciones de nombre seleccionadas.
Si %acemos una consulta a la tabla )enerada, veremos que tambi&n se %an )enerado los datos
apropiados para cada una de las columnas en el ran)o de (ec%as indicado.
6"mo mencionamos anteriormente en este art+culo, adems de la tabla (+sica en nuestro 9:, se
%a creado la de(inici"n de nuestra dimensi"n y la dimensi"n en s+ dentro de nuestro proyecto de
SSAS# ;uestro 9ata Source 8ie4 a%ora tiene la tabla A>imeC.
Los atributos de nuestra A(lamanteC y nueva dimensi"n de tiempo se muestran a continuaci"n.
0l asistente tambi&n nos %a creado una serie de 1erarqu+as naturales# 0stas son.
9espu&s de identi(icar los componentes bsicos de nuestra dimensi"n, ya estamos listos para
e3plorar los resultados de nuestra nueva dimensi"n de tiempo pero no sin antes procesar la
misma.
'. ($plorando los datos de la nueva dimensin de tiempo
@inalmente, ya podemos e3plorar los resultados de nuestra nueva dimensi"n de tiempo# Si se
posicionan en la pesta*a ABro4serC, pueden seleccionar cada uno de los atributos de la dimensi"n
o una de las 1erarqu+as# 0n nuestro caso, seleccionamos la 1erarqu+a 'ear ( %rimester ( Month )
%en Da*s ( Date.
Los resultados se muestran como esperbamos, de i)ual manera para la 1erarqu+a 'ear ( &al+
'ear ( ,uarter ( Month ( %en Da*s ) Date.
>ambi&n tenemos 1erarqu+as para el calendario (iscal como iscal 'ear ( iscal &al+ 'ear ( iscal
,uarter ( iscal Month ( iscal Da*.
). *actores claves en el dise+o de una dimensin de tiempo
9e acuerdo a mi e3periencia, muc%o sucede que cuando construimos una dimensi"n de tiempo por
nuestros propios medios, la nave)aci"n de las 1erarqu+as creadas no (unciona como nosotros
esperamos, con los miembros de datos asi)nados al padre incorrecto (por e1emplo una (ec%a
dentro del mes incorrecto, o un trimestre dentro del a*o incorrecto)# 9ebido a esto, debemos tener
claro que una de las claves de &3ito de cualquier dimensi"n de SSAS es la de(inici"n de relaciones
entre sus atributos# 9e esto depende que nuestras 1erarqu+as (uncionen correctamente y por otro
lado tienen un )ran impacto en los tiempos de respuesta cuando el usuario nave)ue sobre el cubo
al que pertenezca la dimensi"n#
La dimensi"n de tiempo )enerada %a sido de(inida con las si)uientes relaciones entre sus
atributos.
?e subrayado en color ro1o los atributos de la 1erarqu+a 'ear ( &al+ 'ear ( ,uarter ( Month ( %en
Da*s ( Date, para pro(undizar un poco en los detalles de sus atributos -lave .rimaria y -olumna a
Mostrar# La propiedad-lave .rimaria (Jey6olumns), de(ine c"mo SSAS va a di(erenciar
internamente a cada uno de los miembros del atributo, los cuales tienen que ser valores Knicos#
9ebemos usar la propiedad 6olumna a Lostrar (9isplay 6olumn), en el caso de querer mostrar
una columna distinta a la usada en la clave primaria o cuando &sta est& compuesta de dos o ms
columnas# 0sto nos ayudar a evitar posibles errores de nave)aci"n tanto de la dimensi"n de
tiempo como de cualquier otra dimensi"n#
0n el caso del atributo 'ear, &ste de(ine como su /e*-olumn a la columna 'ear de nuestra
tabla %ime, y como0ame-olumn a la columna $earM0ame.
Si e3ploramos los datos que contienen ests dos columnas vemos lo si)uiente.
?a)o &n(asis nuevamente sobre la importancia de la propiedad /e*-olumn de un atributo, el cual
debe contener un valor Knico para cada miembro de datos incluyendo a las 1erarqu+as a donde est&
asi)nado# 0n el caso del atributo 'ear, no se tiene mayores problemas ya que no es posible
Acon(undirC un a*o con otro, ya que el valor del a*o en s+ es su identi(icador Knico#
0n cambio, con un atributo como &al+ 'ear (semestre) deber+amos tener un poco ms de cuidado,
ya que si revisan su relaci"n con el atributo 'ear en la ima)en del Dimension 1sage, esta es de
varios2a2uno, es decir, varios (dos) semestres en un a*o# -or tanto, en este conte3to un semestre
no vive por s+ solo, sino que le pertenece a un a*o en espec+(ico# 0s decir, si nos piden el semestre
E, nos tienen que decir siempre el a*o al que se estn re(iriendo# -or e1emplo. semestre E del
20E0, semestre 2 del 20E0, etc#
-or tanto el /e*-olumn para &al+'ear debe de identi(icar Knicamente a cada semestre dentro de
un a*o# 0n el caso de nuestra dimensi"n, las propiedades /e*-olumn y 0ame-olumn estn
de(inidas de la si)uiente manera.
Los datos que almacenan dic%as columnas se muestran a continuaci"n.
;oten, que la columna &al+M$ear de(inida como /e*-olumn, tiene sus valores incluyendo no s"lo
el mes de inicio del semestre (0E N enero 2 " 0G 2 1ulio), sino tambi&n el a*o al que pertenece
(EH5020E20E y EH5020G20E para los que se muestran en la ima)en)#
,-. /,0123A43(5 Si la columna ?al(M$ear s"lo tuviera el semestre y no el a*o (por e1emplo.
Semestre E, Semestre 2), %abr+a la necesidad de de(inir un Jey6olumn compuesto que no s"lo
incluya la columna ?al(2$ear sino tambi&n la columna $ear, ya que ambas en su combinaci"n,
%ar+an Knico a cada miembro de datos#
0l comportamiento de &al+2'ear es similar al de %rimester y Month de nuestra 1erarqu+a# 0s decir,
requiere que la columna que se use como /e*-olumn, incluya en su de(inici"n, el a*o al que
pertenece y no solamente el nombre del periodo# 0n el caso del atributo 9ate, &ste se comporta de
manera similar a 'ear, ya que cada (ec%a por s+ misma es auto2su(iciente para no ser con(undida
con otra (ec%a del calendario#
As+ se ve el atributo Month (mes) de nuestra dimensi"n.
A%ora veamos sus propiedades.
6omo vimos, la de(inici"n de Month es id&ntica a la de &al+2'ear# -ero a%ora veamos c"mo se ven
los datos del atributo Month 2+ 'ear, el cul no pertenece a nin)una 1erarqu+a sino como atributo
independiente de nuestra dimensi"n de tiempo.
0n este caso Month 2+ 'ear s"lo nos muestra los doce meses del a*o sin indicar a qu& a*o
pertenece# 0ste tipo de atributo es necesario, para cuando necesitemos crear al)Kn in(orme que
permita el anlisis comparativo de los mismos meses para distintos a*os, como por e1emplo.
Month 1 Month 2 Month 3
2009
2010
2011
9ebido a esto las propiedades del atributo Month o+ 'ear %an sido de(inidas como si)ue.
Las columnas Month32+3'ear y el Month32+3'ear30ame contienen los si)uientes valores.
6omo se muestra en la Kltima ima)en, a di(erencia de la columna Month, Month32+3'ear no
contiene el a*o como parte de sus valores, solamente el periodo de tiempo al que pertenece, en
este caso el mes# 0sto permite que todos los meses de 0nero (Month 4) de cualquier a*o o
trimestre, aparezca como si (uese uno solo# Lo mismo para todos los dems meses del a*o#
16. (l cierre
6omo resumir, podemos se*alar lo si)uiente.
SQL Server Analysis Services, nos puede a%orrar muc%o el traba1o de crear una dimensi"n
de tiempo para nuestra soluci"n <LA- incluso sin tener previamente la dimensi"n creada en
nuestro 9ata :are%ouse relacional#
-odemos crear una dimensi"n de tiempo y su tabla en nuestro 9ata :are%ouse usando el
asistente para la creaci"n de dimensiones de SSAS, y lue)o personalizar la misma para de1arla a
nuestro )usto como borrar al)Kn atributo o modi(icar al)una 1erarqu+a#
-odemos optar tambi&n por crear nuestra dimensi"n de tiempo desde cero (por e1emplo si
la queremos %acer en 0spa*ol) si)uiendo las me1ores prcticas de acuerdo a como SSAS crea su
dimensi"n de tiempo#
0l asistente para la creaci"n de la dimensi"n de SSAS no soporta el idioma 0spa*ol# 'na
(orma para tener nuestra dimensi"n de tiempo en este idioma, es crearla por e1emplo en In)l&s y
modi(icarla para usar la capaci"n de >ranslations de SSAS#
A di(erencia de una base de datos relacional en donde el centro de todo son las relaciones
entre tablas# La de(inici"n de relaciones entre atributos es la parte nuclear que de(ine el
comportamiento e in(luye en los tiempos de respuesta de nuestro cubo#
<tro aspecto clave para obtener el comportamiento deseado de nuestras 1erarqu+as y
atributos es la de(inici"n de las claves# 9ebemos indicar en la propiedad /e*-olumn, la columna
que %a)a a nuestro atributo Knico de acuerdo al conte3to en donde se vaya a usar, ya sea como
parte de una 1erarqu+a o como atributo independiente#
$a con nuestra nueva dimensi"n de tiempo, estamos listos para a)re)ando las dems
dimensiones a nuestra soluci"n <LA- y posteriormente el o los cubos que sean necesarios#

You might also like