13 octubre 2009

Manejando hechos que (aún) no tenemos su dimensión (early arriving facts) en SSIS

Probablemente esto les ha pasado antes o les puede pasar cuando creen sus paquetes de Integration Services para cargar sus tabla de facts: tienen que procesar unos hechos (facts) que han llegado antes de que la dimensión (o mejor dicho el miembro) que generó el hecho exista en su tabla dimensión. Por ejemplo, tienen una factura para un cliente que por algún motivo no ha sido ingresado (aún) a su dimensión de Productos.

Básicamente hay 2 opciones para manejar estos “early arriving facts”. La primera es (tal como lo hace Project REAL), implementar un Script Component que inserte el valor que no se encuentre en la dimensión (que no haga “match”) y que lo integre al “cache” del Lookup Component original usando código de .NET. La siguiente extraída de la documentación del proyecto (Project REAL ETL Design Practices), muestra el diseño de esta estrategia:

clip_image002

 

La segunda forma (que llamó mi atención por ser más simple y efectiva), es la de usar un segundo Lookup Component para los valores que no se encuentren en el primero, llamando a un Stored Procedure para que haga el trabajo y lo inserte al cache de este segundo Lookup (configurando para que se ejecute con Partial Cache). Todo este detalle lo encuentran en este excelente post del Customer Advisory Team (CAT) de SQL (en inglés). Aquí algunas imágenes de ese artículo:

clip_image002_2 

clip_image004_thumb

 clip_image006_2

CREATE PROCEDURE Generate_SK_A
  @NK_A CHAR(10) /* The key to find a surrogate for */
AS
SET NOCOUNT ON

/* Prevent race conditions */
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

/* Check if we already have the key (procedure is idempotent) */
DECLARE @SK_A INT
SELECT @SK_A = SK_A
FROM Dim_A
WHERE NK_A = @NK_A

/* The natural key was not found, generate a new one */
IF @SK_A IS NULL BEGIN
INSERT Dim_A (NK_A) VALUES (@NK_A)
SET @SK_A = SCOPE_IDENTITY()
END

/* Return the result. 
  IMPORTANT: must return same format is the SELECT statement we replaced */
SELECT @SK_A AS SK_A, @NK_A AS NK_A

Ambas opciones son muy buenas para solucionar nuestro problema con los “early arriving facts”, cuál escogen?

Alan

11 octubre 2009

Excel 2010 Technical Preview - Parte 7: Mejoras al Conditional Formatting

Después de unos días muy intensivos por los proyectos que estoy trabajando, ya estoy de vuelta para seguir con la parte 7 de nuestra serie acerca de las novedades en Excel 2010 para Business Intelligence. Hoy nos toca presentar un resumen de las mejoras a la capacidad de aplicar formato condicional (Conditional Formatting) a nuestros datos ya sea dentro o fuera de un Pivot Table.

Si no han tenido la oportunidad de usar esta capacidad de Excel 2007, les puedo decir que el Conditional Formatting es una gran ayuda para visualizar nuestros datos de una manera gráfica, que nos ayuda a entender de más rápida y directa lo que tenemos en nuestros números. A continuación algunas imágenes de lo que se puede hacer desde ya con la versión 2007:

image

image image

Ya que todos tenemos ya una idea básica de cómo podemos usar estos Conditional Formatting, voy ahora a listar y comentar las mejoras o novedades que hasta ahora aparecen en el Technical Preview liberado en Julio de la versión de Excel 2010. Cabe resaltar que no voy a ahondar mucho en cada punto ya que revisando la web encontre estos excelentes post que equipo de producto de Excel acaba de publicar (en inglés): More Conditional Formating Features in Excel 2010 y Data Bar Improvements en Excel 2010.

Y las novedades son:

1. Soporte para referenciar celdas en hojas (sheets) distintas a la actual (Cross-Sheet References): Hasta ahora, en Excel 2007, nos debemos de limitar a que cuando queremos crear nuestras reglas para la asignación de íconos dentro de un formato condicional basándose en los datos de otras celdas, esos valores deben de existir en la misma hoja de Excel. Pues ahora esta limitación ha sido removida y podemos hacer referencias a otras hojas (worksheets) dentro de nuestro archivo (workbook):

image image

image image

2. Mejoras en el manejo de errores: Este punto se refiere a que en Excel 2007, algunos errores de cálculo en nuestras celdas, pueden hacer que nuestro Conditional Formatting deje de funcionar (por ejemplo un #N/A o un #DIV/0). En esta nueva versión,, un error de este tipo sera totalmente ignorado por el Conditional Formatting sin afectar a las demás celdas con cálculos correctos:

Excel 2007 vs Excel 2010:

image  image

3. Mejoras en el desempeño: Esta es una parte muy importante, principalmente si tenemos aplicado el Conditional Formatting a una o varias hojas con muchos datos. La primera mejora, se basa en que para el caso del formato aplicado sobre celdas producto de fórmulas o de otras celdas, el formato condicional sólo se re-evaluará, si alguna de las dependencias de la fórmula cambia. La segunda mejora con respecto en el desempeño consiste en que el motor guarda un cache del formato condicional aplicado, para que no tenga que ser re-calculado o re-aplicado en el caso de que el usuario simplemente esté navegando por la hoja (scrolling) sin cambiar ningún valor.

4. Mejoras en los Data Bar – Tamaños proporcionales: En Excel 2007, cuando aplicamos un Conditional Formatting de tipo Data Bar, si bien obtenemos el resultado general esperado dependiendo de los números que estemos analizando (pintando un relleno con mayor intensidad para el valor más alto y con un relleno menos intenso para el valor más bajo. O al revés si los números que analizamos tienen esta naturaleza, como los costos por ejemplo), la forma de relleno de las celdas no se pinta proporcionalmente al número que se está representando en comparación con los demás Valores, lo cual puede llevar a un entendimiento incorrecto de nuestros datos. En Excel 2010 ha sido superado, de manera que ahora los rellenos de las celdas participantes, son pintados proporcionalmente a los números que existan en nuestro dataset.

Data Bars en Excel 2007 vs Excel 2010:

image image

Más ejemplos en Excel 2010:

image image image

5. Mejoras en los Data Bar – Opciones de formato (rellenos y bordes): Al usar los Data Bars, muchas veces perdemos visibilidad de nuestro datos en las celdas, aunque el efecto de “gradient” o degradado de los colores tratan de minimizar esa pérdida de visibilidad. Por otro lado muchas veces cuando tenemos Data Bars en valores muy similares, no es muy fácil por el mismo efecto de degradado, no es muy fácil darnos cuenta de cuál de las celdas tiene un mayor o menor valor. Para mejorar la visibilidad ahora se agregan nuevas opciones para presentar los Data Bar.

La primera consiste en hacer que el relleno de los mismos no sea de tipo degradado sino de tipo completo.

image

Ventana de diálogo “More Rules…” en Excel 2007 vs Excel 2010

image  image 

Data Bars con degradado (gradient) vs relleno sólido (solid fill)

image  image

Como pueden ver en las dos imágenes anteriores (degradado vs relleno sólido), en el primer caso, si nos fijamos sólamente en el relleno del Data Bar y no en los números, es difícil notar si el año 1996 o el 1997 es el que más nacimientos tuvo. En cambio si el relleno lo configuramos de tipo sólido la diferencia es mucho más clara.

La segunda de las mejoras en los Data Bars, nos permite mantener el relleno de tipo degradado o sólido pero incluyendo un borde para resaltar sus límites::

image

6. Mejoras en los Data Bar – Valores negativos: Esta mejora es algo que estaba siendo pedido a gritos en vario de los forums de Excel, y se refiere a mostrar los Data Bars de manera “correcta” para los valores negativos. Una opción es mostrando el Data Bar del valor negativo en dirección contraria a los valores negativos, y la otra es mostrar los negativos en la misma dirección de los positivos pero con otro color.

Negativos en Excel 2007 vs Excel 2010:

image image

image

Bueno, con estas mejoras en los Data Bars, dejamos momentáneamente las serie de Excel 2010 y sus mejoras para este mundito de Business Intelligence. Nos queda pendiente presentar cómo Excel 2010 manejará las Medidas Calculadas (Calculated Measures), ya que hasta el momento de escribir este post, aún no está habilitada la opción que posibilitará esta posibilidad.

Hasta la próxima.

Alan