gardas_swathi
Hola a todos,
Necesito crear una Medida de Semanas de Suministro que se calcula en función de las existencias del día actual y el pronóstico de las semanas futuras.
A continuación se muestran los datos de muestra de mi cubo de análisis. tenemos una dimensión de producto y una dimensión de fecha y estos hechos están relacionados con ellos
Para productID 1 a la fecha 03/17 Weeks of Supply debe ser 2.2
ProductID 1
Stock 17/03 – 137
pronóstico 20/03/2020 76 => 137-76 = 61 => 1
27/03/2020 41 => 61-41 = 21 => 1
4/3/2020 86 => 21-86 => -65 => 0.241245136 (21 / 86Para el valor de la semana negativa, tome el% de la semana cubierta)
Data de muestra
Tabla de existencias
DateID | ID del Producto | Valores |
1/3/2020 | 1 | 10 |
02/03/2020 | 1 | 137 |
3/3/2020 | 1 | 1 |
3/4/2020 | 1 | 27 |
1/3/2020 | 2 | 117 |
02/03/2020 | 2 | 68 |
3/3/2020 | 2 | 23 |
3/4/2020 | 2 | 33 |
1/3/2020 | 3 | 1 |
02/03/2020 | 3 | 88 |
3/3/2020 | 3 | 105 |
3/4/2020 | 3 | 48 |
9/03/2020 | 1 | 10 |
10/3/2020 | 1 | 137 |
11/03/2020 | 1 | 1 |
12/03/2020 | 1 | 27 |
9/03/2020 | 2 | 117 |
10/3/2020 | 2 | 68 |
11/03/2020 | 2 | 23 |
12/03/2020 | 2 | 33 |
9/03/2020 | 3 | 100 |
10/3/2020 | 3 | 88 |
11/03/2020 | 3 | 105 |
12/03/2020 | 3 | 48 |
16/03/2020 | 1 | 10 |
17/03/2020 | 1 | 137 |
18/03/2020 | 1 | 150 |
19/03/2020 | 1 | 27 |
16/03/2020 | 2 | 117 |
17/03/2020 | 2 | 68 |
18/03/2020 | 2 | 23 |
19/03/2020 | 2 | 33 |
16/03/2020 | 3 | 1 |
17/03/2020 | 3 | 88 |
18/03/2020 | 3 | 105 |
19/03/2020 | 3 | 48 |
Tabla de previsión
DateID | ID del Producto | Pronóstico |
6/03/2020 | 1 | 56 |
6/03/2020 | 2 | 100 |
6/03/2020 | 3 | 86 |
13/03/2020 | 1 | 31 |
13/03/2020 | 2 | 46 |
13/03/2020 | 3 | 61 |
20/03/2020 | 1 | 76 |
20/03/2020 | 2 | 91 |
20/03/2020 | 3 | 26 |
27/03/2020 | 1 | 41 |
27/03/2020 | 2 | 56 |
27/03/2020 | 3 | 71 |
03/04/2020 | 1 | 86 |
03/04/2020 | 2 | 101 |
03/04/2020 | 3 | 116 |
Por favor, avíseme si tiene alguna pregunta si mi publicación no está clara. Muchas gracias
gardas_swathi
En respuesta a PaddyGaul
Hola Paddy,
Esto es lo que funcionó para mí. Esta es una medida en el modelo tabular de Analysis Service
«// Última versión de pronóstico»,
«VAR MAXCDP =»,
«MAX (‘Versión de previsión'[LatestForecastVersion] ) «,
«// Fecha actual del viernes»,
«VAR SELECTEDDate =»,
«// MAX (‘Fecha'[Fiscal Week]) «,
«(6 – DÍA DE LA SEMANA (HOY ())»,
«+ HOY ()) + 7»,
«//Valor de inventario»,
«VAR LatestInventory = ‘Inventario'[Stock]»,
«// Consulta para obtener el valor de pronóstico de consenso de la semana actual»,
«VAR BurnTab =»,
«FILTRO («,
«RESUMEN («,
» ‘Demanda’,»,
» ‘Fecha'[Fiscal Week], «,
» ‘Demanda'[CDPForecastRecordDateID], «,
«‘Producto'[Business Unit Name], «,
«» Consenso final «, CONVERT («,
«SUM (‘Demanda'[ForecastSell] ), «,
«INTEGER»,
«)»,
«),»,
» ‘Demanda'[CDPForecastRecordDateID] = MAXCDP «,
» && ‘Fecha'[Fiscal Week] > = SELECTEDDate «,
«)»,
«// Paso para crear la columna de totales acumulados»,
«VAR BurnTab2 =»,
«ADDCOLUMNS («,
«BurnTab»,
«» Total acumulado «,»,
«VAR CurrentConsenusDate = [Fiscal Week]»,
» REGRESO»,
«SUMX («,
«FILTRO (BurnTab, [Fiscal Week] <= CurrentConsenusDate), ",
» [Consensus Final]»,
«)»,
«)»,
«// AÑADIR inventario a todas las filas»,
«VAR BurnTab3 =»,
«ADDCOLUMNS (BurnTab2, » Latest Inventory «, LatestInventory)»,
«»,
«VAR BurnTab4 =»,
«ADDCOLUMNS («,
«BurnTab3,»,
«» Inventario con predicción «, [Latest Inventory] – [Running Total]»,
«)»,
«VAR BurnTab5 =»,
«ADDCOLUMNS («,
«BurnTab4»,
«» BurnDown1 «, SI ( [Inventory with Prediction] > 0, 1, 0) «,
«)»,
«VAR BurnTab6 =»,
«ADDCOLUMNS («,
«BurnTab5»,
«» BurnDown2 «, SI («,
» [BurnDown1] = 1, «,
«0»,
» SI («,
» [Inventory with Prediction] <0, ",
» SI («,
» DIVIDIR («,
» [Latest Inventory] – ( [Running Total] – [Consensus Final] ), «,
» [Consensus Final]»,
«) <0,",
«0»,
» DIVIDIR («,
» [Latest Inventory] – ( [Running Total] – [Consensus Final] ), «,
» [Consensus Final]»,
«)»,
«)»,
«)»,
«)»,
«)»,
«VAR BurnTab7 =»,
«ADDCOLUMNS (BurnTab6, » FinalBurnDown «, [BurnDown1] + [BurnDown2] ) «,
«»,
«VAR TotalConsensus = SUMX (BurnTab7,[Consensus Final]) «,
«»,
«VAR BurnDownFinal = SUMX (BurnTab7, [FinalBurnDown] ) «,
«»,
«VAR FinalValue = IF (TotalConsensus = 0 && LatestInventory <> 0,9999, IF (TotalConsensus <> 0 && LatestInventory = 0,0, BurnDownFinal))»,
«REGRESO»,
» Valor final»,
«»
kentyler
¿Espera tener en cuenta el stock que se agrega, así como el stock que se gasta?
¿Es el cálculo a una fecha determinada? ¿O siempre comienza en la misma fecha?
gardas_swathi
En respuesta a kentyler
Hola Kentyler,
Necesito tener en cuenta las existencias a partir de hoy y mostrar las semanas de suministro para las próximas semanas.
artemus
En respuesta a gardas_swathi
Ok, aquí está en 3 medidas. Esto supone que tiene una tabla de fecha y de productos:
Forecast running total in DateID =
CALCULATE(
SUM('Forecast'[Forecast]),
FILTER(
ALLSELECTED('Forecast'[DateID]),
ISONORAFTER('Forecast'[DateID], MAX('Forecast'[DateID]), DESC) &&
[DateID] > MAX(Inventory[DateID])
)
)
Latest inventory = MAXX(TOPN(1, Inventory, RELATED(DateTable[Date]),DESC), [Stock])
Inventory with Prediction = IF(MAX(DateTable[Date]) < CALCULATE(MAX(Inventory[DateID]), ALL(Inventory[DateID])), MAX(Inventory[Stock]), [Latest inventory] - Forecast[Forecast running total in DateID])
Esto muestra una predicción para cada día que no tenga una entrada en su tabla de inventario.
PaddyGaul
En respuesta a artemus
Hola @artemus,
Probé esas 3 medidas y puede que me esté perdiendo algo, pero para mí, la medida de ‘inventario con predicción’ dio el total acumulado para una demanda menor invntory.
Podría estar haciendo algo mal, pero ¿no se suponía que la medida calculaba cuántas semanas de suministro estaban disponibles después de calcular ese total acumulado?
Gracias,
Arrozal
Greg_Deckler
En respuesta a artemus
Lo siento, solo saltando aquí, no he probado nada, pero la solución @artemus parece prometedora. Creé una medida rápida de días de suministro una vez. Puede ser útil o no. https://community.powerbi.com/t5/Quick-Measures-Gallery/Days-of-Supply/mp/635656#M318
PaddyGaul
En respuesta a Greg_Deckler
Hola @Greg_Deckler
Traté de crear una medida para semanas de suministro usando las instrucciones en su publicación (simplemente quitando las * 7 partes para hacer semanas en lugar de días) pero estoy teniendo algunos problemas.
Usé los mismos datos y creé una tabla llamada ‘InventoryTable’ y 3 columnas para semana, inventario y demanda. Creo que las medidas __week y __inventory están bien, pero tengo problemas al intentar crear la tabla en:
VAR__table = FILTER (ALL (Inventario),[Week]> __ semana)
Estoy usando Excel en lugar de Power BI, así que no sé si es diferente para eso, pero agregué una tabla en blanco al modelo de datos de Excel y luego ingresé: Medida 2: = FILTRO (TODOS (InventoryTable), InventoryTable[Week]>[__Week]) en la tabla en blanco, pero aparece el siguiente mensaje de error: ‘la expresión se refiere a varias columnas. No se pueden convertir varias columnas a un valor escalar. ‘
Si tienes alguna idea de lo que estoy haciendo mal y podrías ayudar, ¡te lo agradecería mucho!
Muchas gracias,
Arrozal
gardas_swathi
En respuesta a PaddyGaul
Hola Paddy,
Esto es lo que funcionó para mí. Esta es una medida en el modelo tabular de Analysis Service
«// Última versión de pronóstico»,
«VAR MAXCDP =»,
«MAX (‘Versión de previsión'[LatestForecastVersion] ) «,
«// Fecha actual del viernes»,
«VAR SELECTEDDate =»,
«// MAX (‘Fecha'[Fiscal Week]) «,
«(6 – DÍA DE LA SEMANA (HOY ())»,
«+ HOY ()) + 7»,
«//Valor de inventario»,
«VAR LatestInventory = ‘Inventario'[Stock]»,
«// Consulta para obtener el valor de pronóstico de consenso de la semana actual»,
«VAR BurnTab =»,
«FILTRO («,
«RESUMEN («,
» ‘Demanda’,»,
» ‘Fecha'[Fiscal Week], «,
» ‘Demanda'[CDPForecastRecordDateID], «,
«‘Producto'[Business Unit Name], «,
«» Consenso final «, CONVERT («,
«SUM (‘Demanda'[ForecastSell] ), «,
«INTEGER»,
«)»,
«),»,
» ‘Demanda'[CDPForecastRecordDateID] = MAXCDP «,
» && ‘Fecha'[Fiscal Week] > = SELECTEDDate «,
«)»,
«// Paso para crear la columna de totales acumulados»,
«VAR BurnTab2 =»,
«ADDCOLUMNS («,
«BurnTab»,
«» Total acumulado «,»,
«VAR CurrentConsenusDate = [Fiscal Week]»,
» REGRESO»,
«SUMX («,
«FILTRO (BurnTab, [Fiscal Week] <= CurrentConsenusDate), ",
» [Consensus Final]»,
«)»,
«)»,
«// AÑADIR inventario a todas las filas»,
«VAR BurnTab3 =»,
«ADDCOLUMNS (BurnTab2, » Latest Inventory «, LatestInventory)»,
«»,
«VAR BurnTab4 =»,
«ADDCOLUMNS («,
«BurnTab3,»,
«» Inventario con predicción «, [Latest Inventory] – [Running Total]»,
«)»,
«VAR BurnTab5 =»,
«ADDCOLUMNS («,
«BurnTab4»,
«» BurnDown1 «, SI ( [Inventory with Prediction] > 0, 1, 0) «,
«)»,
«VAR BurnTab6 =»,
«ADDCOLUMNS («,
«BurnTab5»,
«» BurnDown2 «, SI («,
» [BurnDown1] = 1, «,
«0»,
» SI («,
» [Inventory with Prediction] <0, ",
» SI («,
» DIVIDIR («,
» [Latest Inventory] – ( [Running Total] – [Consensus Final] ), «,
» [Consensus Final]»,
«) <0,",
«0»,
» DIVIDIR («,
» [Latest Inventory] – ( [Running Total] – [Consensus Final] ), «,
» [Consensus Final]»,
«)»,
«)»,
«)»,
«)»,
«)»,
«VAR BurnTab7 =»,
«ADDCOLUMNS (BurnTab6, » FinalBurnDown «, [BurnDown1] + [BurnDown2] ) «,
«»,
«VAR TotalConsensus = SUMX (BurnTab7,[Consensus Final]) «,
«»,
«VAR BurnDownFinal = SUMX (BurnTab7, [FinalBurnDown] ) «,
«»,
«VAR FinalValue = IF (TotalConsensus = 0 && LatestInventory <> 0,9999, IF (TotalConsensus <> 0 && LatestInventory = 0,0, BurnDownFinal))»,
«REGRESO»,
» Valor final»,
«»
PaddyGaul
En respuesta a gardas_swathi
Hola @gardas_swathi
Gracias por su respuesta, pero actualmente no estoy usando el modelo tabular de Analysis Service y esperaba usar solo una medida DAX.
Mi modelo de datos está estructurado de la siguiente manera, que he llenado con un solo producto. He fusionado un par de tablas en el modelo de datos por ahora, justo mientras estoy probando.
La primera tabla es lo que se ve en la columna ‘stock disponible’, que es solo un informe semanal de nuestro almacén que indica la cantidad en stock al comienzo de esa semana. Las siguientes semanas están en blanco en esta columna, ya que solo muestra la posición actual de esta semana.
Luego, esto se combina con nuestras ventas previstas de salida y entrada de mercancías para las próximas semanas. El rango es solo el número de la semana. La columna ‘inventario’ es entonces un total acumulado de (existencias actuales en mano + bienes en – ventas previstas), por lo que el inventario es de 3000 en la semana 13/04 porque al comienzo de la semana las existencias disponibles son 5000 y las ventas previstas son 2000 para esa semana. En la segunda semana, tiene los 3000 en inventario de la semana pasada, menos 2000 ventas y más 1000 bienes, por lo que 2000 en inventario.
Luego, quiero usar esta columna de total acumulativo para decirme cuántas semanas antes de que esto se convierta en un stock de pronóstico negativo, como se muestra en la columna ‘cobertura de semanas’. ¿Conoce alguna medida DAX que pueda lograrlo?
No se preocupe si no. Muchas gracias por su ayuda.
Arrozal
Código de producto | categoria de producto | Fecha | Stock en mano | Pronostico de ventas | Bienes en | Rango | Inventario | Semanas cubierta |
COS / BE / UK-4912 | Frijoles | 13/04/2020 | 5000 | 2000 | 1 | 3000 | 2,5 | |
COS / BE / UK / 4912 | Frijoles | 20/04/2020 | 2000 | 1000 | 2 | 2000 | 1,66 | |
COS / BE / UK / 4912 | Frijoles | 27/04/2020 | 3000 | 3 | -1000 | 0 | ||