Semanas de suministro Medida DAX

Un usuario Pregunto ✅

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

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?

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.

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. ‘

image.png

Si tienes alguna idea de lo que estoy haciendo mal y podrías ayudar, ¡te lo agradecería mucho!

Muchas gracias,

Arrozal

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *