Magento 1: sacando ventas por producto más rápido

Ventas por producto de Magento

¡Hola de nuevo! Como siempre que puedo, trabajo con Open Source, pues aquí que sigo con la filosofía del Open Source, compartiendo algo más de código fuente Open Source. La verdad es que nunca me planteo alternativas que no sean Open Source, con lo que tengo incluso la obligación de compartir códigos Open Source, ya que tanto me beneficio de los proyectos Open Source, en lo laboral y en lo personal, valga la redundancia.. Se nota que me gusta el Open Source ¿verdad? xDDD

Ahora vengo con un pequeño script de base de datos, para consultar directamente la BD de Magento 1, para sacar las ventas por producto. No es nada del otro mundo, sino un pequeño truco a la hora de trabajar con Magento, o con cualquier otra plataforma similar. Siempre tendremos los mismos elementos, así que esto mismo se puede aplicar en todos los CMS eCommerce.

Lo de más rápido del título viene a ser porque lo siguiente es muy rápido, en apenas unos segundos tenemos el resultado. Lo digo porque he compartido anteriormente otros scripts para recorrer Magento producto a producto, o pedido a pedido, para ver además de las ventas por producto, otros datos sobre los pedidos. Pero aquellas otras formas son más lentas, ya que vamos cargando más información, y se cargaban en PHP cargando los objetos completos de los pedidos y productos.

El código, el script SQL

Vamos al grano:

SELECT sfoi.sku, 
sum(sfoi.qty_ordered) qty_ordered,
count(sfoi.order_id) qty_orders
FROM sales_flat_order_item sfoi
WHERE sfoi.qty_ordered = sfoi.qty_shipped
GROUP BY sfoi.sku;

La idea es simple, mira la tabla que se consulta, es la de items de pedido. Al agrupar por SKU se agrupa por producto, y obtenemos el sumatorio de productos pedidos, así como la cantidad de pedidos hechos por producto.

Aclaraciones

Lo que tenemos que tener en mente es que no todos los pedidos son ventas reales. Hay pedidos abonados, otros directamente cancelados, algunos puede que no estén ni siquiera enviados aunque estén facturados, etc.. Todos esos casos tenemos que tratarlos, o filtrar entre todos ellos.

Podríamos filtrar todos esos casos anómalos para revisarlos manualmente. Es decir, según el manual de Magento, un pedido bien terminado tiene que terminar con:

state=complete
status=complete

Además, debe de tener una factura y un envío hecho. Aunque ¡ojo! esto mismo lo puedes resumir en la casuística que propongo arriba en el script de SQL. Simplemente si la cantidad de unidades pedidas es igual a la cantidad de unidades enviadas, suponemos que el pedido está terminado como venta real.

WHERE sfoi.qty_ordered = sfoi.qty_shipped

Quedará en el tintero el estudiar todos los casos anómalos, que esto sería podría ser otro script SQL que podríamos tenerlo hecho en pocos minutos siguiedo esta lógica.

A saber, otras tablas, o las tablas relacionadas con los pedidos de Magento 1 son las siguientes:

sales_flat_order
sales_flat_invoice
sales_flat_shipment
sales_flat_creditmemo
sales_flat_order_address
sales_flat_order_item
sales_flat_quote
sales_flat_...

El contenido y las relaciones entre éstas tablas es material para otro post. Así que lo dejo aquí, y otro día más.
¡Un saludo!

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

7 − 6 =