domingo, junio 26, 2011

Análisis de datos según el principio de Pareto con Excel

Esto es lo que me consulta uno de mis lectores:

Quisiera consultarte si se puede ser segmentar una tabla dinámica según el teorema de Pareto o sea mostrar el 20% de los ítem que explican el 80% de los valores y el resto agruparlo en un ítem "otros(as)" integrando el 100% de la muestra.

El principio de Pareto lleva el nombre del economista italiano que lo enunció, observó que:

la gente en su sociedad se dividía naturalmente entre los «pocos de mucho» y los «muchos de poco»; se establecían así dos grupos de proporciones 80-20 tales que el grupo minoritario, formado por un 20% de población, ostentaba el 80% de algo y el grupo mayoritario, formado por un 80% de población, el 20% de ese mismo algo.

Este principio es aplicado en muchas áreas, como la producción, logística y economía.

Supongamos que queremos analizar las ventas de una cadena a acuerdo al principio de Pareto (usaremos la base de datos Northwind incluida en el paquete de Office).

Antes de responder a la consulta de mi lector veamos cómo crear un histograma de Pareto con Excel.
Empezamos por resumir los datos por categoría en una tabla:



Esta matriz resume los datos que hemos organizados como “tabla” (En Excel 2003, Lista), a la que le hemos dado el nombre “tblVentas”



Para totalizar los datos por categoría usamos SUMAR.SI

=SUMAR.SI(tblVentas[Categoría],reporte!A4,tblVentas[Ventas])

Es importante notar que la matriz está ordenada de mayor a menor según el campo Ventas.

A partir de esta matriz, creamos este gráfico:



Como puede observarse usamos dos ejes Y. El primario para representar las ventas (columnas) y el secundario para el porcentaje acumulado (línea).

La ventaja de usar la funcionalidad “tabla” reside en que la matriz que resume los datos por categoría se actualiza automáticamente si agregamos o quitamos filas en la base de datos, y por lo tanto también el gráfico.

Podemos hacer lo mismo con tablas y gráficos dinámicos (para versiones anteriores a Excel 2010 ver esta nota). A partir de la base de datos creamos una tabla dinámica ordenada de mayor a menor según el campo Ventas



Ahora agregamos por segunda vez el campo Ventas en el área de valores y cambiamos “Mostrar valores en…” a “% del total en”



Todo lo que nos queda por hacer es crear el gráfico dinámico y hacer los cambios necesarios en el tipo de gráfico por serie.



Pero mi lector preguntaba si se puede hacer algo similar con tablas dinámicas, agrupando los datos en dos categorías: los productos que representan el 80% de las ventas y los que representan el restante 20%.

Una solución sencilla es agrupar los datos manualmente. Después de agrupar tenemos que hacer algunas correcciones al resultado



Tenemos que agregar subtotales y cambiar “Mostrar valores…” a “% del total general”



El archivo con los ejemplo se puede descargar aquí.

viernes, junio 10, 2011

Determinar posición (ranking) por grupos

En la nota sobre la función JERARQUIA aparece este comentario

¿Es posible aplicar la función jerarquía a una columna de manera que se reinicie el ranking si el valor de otra columna cambia? Por ejemplo, tengo 5 vendedores en 4 países y quiero saber el principal vendedor en cada país.

Esta consulta me llevó a reflexionar sobre dos temas:

1 - ¿cómo aplicar la función JERARQUIA en este caso?
2 – ¿Por qué aplicar la función JERARQUIA para este caso?

Muy a menudo me encuentro con consultas de este tipo, donde el lector presupone que la solución pasa por usar una función o un método determinado. En lugar de preguntar "¿cómo determino el mejor vendedor de cada país?" la consulta se transforma en "¿cómo uso JERARQUIA para solucionar este problema?

El medio (el uso de la función JERARQUIA) se transforma en el objetivo (encontrar el mejor vendedor de cada país).

Supongo que esta forma de enfrentar la solución de problemas está relacionada con la tendencia natural, en mi opinión, de aferrarnos a lo conocido y nuestra aversión o temor a lo desconocido. Seguramente hay otros factores, pero no lo trataré en esta nota. Por supuesto, mis lectores están invitados a opinar sobre el tema.

Y ahora llegó el momento de empezar a trabajar. ¿Cómo solucionamos el problema? Empecemos por mostrar nuestros datos



Solución con JERARQUIA



Para usar la función JERARQUIA por grupos (vendedores de Argentina, vendedores de Colombia, etc.) empezamos por definir rangos con nombres



Cada nombre se refiere al rango de valores de ventas correspondiente al país a que se refiere. Nótese que estos rangos no son dinámicos, por lo que se agregamos valores, tendremos que editar el nombre para redefinir el rango.

Agregamos una columna a la tabla, Ranking, donde ponemos esta fórmula

=JERARQUIA(C2,INDIRECTO(A2))



Hemos agregado además un formato condicional para resaltar el nombre y las ventas del vendedor que recibe la posición 1



Solución con INDICE, COINCIDIR y MAX en forma matricial

La ventaja de esta solución es que nos permite definir rangos dinámicos, librándonos de la necesidad de editar los rangos definidos cada vez que agregamos o quitamos datos de la tabla.

Otra ventaja es que implementamos uno de los principios importantes de buenas prácticas en Excel: la separación de la base de datos de los cálculos y los informes.

Como en el caso anterior, empezamos por definir rangos en nombres (otra buena práctica en Excel)
En este caso definimos rangos dinámicos

pais =indice!$A$2:INDICE(indice!$A:$A,CONTARA(indice!$A:$A))
vendedor =indice!$B$2:INDICE(indice!$B:$B,CONTARA(indice!$B:$B))
ventas =indice!$C$2:INDICE(indice!$C:$C,CONTARA(indice!$C:$C))

Creamos una tabla separada para mostrar los resultados por país donde ponemos esta fórmula matricial (fórmulas que introducimos apretando simultáneamente Ctrl+Mayúsculas+Enter)

=INDICE(vendedor,COINCIDIR(MAX((pais=E2)*(ventas)),ventas,0))



Solución con tablas dinámicas

Empezamos por crear una tabla dinámica con los campos País y Vendedor en el área de filas y Ventas en el área de datos. Luego ordenamos el campo Vendedor según las Ventas



El próximo paso es crear un campo calculado, Ranking (o cualquier otro nombre) con la fórmula "=1"



Seleccionamos el campo que acabamos de agregar y en el menú de configuración del campo mostramos los valores como "Total en" usando como campo de base "Vendedor"



El resultado es



Como puede apreciarse, no se trata de una verdadera solución ya que nos basta con ordenar los valores tal como hicimos en el primer paso. Obviamente, quien aparece en el primer lugar de cada país es el que más vendió. Esta solución puede ser útil si queremos extraer el vendedor que más vendió (o el segundo o el tercer, etc.) usando funciones que se refieran a la tabla dinámica, como IMPORTARDATOSDINAMICOS.

En este enlace muestro otra forma de aplicar JERARQUIA, es decir señalar el ranking, en una tabla dinámica.

sábado, mayo 28, 2011

Ajustar texto de fechas con formato personalizado

Después de otra semana intensa de actividad, veo que llevo un buen atraso en responder a muchas de las consultas que me han llegado últimamente. Así que voy a aprovechar esta nota para disculparme y para volver a explicar que no siempre puedo (y a veces, no quiero) responder a las consultas.

Como prueba de buena voluntad voy a mostrar un pequeño truco con formato personalizado de números. En uno de los muchos foros de Excel apareció esta pregunta:

Hay alguna manera de ajustar el texto de una fecha con formato “dd/mm/aaaa hh:mm” de manera que la fecha aparezca en la primera línea de la celda y la hora en la segunda”



Una forma de hacerlo es editando la celda, poniendo el cursor delante de la hora y apretando Alt+Enter.

Pero la idea es definir un formato personalizado, de manera que no tengamos que editar cada una de las celdas.

El truco es el siguiente:


Seleccionamos el rango de las celdas y definimos el formato personalizado


En la ventanilla “Tipo” ponemos el cursor del mouse en el lugar del formato donde queremos dividir en dos líneas y pulsamos simultáneamente las teclas Ctrl+J y apretamos “Aceptar”



Con el rango seleccionado definimos “Ajustar texto”
o con el menú Formato de celdas
Finalmente ajustamos el alto de la fila
También podemos ir más adelante y dividir la celda en tres líneas, usando dos veces Ctrl+J


Para lograr este formato en la ventanilla “Tipo” del formulario de formato personalizado de números ponemos

“día:” dd (nótese las comilla) y un espacio

Apretamos Ctrl+J

“mes:” mmmm y un espacio

Apretamos Ctrl+J

“año:” aaaa

Apretamos “Aceptar” y definimos “Ajustar texto”. Si vemos esta situación

formFecha08

tenemos primero que cambiar el ancho de las columnas y luego el alto de la fila.

El truco fue mencionado por Rick Rothstein (si, el mismo de la prueba del nueve).