Modelado Promotions en BBDD Ecommerce

  • Javier Rey
    Participante

      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.

       

    • dlom
      Participante

        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

        Javier Rey
        Participante

          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.

          dlom
          Participante

            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

             

            Javier Rey
            Participante

              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!

              dlom
              Participante

                Sí, exacto. Entre más atrás te puedas ir en el procesamiento de los datos, mejor.

                 

                Un abrazo!

              Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
              • El debate ‘Modelado Promotions en BBDD Ecommerce’ está cerrado y no admite más respuestas.