Join us for an expert-led overview of the tools and concepts you'll need to pass exam PL-300. The first session starts on June 11th. See you there!
Get registeredPower BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.
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!
@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())
@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
Proud to be a Super User!
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.
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.
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
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!
Proud to be a Super User!
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
Proud to be a Super User!
@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.
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)
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
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!
Proud to be a Super User!
Hola
¡Gracias por la entrada!
Lo probaré y luego vine a dar retroalimentación.
Salud y gracias de nuevo
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?
¡Salud!
Hola @canhoto,
¿Puede proporcionar la medida que ha creado? será más fácil para mí entender lo que hay que cambiar.
Gracias
Proud to be a Super User!