martes, junio 09, 2015

Una alternativa a los elementos calculados de las tablas dinámicas

Cuando resumimos datos con tablas dinámicas podemos echar mano, entre otras, a dos herramientas valiosas: los campos y los elementos calculados.
Los elementos calculados tienen en ciertas situaciones un comportamiento un tanto enervante, por decirlo de alguna manera.

Veamos esta situación:



El año de cada venta aparece en el campo Año, por lo que si queremos calcular la diferencia entre ambos años para cada país, podemos hacerlo usando creando un elemento calculado,

Apretamos "Aceptar" y Excel crea un nuevo campo con la diferencia de los elementos del campo Año

Como mis observadores lectores habrán notado el reporte dinámico tiene un filtro que permite ver los resultados por vendedor. Elegimos la vendedora Anne Dodsworth y obtenemos este reporte

Podemos ver que también los países donde la compañera Anne no ha realizado ventas aparecen en el informe.

Una posible solución a este problema es crear un nuevo campo en el base de datos con las diferencias. La solución no es trivial e implica el uso intensivo de fórmulas, lo que puede afectar la eficiencia de nuestro modelo.

Podemos usar un pequeño truco para superar este problema. El primer paso es poner por segunda vez el campo "Venta total" en el área de los datos:

El próximo paso es seleccionar alguna de las celdas de la columna 2015 del campo Ventas total que acabamos de agregar y seleccionamos la opción "Diferencia de..." del menú "Mostrar valores como"


y luego elegimos como campo de base la el campo "Año"

El resultado es


Todo lo que nos queda por hacer es ocultar la columna D. Ahora el reporte de las ventas de Anne muestra sólo los países donde se realizaron ventas



jueves, mayo 28, 2015

BUSCARV con dos parámetros

Un lector me consulta si es posible hacer búsquedas en una tabla de acuerdo a dos parámetros. La respuesta es positiva y vamos a mostrar las distintas posibilidades en esta nota.
Aclaremos que el título de la nota es un poco engañoso ya que además de BUSCARV mostraremos soluciones con tablas dinámicas y con las funciones INDICE y COINCIDIR, en forma natural y en forma matricial.

Supongamos una tabla con tres columnas: artículo, fecha y precio. Cada artículo aparece varias veces pudiendo variar la fecha y el precio como en esta tabla:

1 - Solución con tabla dinámica (o "solución rápida").

Creamos una tabla dinámica basada en nuestra tabla de datos

En el área de las filas ponemos los campos Artículo y Fecha y el campo Precio en el área de los datos.
Ordenamos el campo Fecha de más reciente a más antiguo

con lo cual las fechas más reciente aparecerán al principio de cada grupo de artículos.

Ahora agregamos un cuadro de segmentación de datos y ocultamos todas la filas de la tabla excepto la que contiene el primer dato; agregamos algunos formatos para mejorar la presentación y ya tenemos nuestro modelo dinámico que siempre mostrará el último precio de cada artículo


La ventaja de esta solución reside en que no usa fórmulas sino tablas dinámicas por lo que funciona velozmente también con tablas de gran tamaño.

2 - Solución con BUSCARV y columna auxiliar.

Para usar BUSCARV en forma natural (es decir, no matricial) debemos crear una columna auxiliar con valores únicos por lo que combinamos el código del articulo con la fecha del precio )la columna ID)

Para esta solución es indispensable que la tabla esté organizada de menor a mayor de acuerdo al campo ID. Esto se debe a que usaremos BUSCARV con búsqueda aproximada, con esta fórmula

=BUSCARV(G3&MAX(tblPrecios[Fecha]),tblPrecios,4)
Como puede apreciarse, creamos el valor de búsqueda combinando al artículo buscado (en la celda G3) con el valor máximo del campo de las fechas. Como Hacemos una búsqueda aproximada, dejando el cuarto argumento de BUSCARV en blanco, obtenemos el valor más cercano que coincide con el valor buscado. Es por este motivo que la tabla tiene que estar ordenada de menor a mayor según el campo de búsqueda (ID).
Podemos ocultar la columna B de manera que el campo auxiliar no sea visible.

3 -Solución sin campo auxiliar con la función INDICE y COINCIDIR

Para ahorrarnos el campo auxiliar (considerado profano a las buenas prácticas de Excel por algunos puristas, concepto con el cual no concuerdo en absoluto), podemos combinar las funciones INDICE y COINCIDIR para crear esta función matricial (introducir con Ctrl-Mayúsculas-Enter):

=INDICE(tblPrecios4[Precio],COINCIDIR(F3&MAX(tblPrecios4[Fecha]),tblPrecios4[Articulo]&tblPrecios4[Fecha]))


Nótese que también aquí hacemos una búsqueda aproximada en la función COINCIDIR por lo que la tabla debe estar ordenada de menor a mayor según el campo Artículo y también de antiguo a reciente según el campo Fecha.

4 - Solución sin necesidad de ordenar la tabla.

En ciertas situaciones puede ser inconveniente o poco práctico tener que ordenar la tabla. Podemos extraer el valor buscado de acuero a artículo y fecha sin ordenar la tabla con esta fórmula matricial:

=INDICE(tblPrecios46[Precio],COINCIDIR(F3&MAX((tblPrecios46[Articulo]=F3)*tblPrecios46[Fecha]),tblPrecios46[Articulo]&tblPrecios46[Fecha],0))



Como puede apreciarse COINCIDIR realiza una búsqueda exacta, con el tercer parámetro puesto a 0, por lo que no hace falta ordenar la tabla.

En la función COINCIDIR, la expresión

F3&MAX((tblPrecios46[Articulo]=F3)*tblPrecios46[Fecha])

crea el valor de búsqueda;

la expresión
tblPrecios46[Articulo]&tblPrecios46[Fecha]

dentro de la fórmula matricial crea un vector que contiene todas las combinaciones de artículo/fecha (cono en el campo ID de la primera solución). Esto nos permite hacer una búsqueda exacta eximiéndonos de tener que ordenar la tabla.

El archivo con los ejemplos puede descargarse aquí.

viernes, mayo 15, 2015

El gráfico (de barras) de Wendy

Hace unos días me preguntaban si se puede construir este gráfico con Excel

La respuesta es si, pero haciendo algunas manipulaciones. Podemos crearlo usando un gráfico de barras apiladas (el proceso puede verse en este video, que también aparece al final de la nota). Los datos originales consisten de una única serie de valores (de color azul en la imagen: 9, 1, 0, 0,0) pero para nuestro gráfico deberemos crear una segunda serie de valores coompletarios (de color gris en la imagen)



Los datos originales están en el rango C3:D7. En la columna E (Auxiliar 1) calculamos los valores de la segunda serie, la complementaria, con la fórmula:
=(MAX($D$3:$D$7)+1)-D3
Empezamos por seleccionar el rango C2:D7 y creamos un gráfico de barras apiladas



resultando el siguiente gráfico


Hacemos los ajustes necesarios:

Abrimos el menú de formato del eje vertical y marcamos "Categorías en orden inverso" y "Eje horizontal cruza: en la categoría máxima".



Seleccionamos la serie Auxiliar 1 y cambiamos el color del relleno



Ahora quitamos las líneas y el relleno del área de trazado y del área del gráfico, la leyenda y las líneas de cuadrículas.
Ocultamos el eje horizontal con el menú Presentación-Ejes



y la línea del eje vertical



El último paso es agregar las etiquetas de valores. Podríamos hacerlo agregándolas y luego arrastrándolas manualmente al extremo derecho del gráfico. Pero, por supuesto, queremos ahorrarnos todo este trabajo manual, en particular si nuestro gráfico tiene una gran cantidad de series.
El truco consiste en agregar otra serie auxiliar, definirla en el eje secundario usando como eje de las categorías los valores de la serie de datos. Luego quitamos el relleno y las líneas de esta serie para volverla invisible y agregamos las etiquetas que muestren los valores de la categoría.

Los  valores de la segunda serie auxiliar los definimos sumando los valores de la serie a los de la serie Auxiliar 1 y agregándole 1


Agregamos la serie al gráfico pero al definir los rótulos del eje seleccionamos los valores de la serie de los datos (el rango D3:D7 en nuestro ejemplo)


Veremos que los valores del eje vertical cambian. Esto será corregido en el próximo paso que es definir la nueva serie auxiliar en el eje secundario.



Como podemos apreciar debemos hacer varias transformaciones. Nuestro gráfico tiene ahora dos ejes horizontales y dos verticales (si alguno de los ejes no aparece, debemos volverlo visible usando el menú Presentación-Ejes). Las transformaciones a realizar son:
  • invertir el eje vertical secundario;
  • cambiar la referencia a las etiquetas del eje vertical primario;
  • cambiar el relleno y la línea de la serie Auxiliar 2 para volverla invisible (sin relleno, sin línea);
  • volver invisible los ejes horizontales;
  • volver invisible el eje vertical secundario;
  • quitar la línea y las marcas del eje vertical primario.
Confío en que el lector ya sabe realizar estas tareas (todo el proceso puede verse en el video abajo). Una vez realizadas estas transformaciones nuestro gráfico se ve así:



Solo nos queda agregar las etiquetas a la serie invisible Auxiliar 2. Empezamos por seleccionar la serie Auxiliar 2 y agregamos las etiquetas. Por defecto Excel introduce los valores de la serie en el centro de la barra. Nosotros queremos mostrar los nombres de la categoría (el eje vertical secundario) en el extremo de la barra. Una vez introducidas las etiquetas modificamos las definiciones con el menú de Formato de Etiquetas de Datos



Finalmente nuestro gráfico se ve así


Todo el proceso de creación puede verse en este video