Muestra como construir soluciones con Microsoft SQL Server Analysis Services 2005, tanto para desarrolladores que deseen construir soluciones OLAP, como para administradores que posteriormente tendrán que mantenerlas. No sólo se centra en el desarrollo de los cubos OLAP en sí, sino que abarca otras tareas interesantes, como el despliegue, la administración, la creación de aplicaciones .Net que mediante la jerarquía de clases AMO y mediante ADOMD.Net acceden a datos almancenados en Analysis Services, acceso desde reporting services etc. Como su título indica da una visión de toda la plataforma Microsoft Business Intelligence.
Para ampliar más información en Amazon, pincha aquí.
Introducción.
El tratamiento de fechas en SQL Server es uno de temas que más preguntas generan en los foros y grupos de noticias. SQL Server tiene los tipos de datos datetime y smalldatetime para almacenar datos de fecha y hora.
No hay tipos de datos diferentes de hora y fecha para almacenar sólo horas o sólo fechas. Si sólo se especifica una hora cuando se establece un valor datetime o smalldatetime, el valor predeterminado de la fecha es el 1 de enero de 1900. Si sólo se especifica una fecha, la hora será, de forma predeterminada, 12:00 a.m. (medianoche), es decir, las 00:00.
Nota Importante: En SQL Server 2008 sí que tenemos como novedad tipos de datos para almacenar sólo la fecha y sólo la hora. Por tanto todo lo que contamos a continuación se puede solucionar usando los nuevos tipos de datos.
Tipo de datos Datetime.
Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisión de un trescientosavo de segundo, o 3,33 milisegundos.
SQL Server rechaza todos los valores que no puede reconocer como fechas entre 1753 y 9999.
Tipo de datos Smalldatetime.
Datos de fecha y hora desde el 1 de enero de 1900 al 6 de junio de 2079, con precisión de minutos. Entonces si se utiliza un valor smalldatetime los segundos y milisegundos son siempre 0.
Diferencia entre Datetime y Smalldatetime.
SQL Server almacena internamente los valores de tipo de datos datetime como enteros de 4 bytes y los valores smalldatetime como enteros de 2 bytes.
Funciones de fecha y hora (Transact-SQL)
Estas funciones escalares realizan una operación sobre un valor de fecha y hora de entrada, y devuelven un valor de cadena, numérico o de fecha y hora:
DATEADD
DATEDIFF
DATENAME
DATEPART
GETDATE
DAY
MONTH
YEAR
Trabajando con fechas ...
Con algunos pequeños ejemplos trataremos de resolver los mayores problemas para trabajar con estos tipos de datos. Para ello utilizaremos las funciones CAST y CONVERT.
Separando Fecha y Hora.
Declare @Fecha datetime
Set @Fecha = Getdate()
Select Convert(Char(10), @Fecha,112) As SoloFecha, Convert(Char(8), @Fecha, 108) As SoloHora
SoloFecha SoloHora
---------- --------
20010803 07:35:02
(1 row(s) affected)
Otra forma de conseguir el mismo resultado:
Declare @Fecha datetime
Set @Fecha = Getdate()
SELECT Convert(varchar, @Fecha, 3) AS SoloFecha, Convert(varchar, @Fecha, 8)
Operaciones con Fechas (diferencia entre dos fechas).
Obtener diferencia de meses, dias, minutos, etc. entre dos fechas.
Para realizar operaciones entre dos fechas MSSQL tiene la función DATEDIFF. Veamos algunos ejemplos de cómo utilizarla:
declare @FechaIngreso datetime
declare @FechaEgreso datetime
select @FechaIngreso = '19981231 15:15'
select @FechaEgreso = '20021005 10:10'
Select
DATEDIFF(dd, @FechaIngreso, @FechaEgreso) AS Dias,
DATEDIFF(mm, @FechaIngreso, @FechaEgreso) AS Meses,
DATEDIFF(mi, @FechaIngreso, @FechaEgreso) AS Minutos
Para obtener otras diferencias podemos recurrir a la siguiente tabla:
Parte de la fecha Abreviaturas año aa, aaaa trimestre tt, t mes mm, m día del año da, a día dd, d semana sm, ss hora Hs minuto mi, n segundo ss, s milisegundo MsOtro ejemplo de DATEDIFF en donde recuperados los datos de la ultima semana partiendo de la fecha del día:
SELECT TusDatos
FROM TuTabla
WHERE
DATEDIFF(dd, TuFecha, GetDate()) <= 7
Continuando con las operaciones con las fechas, veamos como podemos hacer para sumar, restar, días, minutos, meses, a una fecha, para ello utilizamos la función DATEADD:
select convert(varchar(12), DATEADD(month, -1, getdate()), 106)
as 'un mes atrás'
select convert(varchar(12), DATEADD (week, -1, getdate()), 106)
as 'una semana atrás'
select convert(varchar(12), DATEADD (day, -1, getdate()), 106) as 'ayer'
Sugerencia:
Estos ejemplos que mostramos a continuación devolverían el mismo resultados que las consultas anteriores, pero, si, siempre hay un pero.... hace un tiempo nuestro compañero Fernando Guerrero me sugirió no utilizarlo pues este truco no está soportado oficialmente por SQL Server ni por el estándar ANSI.
select convert(varchar(12), getdate()-7), 106) as 'una semana atrás'
select convert(varchar(12), getdate()-1), 106) as 'Ayer'
Funciona, pero no sabemos hasta cuando.
Ampliar información:
Puede consultar en los B.O.L. (Books OnLine - Libros en Pantalla) cualquiera de las instrucciones citadas anteriormente.
También puede consultar los artículos y ejemplos publicados en http://www.portalsql.com
Allí busque la palabra 'fechas' y obtendrá todos los artículos publicados sobre el tema.
Se puede definir una columna de valor incremental al momento de crear su tabla o alterar su estructura.
Adicionalmente, se puede definir una "semilla" que se utilizara como valor inicial, en la primera fila, mientras que se utilizara el valor "incremento" para ir calculando los siguientes.
Para realizar esta tarea desde el Administrador Corporativo, bien en la creación o en la modificación de una tabla, tenemos los campos: identidad (identity), iniciación de identidad, e incremento de identidad.
Podemos utilizar cualquier tipo de dato numérico, en la figura anterior hemos utilizado un int, cuyo valor inicial es 100, y su incremento 1.
En el siguiente ejemplo, crea la misma tabla "alumnos" con un campo que representa
un código de identificación que tendrá valores a partir de 100:
CREATE TABLE alumnos (Nombre char(20), ident int IDENTITY (100,1), curso char(5), edad int null)
En el siguiente ejemplo, se altera una tabla para agregar una columna autoincremental:
ALTER TABLE ex_alumnos ADD ex_alumno_Id INT IDENTITY (100,1)
Usar NOT FOR REPLICATION.
La opción NOT FOR REPLICATION se utiliza en la duplicación de Microsoft® SQL Server™ 2000 para implementar intervalos de valores de identidad en un entorno con particiones. La opción NOT FOR REPLICATION es especialmente útil en una duplicación transaccional o de mezcla cuando una tabla publicada se divide en particiones con filas de varios sitios.
Cuando un agente de duplicación se conecta con una tabla con cualquier identificador de inicio de sesión, se activan todas las opciones NOT FOR REPLICATION de la tabla. Cuando se establece la opción, SQL Server 2000 mantiene los valores de identidad originales de las filas agregadas por el agente de duplicación, pero sigue incrementando el valor de identidad en las filas agregadas por otros usuarios. Cuando un usuario agrega una nueva fila a la tabla, el valor de identidad se incrementa de forma normal. Cuando un agente de duplicación duplica dicha fila en un suscriptor, el valor de identidad no se ve modificado cuando la fila se inserta en la tabla del suscriptor.
Por ejemplo, considere una tabla que contenga filas insertadas desde dos orígenes: el Publicador A y el Publicador B. Las filas insertadas en el Publicador A se identifican con valores crecientes entre 1 y 1000, y las filas del Publicador B se identifican con valores entre 1001 y 2000. Si un proceso del Publicador A inserta una fila localmente en la tabla, SQL Server asigna a la primera fila el valor 1, a la siguiente fila el valor 2 y así sucesivamente, en incrementos automáticos. De forma similar, si un proceso del Publicador B inserta una fila localmente en la tabla, a la primera fila se le asigna el valor 1001, a la siguiente fila el valor 1002, y así sucesivamente. Cuando se duplican las filas del Publicador A en el B, los valores de identidad siguen siendo 1, 2, etc., pero los valores de inicio locales no se reinician en el Publicador B.
Independientemente del papel que desempeñe en la duplicación, la propiedad IDENTITY no requiere que sea única por sí misma, simplemente inserta el valor siguiente. Aunque puede proporcionar un valor explícito con SET IDENTITY INSERT, dicha función no es apropiada para la duplicación, ya que también vuelve a iniciar el valor. La opción NOT FOR REPLICATION se ha creado específicamente para las aplicaciones que utilizan la duplicación. Por ejemplo, sin esta opción, en cuanto la primera fila del Publicador B (con valor 1001) se propagara al Publicador A, el siguiente valor de identidad del Publicador A sería 1002. La opción NOT FOR REPLICATION es una forma de indicar a SQL Server 2000 que el proceso de duplicación prescinde de dicho valor cuando suministra uno explícito y que el contador local no tiene que reiniciarse. Cada publicador que utilice esta opción obtiene el mismo permiso para no reiniciar el contador.
Se requieren procedimientos almacenados personalizados que utilicen instrucciones INSERT, UPDATE y DELETE con listas de columnas completas, antes de que la duplicación funcione con propiedades de identidad. Si no se utilizan listas de columnas completas, se devolverá un error.
El siguiente ejemplo de código ilustra cómo implementar identidades con intervalos diferentes en cada publicador:
En el Publicador A, empieza por 1 e incrementa de 1 en 1.
CREATE TABLE authors ( COL1 INT IDENTITY (1, 1) NOT FOR REPLICATION PRIMARY KEY )
En el Publicador B, empieza por 1001 y se incrementa de 1 en 1.
CREATE TABLE authors ( COL1 INT IDENTITY (1001, 1) NOT FOR REPLICATION PRIMARY KEY )
Después de activar la opción NOT FOR REPLICATION, las conexiones de los agentes de duplicación con el Publicador A insertan filas con valores como 1, 2, 3 y 4. Dichas filas se duplican en el Publicador B sin ser modificadas (es decir, 1, 2, 3 y 4). Las conexiones desde agentes de duplicación con el Publicador B obtienen los valores 1001, 1002, 1003 y 1004. Dichas filas se duplican en el Publicador A sin ser modificadas. Cuando se distribuyen o se mezclan todos los datos, ambos Publicadores tienen los valores 1, 2, 3, 4, 1001, 1002, 1003 y 1004. El valor de la siguiente fila insertada localmente en el Publicador A es 5. El valor de la siguiente fila insertada localmente en el Publicador B es 1005.
Se recomienda utilizar siempre la opción NOT FOR REPLICATION con la restricción CHECK para asegurar que los valores de identidad asignados están dentro del intervalo permitido. Por ejemplo:
CREATE TABLE sales
(sale_id INT IDENTITY(100001,1)
NOT FOR REPLICATION
CHECK NOT FOR REPLICATION (sale_id <= 200000),
sales_region CHAR(2),
CONSTRAINT id_pk PRIMARY KEY (sale_id)
)
Incluso si alguien utiliza SET IDENTITY INSERT, todos los valores insertados localmente quedan dentro del intervalo definido. Sin embargo, los procesos de duplicación siguen quedando fuera de la comprobación.
Nota Si va a utilizar la duplicación transaccional con la opción de actualización de suscriptores inmediata, no utilice el diseño IDENTITY NOT FOR REPLICATION. En su lugar, cree la propiedad IDENTITY sólo en el publicador y haga que el suscriptor utilice sólo el tipo de datos de base (por ejemplo, int). Así, el siguiente valor de identidad siempre se genera en el publicador.
Usar DBCC CHECKIDENT.
Se utiliza para cambiar o alterar el contenido de una columna auto incremental (IDENTITY).
Sintaxis
DBCC CHECKIDENT ( 'table_name' [ ,
{ NORESEED | { RESEED [ , ew_reseed_value ] } } ] )
En este ejemplo se establece el valor de identidad actual de la tabla jobs en 30.
USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO
Libro que ayuda a familiarizarse con SQL Server 2005 Integration Services y todos sus componentes.
Son una serie laboratorios con ejemplos didácticos de uso de Integration Services. Tened en cuenta que no esta orientado a ETL en BI, sino que es genérico. A mi modo de ver, le falta que los ejemplos sean un poco más relacionados con casos que se nos presentan en el día a día. Os lo recomiendo si lo que vais buscando es hacer muchas prácticas e ir conociendo el entorno.

Aunque ya tenemos SQL Server 2008, sigo recomendando este libro como punto de partida de la programación Transact SQL.
Libro escrito por Carlos Eduardo Rojas y Fernando G. Guerrero, dos gurús de SQL Server, que nos transmiten a base de ejemplos sus experiencias y conocimientos sobre este producto. Contiene unos 500 ejemplos prácticos. En fin, para cualquiera que leyera habitualmente el foro de SQL Server en esa época, sobran las palabras. Este libro no debe faltar en la biblioteca de un desarrollador.
Nota: este libro ha sido traducido al castellano y ya está disponble en España. Lo podeis encontrar en Diaz de Santos.
Para ampliar la información sobre el libro y ver capítulos de ejemplo: www.sqlserverbyexample.com
Cuando alguien utiliza el término "Cubos SQL" en un buscador, suele estar buscando información sobre OLAP y bases de datos multidimensionales, y posiblemente, iniciándose en este mundillo del OLAP, Data Warehouse y Business Intelligence. Si ese es tu caso estás en uno de los muchos sitios donde encontrarás información sobre el tema.
Puedes revisar las diversas entradas del blog sobre este tema. Te recomiendo que revises las diversas etiquetas que hay en la parte de derecha sobre BI, BI General, Business Intelligence, Analysis Services, SSAS, y cualquier otra que consideres interesante. También tienes las etiquetas asignadas a este post justo aquí abajo al finalizar esta entrada.


El libro de Kirk Haselden, Microsoft SQL Server 2005 Integration Services, es un estupendo libro de referencia. Vale tanto para su lectura completa, como para tenerlo como manual de referencia y consulta, para cada vez que nos surja una duda sobre el producto.
El libro comienza con una introducción y poco a poco va profundizando de una forma fácil de entender en las funcionalidades principales y en los componentes que tenemos disponibles. Trata temas tan variados como la seguridad en los paquetes, creación y despliegue de paquetes, creación de transformaciones personalizadas, migración desde DTS, y un largo etcétera. Indice
Otro libro sobre Business Intelligence, en español, del cual soy co-autor, y es un poco especial, evidentemente no porque yo haya participado, sino por su contenido. Yo lo llamo "una revista grande" :-)
Como ya es tradicional, Solid Quality Mentors organizó su Summit 2008 en Madrid siendo éste el cuarto que se realiza en esa ciudad.
Los contenidos más importantes en el área de Inteligencia de Negocios se encuentran plasmados aquí, así como novedades que podrás utilizar por completo en SQL Server 2008.
Si no has podido asistir, tienes aquí, de primera mano, algunos los contenidos más interesantes, seleccionados y escritos por los propios expositores. Si deseas simplemente ver la agenda completa, aunque ya pasó el evento, y así conocer mejor de qué se trata e intentar asistir el próximo año, pincha aquí.
Contenido del libro:
Para ampliar información y comprarlo (sólo se vende online, es un eBook) accede a Solid Quality Press.
Voy a comenzar una serie de recomendaciones de libros, ya específicos de los diversos componentes que ofrece SQL Server: Integration Services, Analysis Services, Reporting Services.
Expert SQL Server 2005 Integration Services es un libro que no debe faltar en tu biblioteca particular. Sus autores son Brian Knight y Eric Veerman, dos excelentes profesionales y prestigiosos experto en Integration Services. En este libro se hace uso de Integration Services orientándolo a la realización de procesos ETL para carga de Datawarehouses, con múltiples ejemplos para poner en práctica toda la teoría que se explica en él.
Indice:
Para ampliar información en Amazon sobre dicho libro, incluyendo comentarios de los lectores, pincha aquí.
Muy a menudo nos encontramos con este término, cada vez con mayor frecuencia. Aunque aún sigue habiendo mucha gente que no acaba de tener claro qué significa. Espero con este post, aportar mi granito de arena, al entendimiento de este concepto.
Os recomiendo que veáis esta serie de tres videos, todos ellos de menos de 10 minutos, que espero que os ayuden a aclarar estos conceptos y os animo a que apliquéis Business Intelligence en vuestras empresas, sobre todo en un momento de crisis como el actual
Business Intelligence, herramienta fundamental para momentos de crisis - Parte 1
Business Intelligence, herramienta fundamental para momentos de crisis - Parte 2
Business Intelligence, herramienta fundamental para momentos de crisis - Parte 3
Creo que, en estas fechas que pueden ser complicadas para muchos, es importante siempre pensar en positivo e intentar encontrar oportunidades de mejorar en todas las situaciones. Os deseo lo mejor para esta época.
Feliz navidad y próspero 2009.
P.D. El blog entra en una época de reposo hasta la vuelta de vacaciones.
Posted in Teoría
Business Intelligence, herramienta fundamental ante la crisis. Toma ventaja contra el resto de competidores. Conoce en esta serie de tres videos cómo estar un paso por delante y salir de la crisis el primero. Tercer y último video de la serie.