Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Anonymous
Not applicable

Modelo de datos Retail Business (ayuda!!)

Hola, chicos

Trabajo en el negocio minorista (varias tiendas y varios productos) y me gustaría hacer un informe sobre:

1) Productos SIN VENTAS

2) Productos con cobertura de stock:

Productos con > 50 días de stock

Producst con 20 a 50 días de stock

Productos con < 20 días de stock

En mi modelo de datal tengo:

Tablas de hechos:

Tabla de stock (granularidad de datos - mes)

Tabla de ventas (granularidad de datos - mes)

Tablas de dimensiones:

Datos

Produt

Suposiciones:

Cobertura de stocks ? Stock de producto x en la tienda A dividiendo por ventas del producto x en la Tienda A

Stock sin ventas: producto que forma parte de la tabla de productos pero no tiene ningún registro de ventas en el mismo mes.

Así que de acuerdo con esta suposición im tratar con un gran problema (al menos para mí obviamente...). Para calcular la "Cobertura de stock" es necesario hacer cálculos en filas (Funciones X), pero no tengo ninguna oportunidad de hacerlas entre tablas de hechos diferentes (stocks y ventas). Entonces, ¿cómo es la mejor manera de hacerlo?

¡Muchas gracias!

13 REPLIES 13
amitchandak
Super User
Super User

@canhoto ,¿Puede compartir datos de ejemplo y salida de ejemplo en formato de tabla?

para que no hay ventas se puede probar como

if( isblank(CALCULATE(SUM(Sales[Sales Amount]),DATESMTD('Date'[Date]))) && CALCULATE(SUM(Item[Qty]),DATESMTD('Date'[Date])) >0, "Stock with no sales",blank())

Full Power BI Video 20 Hours YouTube
Microsoft Fabric Series 60+ Videos YouTube
Microsoft Fabric Hindi End to End YouTube
Anonymous
Not applicable

@amitchandak gracias por ser la respuesta rápida.

A continuación encontrará la muestra del modelo de datos.

https://drive.google.com/file/d/1PzNI0i4pL094meB_0eg7wwRxm52K1jy9/view?usp=sharing

Por favor, sea bienvenido a poner las medidas dentro en él. No te preocupes.

Gracias de antemano otra vez.

Hola @canhoto,

¿Puede proporcionar una tabla con sus valores esperados, estoy tratando de entender por qué necesita una función 'X' parece una división recta para mí.

Gracias



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Anonymous
Not applicable

Hola de nuevo,

Gracias a todos por su apoyo. Bueno, no estaba lo suficientemente claro en mi primer correo electrónico, así que tratará de ser más específico.

El diseño final podría ser algo así, en variables diferentes (valor de stock, % del stock total, etc.). Pero la visión será siempre por tienda, por cobertura de stock y por total de tiendas.

pic1.png

Pero el problema es con el total (rojo resaltado) en la foto de arriba. ¿Y por qué?

Veamos el siguiente ejemplo de la misma artcile (123) en varias tiendas. Los datos agregados me darán 110 de existencias por 110 de ventas (30 días de stock, que significa "menos de 50 días". Sin embargo, la información no es real.

pic2.png

Espero que pueda ser claro ahora. Por esa razón tengo un nuevo enlace para la unidad con el archivo de Power BI, así como la "versión de Excel":

https://drive.google.com/drive/folders/1Hx1dVA_SdO7-Wt1qCJ5GEhusSGhAh6KR?usp=sharing

Hola @canhoto,

Ok así que probablemente no sea la solución más elegante, pero dado que usted está buscando para inferir valores de dimensión he creado 3 columnas para usted en la F_Stock tabla

Coverage Days = 
var val = DIVIDE('F_Stock'[Stock Value], 'F_Stock'[Sales Value])*30
return
if(val = 0, 0, val)

Coverage Label = 
    SWITCH(
        TRUE(),
            'F_Stock'[Coverage Days] = 0, "No Sales",
            'F_Stock'[Coverage Days] < 20, "Less than 20 Days",
             'F_Stock'[Coverage Days] < 50, "Less than 50 Days",
             "More than 50 Days"
    )

//to be used as the sort by column for Coverage Label
Coverage Index = 
    SWITCH(
        TRUE(),
            [Coverage Days] =0, 4,
            [Coverage Days] <= 20, 1,
            [Coverage Days] <= 50, 2,
            [Coverage Days] > 49, 3
    )

A continuación, puede crear una matriz como la siguiente

richbenmintz_0-1596585514665.png

También puede crear las columnas calc en Power Query uniendo las tablas de stock y ventas o ajustando las consultas de origen para obtener el stock y las ventas en la misma tabla. pero por ahora esto parece hacer el truco

espero que esto ayude,

Richard


¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!
¿Mis respuestas ayudaron a llegar a una solución? Dale un kudos haciendo clic en Thumbs Up!



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Anonymous
Not applicable

Hola Richard,

Ahora para la respuesta. La mesa se ve excelente,

¿Es posible compartir el modelo? Todavía es muy principiante por lo que es difícil para mí para entender la explanción sólo basado en el código.

¡Gracias!

Hola @canhoto,

Claro, enlace aquí, enlace a pbix.

En palabras esencialmente lo que creé donde tres columnas calculadas en la tabla F_Stock

[Días de cobertura] - acciones / ventas *30

[Etiqueta de cobertura] - Sentencia de caso para asignar la etiqueta correcta basada en el valor [Días de cobertura]

[Índice de cobertura] - Instrucción de caso para asignar el orden correcto para [Etiqueta de cobertura] basado en el valor [Días de cobertura] Este valor se utiliza como valor de ordenación para la columna [Etiqueta de cobertura]

Una vez que las Columnas Calculadas estén disponibles, puede crear la matriz que está buscando



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Anonymous
Not applicable

@richbenmintz Uau esto se ve increíble!!

En onder para entender mejor la solución:

¿Es posible explicar por qué usted hizo la [cobertura days_], [index_ de cobertura] y [label_ de cobertura] también en el "F_sales"? ¿Alguna razón o esto no se usa? Desde mi entendimiento parece que no es utilizado por el modelo.

1.PNG

Al mismo tiempo, sería factible añadir a más columsn en el F_Stock con ventas de "mes n-1" y "mes n-"2? Y al mismo tiempo para adaptar la fórmula de días de cobertura de "stock / ventas" a "stock / ventas medias (mes n, n-1,n-2)" (hago una imagen - abajo - con el fin de facilitar lo que im triying para decir)

2.jpg

Si consigo lo lógico, puedo adaptarlo a mi realidad.

Una y otra vez... todo mi respeto y gracias por su extraordinaria ayuda!

André

Hola @canhoto,

Las columnas de la tabla de ventas F_Sales no son realmente relevent, solo un producto de las pruebas iniciales.

Voy a revisar el Mes - N preguntar en un rato.

Gracias



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Hola @canhoto,

Me burlé de un enfoque de dimensión desconectado para hacer el valor de stock por inventario diario un poco más dinámico que le permitirá realizar miradas de fecha un poco más sobre la marcha sin tener que crear columnas para cada permutación.

Solución de la siguiente manera:

Dimensión desconectada - Crear tabla de Dax Calc:

Coverage = DATATABLE(
        "Coverage", STRING, 
        "Coverage Index", INTEGER, 
        {
            {"More than 50 Days", 3},
            {"No Sales", 4},
            {"Less than 20 Days", 1},
            {"More than 20 Days", 2}
        }
    )

Medida del período actual:

stock Value Dynamic CP = 
var tbl = ADDCOLUMNS('F_Stock',"coverage", divide([Stock value], [Sales value], 0)*30, "visible", 
    switch(true(),
        [Sales value] = BLANK() && min(Coverage[Coverage Label]) = "No Sales", [Stock value],
        [Sales value] > 0 && divide([Stock value], [Sales value])*30 < 20 && min(Coverage[Coverage Label]) = "Less than 20 Days", [Stock value],
        [Sales value] <> 0 && divide([Stock value], [Sales value])*30 >=20 && divide([Stock value], [Sales value])*30 < 50 && min(Coverage[Coverage Label]) = "Less than 50 Days", [Stock value],    
        [Sales value] > 0 && divide([Stock value], [Sales value])*30 >= 50 && min(Coverage[Coverage Label]) = "More than 50 Days", [Stock value] 
        ))
var ret = if(HASONEVALUE(Coverage[Coverage Label]), CALCULATE(SUMX(tbl, [visible])), sum([Stock value]))
return
ret

Período actual Medir período anterior:

stock Value Dynamic CP = 
var tbl = ADDCOLUMNS('F_Stock',"coverage", divide([Stock value], [Sales value], 0)*30, "visible", 
    switch(true(),
        [Sales value] = BLANK() && min(Coverage[Coverage Label]) = "No Sales", [Stock value],
        [Sales value] > 0 && divide([Stock value], [Sales value])*30 < 20 && min(Coverage[Coverage Label]) = "Less than 20 Days", [Stock value],
        [Sales value] <> 0 && divide([Stock value], [Sales value])*30 >=20 && divide([Stock value], [Sales value])*30 < 50 && min(Coverage[Coverage Label]) = "Less than 50 Days", [Stock value],    
        [Sales value] > 0 && divide([Stock value], [Sales value])*30 >= 50 && min(Coverage[Coverage Label]) = "More than 50 Days", [Stock value] 
        ))
var ret = if(HASONEVALUE(Coverage[Coverage Label]), CALCULATE(SUMX(tbl, [visible])), sum([Stock value]))
return
ret

Advertencias de pareja:

- Fecha Matemática no es muy robusto sólo resta uno del Mes Máximo en contexto

- Mejor tener una columna YearMonth en la tabla de fechas como, 202010, luego restar 100 siempre devolverá el mes anterior

- Supone que Mes estará en el contexto, ya que utiliza Max para obtener el mes actual y luego resta 1, puede ser mejor comprobar si Mes tiene un solo valor y luego realizar el calc else return blank()

Todas las nuevas fórmulas guardadas en pbix compartido

Espero que esto te ayude,

Richard


¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!
¿Mis respuestas ayudaron a llegar a una solución? Dale un kudos haciendo clic en Thumbs Up!



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Anonymous
Not applicable

Hola

¡Gracias por la entrada!

Lo probaré y luego vine a dar retroalimentación.

Salud y gracias de nuevo

Anonymous
Not applicable

Hola @richbenmintz

¡La solución funciona perfectamente!

Estaba probando el modelo final para mostrar sólo en porcentajes. Lo hago, pero sé que encontré un error.

Por ejemplo, en el mes 11, Paris Store. Amarillo resaltado.

Estaba tratando de mostrar los "Más de 50 días" y el "Sin ventas" en la tabla de abajo y, al mismo tiempo, los porcentajes de estas dos "etiquetas", de acuerdo con el stock TOTAL de la tienda (y no sólo los que seleccioné "más de 50 días" y el "sin ventas").

Sin embargo, cuando selecciono el "sin ventas" y el "más de 50 días" tengo un % del 100% para el total de la tienda. Sin embargo, el porcentaje de righ debe ser de 128 / 179 a 71,5% y no de 128 /128 a 100%. Espero que me aclare esta explicación. ¿Hay alguna posibilidad de evitar esto?

ricj.PNG

¡Salud!

Hola @canhoto,

¿Puede proporcionar la medida que ha creado? será más fácil para mí entender lo que hay que cambiar.

Gracias



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors