Foro Empleos Academia Blog
Recursos
  • Ejemplos de dashboards
  • DatData Games
  • Alumnos destacados
  • Torneos pasados
Search Icon Iniciar sesión Inscribirme
Back arrow

Power Query

hace 1 año

Modelado Promotions en BBDD Ecommerce

JavierRey514

Buenas,   Estoy empezando a modelar una bbdd de Ecommerce en el que la tabla Fact Sales crea registros por cada pedido a nivel de producto, es decir, un pedido con 2 'Product id' diferentes crea dos registros.   Fact Sales records   Hasta aquí bien. El problema viene con los cupones o promociones de los pedidos. El objetivo es el análisis de estas promociones a nivel de 'order id' (no de 'product id'). El problema es que estos campos los recoge la tabla a través de una concatenación, ya que un mismo 'order id' puede solapar más de una promoción: La duda es: Ante esto, qué opción de modelado sería la correcta:
  1. Tratar las promociones como una dimensión: en este caso como se dividiría las columnas en la tabla 'Fact_Sales', ya que habría que desconcatenar dos columnas y crear registros que compatibilicen con lo anteriormente citado.
  2. ¿Habría que tratar las promociones como otra Fact Table unidas a nivel de 'order id'? Con está opción también me surge la duda de como desconcatenar las dos columnas relacionadas?
Muchas gracias por anticipado. Saludos.  
0 Votos
5
Respuestas
Respuestas

dlom

hace 1 año

Qué tal Javier, es un gusto platicar contigo!   Está interesante este tema de modelación. Aquí me surge una duda: una misma orden, ¿siempre va a tener las mismas promociones aplicadas en su registro?   Dependiendo de la respuesta, puede cambiar la recomendación. Pero por lo pronto, lo que yo te recomendaría es separar la tabla de órdenes de la tabla de productos en la orden.   Si las promociones están a nivel "orden", puedes separar la tabla en 2:
  • Tu tabla de órdenes (que tendrá las promociones aplicadas)
  • Tu tabla de productos en la orden
  De hecho, justamente así tuve un caso con una empresa donde su punto de venta registraba cada venta en la tabla de sales SIN los productos de esa venta y en la tabla sale_items registraba los productos de cada venta, con un registro por producto. Entonces mantuvimos estas tablas separadas también en el modelo del análisis.   Ahora, respondiendo los puntos en específico específico:   1. Puedes desconcatenar las promociones usando el separador por delimitador, y separando en filas en lugar de columnas (paso #5 de la imagen).   2. Sí a manejar otra tabla pero NO a nivel promoción por [order id] porque te va a generar otros problemas al momento de analizar los datos en el dashboard. Aquí yo te recomiendo que crees la tabla de esta manera: https://www.datdata.com/products/datdata-games/categories/2151659831/posts/2163282861 . De hecho la imagen de arriba viene justamente de esa clase donde vemos un caso MUY similar. Vela porque te va a servir para relacionar las promociones con las órdenes donde fue aplicada y que además puedas analizarlo sencillamente en tu dashboard.   Te mando un abrazo y estoy atento, - Diego
0 Votos

JavierRey514

hace 1 año

Muchas gracias por la respuesta Diego. La verdad es que no me planteé lo de separar las tablas de hechos, pero tiene todo el sentido.
Aquí me surge una duda: una misma orden, ¿siempre va a tener las mismas promociones aplicadas en su registro?
La respuesta a esto es sí. Entiendo que no cambiaría mucho la recomendación, no? Al estudiar desde tu recomendación el modelo, entiendo que no son dos, sino tres las tablas de hechos en las que hay que dividirlo (tabla con los registros y campos relacionadas con los pedidos, tabla con los productos asociados a los pedidos y tabla con las promociones relacionadas con los pedidos): ¿Es correcto?   Por otro lado, en la desconcatenación de las promociones de los pedidos ya apliqué antes de mi duda los pasos que me indicas, pero el problema que planteaba es que hay dos divisiones relacionadas, por lo que al dividir una de las columnas no se soluciona. Voy a poner otra captura para que veas a lo que me refiero:   El objetivo es que cada registro contenga su nombre de promoción ('Voucher name') con el importe de descuento correspondiente de la columna de 'Total voucher with tax') ¿Se entiende mejor así? No se me ocurre como realizarlo.   Mil gracias por adelantado.   Abrazo.
0 Votos

dlom

hace 1 año

Qué tal Javier! Sí puedes manejar las tablas como lo mencionas si se te adecúa a tu caso.   Con respecto a la desconcatenación de los vouchers. Aquí va una propuesta. No es una solución elegante, pero te puede servir.   Para resolver este tipo de problemas hay que pensar en paso a paso. En qué pasos puedes seguir para llegar a como necesitas los datos.   Supón que tengo esta tabla inicial. Esta la columna de voucher y la del monto de los vouchers, separados por una coma.   Primero separa las 2 columnas usando el delimitador de la coma, y separando en columnas.   Luego combina el nombre del voucher en la primera columna de los nombres, con el monto en la primera columna de los montos. En este caso las uní con una columna personalizada y usando dos puntos.   En este caso fueron máximo 2 promociones, pero tú vas a tener que hacer esto el número de veces necesario para el número de vouchers que se pueden usar en tu caso.   Quitas las columnas que ya no necesitas. En este caso, las que use con los datos que uní en otras columnas.   Seleccionas tus tablas con TODAS las otras columnas. Las que no necesitaste para la transformación. Aplicas la anulación de dinamización de otras columnas (en los cursos vemos varias veces esto).   Y te va a mover las columnas a 2 columnas. Una de atributos y una de valores.   Quitas la columna de Atributo (solo tiene el nombre de las columnas, que en este caso no es relevante).   Y la columna de valor la separas de nuevo por delimitador, igual en columnas   Ahora tendrás la columna con su voucher, su valor y hacia abajo para poder analizar los datos   Saludos! - Diego  
0 Votos

JavierRey514

hace 1 año

Hecho. Mil gracias Diego. La verdad es que la solución requiere de bastantes pasos, pero temporalmente me va a servir para montar todo. Posteriormente, pediré que optimicen tablas de origen para que ya se importen de esta forma.   Saludos!
0 Votos

dlom

hace 1 año

Sí, exacto. Entre más atrás te puedas ir en el procesamiento de los datos, mejor.   Un abrazo!
0 Votos
Es necesario estar inscrito para dejar tu duda, comentario y/o respuesta

Sobre el alumno

JavierRey514

Javier Rey

Cursos completados

No ha completado ningún curso aún

Más preguntas sobre el tema

Combinación de consultas

OctavioSomonte850

Manejo de datos con Power query + Data entry manual

OctavioSomonte850

donde descargr las fuentes de datos de las grabaciones de las clases en vivo

victoralfonso101

Error en ejercicio 11 columna dinamica

LuisGrau539

Proceso ETL

MartinFreire739

Recursos
  • Foro
  • Inscribirse
  • Blog
  • Ejemplos de dashboards
Cursos
  • Aprende Power BI con Proyectos
  • Análisis de Datos con Power BI y Excel
  • Especialización en Power Query
  • Certificación de Power BI
  • Tu Portafolio de Dashboards
Legales
  • Términos del servicio
  • Política de privacidad
  • Política de cookies
  • Contacto
  • Acerca
Canal de YouTube de datdata Cuenta de Linkedin de datdata Cuenta de Instagram de datdata Página de Facebook de datdata Cuenta de TikTok de datdata
© 2025 © datdata - Todos los derechos reservados