Use nombres amigables

16 07 2007

nomamig

La mayoría de las herramientas de cubos soportan 2 nombres: el físico y el lógico. El lógico es el nombre que normalmente el usuario vé en la aplicación.

Pongase como obligación  el usar nombras amigables en los campos lógicos. Si usted utiliza nombres como si fueran los campos de una tabla de SQL el usuario no lo comprenderá y esto puede hacer que si aplicación fracase.

A ver diganme ¿con que cara le digo a un director, CEO o lo que sea que haga drill-down por desc_prod?

—Vamos a desglosar las ventas por desc_tda… nerd
—¿qué es eso? —desesperado.
—las tiendas. Y ahora vamos a hacer drill-down por desc_prod
—mmmm..
—…así le llamamos en sistemas a la dimensión Producto… Y finalmente está el dato que estamos buscando…el Total
—¿total de qué?¿de ventas, de unidades, de merma, de cumplimiento? desesperado
—de ventas…nerd

Y luego nos quejamos…

Si queremos que nuestra aplicación tenga éxito, que el usuario se enamore de ella y la use;  entonces use nombres amigables.

Technorati tags: , ,





Exportando a Excel

13 07 2007

PseudoTablero1

En columnas: Los 12 meses del año, el acumulado (YTD), el acumulado año pasado.
En renglones: Los 14,348 clientes que la compañia tiene.

Esto es un problema recurrente que seguido encuentro. Los usuarios finales de la información tienen tableros de control, cuadros de mando, o reportes o informes que tienen tablas con:

13 columnas * 14,348 renglones = 200,872 celdas

¿Qués es lo que se vá a controlar aquí?¿qué es lo que se puede monitorear aquí? En menos de 10 segundos…¿quién es el mejor cliente?

Es imposible trabajar con tanta información. Si uno escarba tantito la primera respuesta que encuentra es:

así me lo pidió el usuario…nerd

¿qué es lo que está pasando? Que el usuario no tiene ni la menor idea de como obtener el resultado en la herramienta que usa, así que se le hace más fácil pedir un megareporte que el EXPORTARÁ a EXCEL y el Excel como ya lo sabe manejar, pues ordenará, hará calculos y obtendrá el resultado que quiere…con toda la perdida de tiempo que esto conlleva.

Si analizamos esto:

  • El usuario no sabe como obtener el resultado. ¡Capacitalo! Hace unos meses mientras entrenaba a unos usuarios les mostré como obtener el pareto (80/20) con un clic. Cuando vieron como se hacía me dijeron: “¿sábes cuanto tiempo hemos perdido haciendo esto? Todos los días entramos, ejecutamos la consulta, esperamos a que la regrese, la exportamos a excel, la ordenamos, calculamos el acumulado, le sumamos,…., y nos dá el resultado; ¡nos toma un día!….SI TAN SOLO NOS HUBIERAN CAPACITADO ANTES”
  • Alguién desconoce  silbandoque Excel directamente puede ejecutar Querys sobres bases de datos SQL o Cubos e importarlos directamente a Excel sin necesidad de un intermediario. Hasta te pone un botoncito “actualizar datos”. Pero que necesidad…
  • El servidor se alenta. Pues claro, de repente quieren la venta a nivel articulo, mes por mes de los 43,567 artículos que la empresa vende…me ha tocado unos casos…

Lo mejor es preguntarle al usuario: Si te doy esa información ¿qué es lo que estás buscando en ella? En base a la respuesta le construimos una consulta que le dé la información en un clic, en poco tiempo y que además le permita monitorear esos 100 productos, clientes, 80/20, o la cobranza, o los ingresos, o la merma, etc.; y el usuario se los agradecerá por que puede dedicarle tiempo a lo que realmente le importa: Tomar decisiones.

Technorati tags: , ,





Tablas Particionadas

12 07 2007

TablasParticionadas

¿Cuando está haciendo una consulta en su Data Warehouse el tiempo de respuesta es lento?¿Si se para enfrente del servidor puede ver las lucecitas de los discos duros encendidas a todo lo que dá y el % del procesador se vá al 100% o a niveles altos?¿sus usuarios se quejan?

Estos son sintomas de un grave problema, el DWH ha llegado al límite de su capacidad de acuerdo a como usted ha diseñado el almacenamiento de la información. Si está ustede en este punto, ¡PARTICIONE LAS TABLAS !

El concepto es muy sencillo, en vez almacenar una sola tabla gigantesca lo que se hace es guardarla en pedacitos (particiones); en cada pedacito guardaríamos los datos de un mes, un año o una sucursal. Así, cuando lancemos una consulta que busque los datos de Enero del 2004; la base de datos solo hará la busqueda de la información en la partición que corresponde a ese mes.

Scannin all the data tomado de ibm

Los pedacitos pueden guardarse por ejemplo en diferentes discos duros; de esta forma, puede usted por ejemplo guardar los datos más accesados de la tabla en discos duros rápidos y los datos históricos de años pasados que nadie utiliza en los discos más lentos.

Esto hace que las busquedas se eficienten brutalmente. Los accesos a disco no serán tantos y probablemente se pueda olvidar por un tiempo de comprar un servidor nuevo.

Esto muy importante y critico para las bases de datos y la mayoría lo soporta (les paso las ligas a las páginas donde dice como hacerlo): ORacle, DB2, Sybase, Redbrick (tengo los manuales)….

¿SQLServer de Microsoft? Esta característica viene solo en la versión 2005. Lo que viene en la ayuda de SQLServer 2000 como Vista Particionada es un vil truco sucio para emular la partición de tablas. Lo que no me acuerdo es que versión de SQLServer 2005 se requiere ¿la Enterprise super plus edition?

Esta es una de las características que más alto impacto pueden tener en el desempeño ( o si lo prefieren, performance) de un Data Warehouse pero que por una extraña razón nadie utiliza.

Para los cubos existe el mismo concepto y el mismo impacto. Ahí sí, los Analysis Services de Microsoft soportan cubos particionados de tiempo atrás.

Technorati tags: Data Warehouse,





No use campos CHAR en los descriptores

11 07 2007

En nuestro Data Warehouse debemos omitir el utilizar el tipo de dato CHAR en las tablas de catálogos que forman nuestra base de datos. Este tipo de dato rellena con espacios el contenido de la columna.

Cuando estamos consultando la información desde nuestro query, tablero de control, reporte o Excel notará que las columnas que tienen los nombres de los empleados, ciudades, estados, etc.; tienen muchos espacios a la derecha.

EspaciosEnBlanco

Las columnas se habren demasiado y se vé muy desagradable el reporte. Habrá que entonces manualmente ajustar el ancho de las columnas.

Technorati tags: Data Warehouse, ,





Use llaves numéricas

9 07 2007

CB101333_LoRes

Esto reduce la cantidad de espacio que el DWH ocupa, aumenta la velocidad de respuesta y disminuye el % de procesador ocupado.

Hace unos años participamos en la construcción de un modelo donde se usó el código de barras como llave de la tabla de productos. Si agarran la lata de refresco que tienen sobre el escritorio verán que es un texto de 13 caracteres, así que el tipo de dato lo definimos char(13). Al insertar los millones de transacciones que se generaron en las tiendas, la tabla de hechos se infló; pero no solo la estrella si no cada uno de los índices y agregados que involucraban el código del producto. Así que teníamos una tabla de hechos gigantesca, índices gigantescos y agregados gigantescos de muchos gigas de información.

Solo piensen un momento el trabajo que le cuesta al procesador buscar la cadena ’7501071120091′ en cientos de gigas de información, esa columna lo mismo puede tener como contenido la palabra ‘Monterrey’ o mi nombre u otros códigos de barras.

El algoritmo que usan las bases de datos para textos es mucho más complicado que el que usa para los números ( donde solo tiene que averiguar si es el numero, es más pequeño o más grande ) y esto es el responsable que el mismo modelo en 2 servidores distintos, uno con las llaves varchar, char, text; y el otro con numeros, trabajarán de manera diferente. El que tiene llaves numéricas será más rapido u ocupará menos el procesador y la memoria del servidor.

“oye, pero es que las llaves que vienen del transaccional son caracteres: char o varchar…”

¡Pues inventa una! Definitivamente la carga de los catálogos por parte del ETL se complicará. Ahora tenemos que trarnos la llave original, ver cual es el número que le corresponde en el catálogo e insertarlo en la tabla de hechos. Algo que nos puede ayudar es en los catálogos tener siempre la llave original y la llave numérica generada por nosotros.

En resumen: si quieren que el tiempo de respuesta sea rápido con menos hardware use campos con el tipo de dato Entero en las tablas del data warehose en todas y cada una de las dimensiones.

PD. Por cierto, como recomendacion los campos numericos los pueden nombra con ID y los que originalmente vienen del transacciona como CVE, así tendríamos ProductoID y ProductoCVE.

Technorati tags: Data Warehouse, , , ,





Define estándares antes de comenzar

29 06 2007

Uno de los problemas que se presentan muy a menudo en la construcción de tableros de control o cuadros de mando es la falta de estándares. En la pantalla principal de nuestra aplicación usamos el font Arial de 18 para el título, en la pantalla siguiente usamos Arial de 16, en otra Arial de 20.

Otras veces suele suceder cuando hay varias gentes en el equipo diseñando los escenarios o pantallas que integrarán la aplicación cada quién usa una tipografía diferente.

También ocurre esto con los colores o la posición de los títulos o etiquetas.

Sistema de información

Sistema de información

Sistema de Información

El problema viene cuando vemos a las pantallas como un todo, como una aplicación terminada. Al cambiarnos a otra pantalla desde la pantalla principal es muy notorio que los fonts usados no son los mismos, que los tamaños no son los mismos, que los textos no están en la misma posición, que los colores no son los mismos o peor aún que el color que usamos ¡corresponde a la competencia!

Si uno es consultor normalmente el cliente pide que se  normalicen todos esos aspectos en la aplicación. Así, si pensábamos que habíamos terminado ¡error! Todavía habrá que dedicarle una semana de consultoría que el cliente no está dispuesto a pagar.

Antes de comenzar pónganse de acuerdo y definan que tipografía se usará. Que font y tamaño se usará para los títulos, en que posición se colocarán las etiquetas, de qué color serán y define incluso el código RGB que se usará.

Esto hará que nuestro tablero de control luzca impecable, limpio y agradable.





Clientes duplicados

28 06 2007

cte.gif

Hace muchos años cuando comenzaba en el tema de BI tuvimos una presentación con la dirección general. El proyecto estaba casi terminado, y era hora de presentarlo. Yo estaba preocupado por que habíamos detectado que un cliente aparecía 2 veces en la base de datos y al desglosar en la herramienta la venta por cliente obviamente el cliente aparecía 2 veces. Mi impresión en aquel entonces era que probablemente el director general de la empresa pensara que eso se debiera a un mal desarrollo. Así que hablé con sistemas…

—Oye, hay un cliente que aparece 2 veces
—¿y que cliente es?
—“mi cliente preferido”
—¡aaah! Lo que pasa es que ese cliente está dado de alta 2 veces con diferente clave en el sistema. A veces facturan con un número y a veces con el otro.
—la presentación es a las 3 de la tarde. Lo que puedo hacer es poner un “if” en el proceso de carga del data warehouse para que toda la venta que aparezca en una clave se la pase a la otra clave. Así ya no aparecería duplicado.
—nó, déjalo así.
—pero va aparecer duplicado durante la presentación
—déjalo así.

Pues dicho y hecho, a las 3 de la tarde el director estaba emocionado, así que preguntó:

—y puedo hacer drill down hasta el nivel cliente
—sí
—a ver muéstrame…—y se le mostró—… :mad: ¿por qué sale “mi cliente preferido 2 veces”?
—por que la gente de ventas dio de alta a ese cliente 2 veces, y ahora usan uno y a veces el otro.

Silencio absoluto. Levantó el teléfono y le marcó al director de ventas y lo que salió de su boca era algo así como #$%&/%$.

No sé que rayos habrá pasado pero al día siguiente al correr el proceso que llenaba el data warehouse ya no había cliente duplicado. Todo estaba asignado a un solo cliente como se debía. Seguramente han de haber puesto un vendedor toda la mendiga noche a arreglar las facturas. :D qué friega.

Moraleja y es importante:

Los problemas se arreglan de origen. No hay que llenar “ifs” los procesos de carga para arreglar las cosas, lo correcto es corregir la información en el sistema que la genera.

Technorati tags:








Seguir

Get every new post delivered to your Inbox.