Draj
¡Hola a todos!
Tengo un problema único que me gustaría resolver y definitivamente agradecería cualquier ayuda. Tengo una muestra de datos como a continuación:
Cálculo de costo promedio 1
Cálculo de costo promedio 2
Aquí tengo 2 ejemplos de cálculo de costo promedio, sin embargo, necesito lograr el Cálculo de costo promedio 2.
En este ejemplo, el costo total es Unit_Cost_Price * Cantidad + Tarifa (que es la columna más a la derecha)
La forma fácil de calcular el costo promedio sería sumar el costo total y dividirlo por la suma de la cantidad (que es el cálculo 1)
Sin embargo, necesito lograr el cálculo usando FIFO, donde los primeros 2 artículos se ignoran (los artículos se ordenan por fecha del más antiguo al más nuevo) ya que la cantidad se cancela entre sí y el costo promedio se calcula después.
Definitivamente agradecería cualquier sugerencia para lograr esto en powerbi
v-alq-msft
En respuesta a Draj
Hola, @draj
Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.
Tabla:
Puede crear columnas y medidas calculadas como se muestra a continuación.
Calculated column:
Running Qty =
var _date="Table"[Date]
var _lastdate =
CALCULATE(
MAX('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]<_date&&
'Table'[Quantity]<0
)
)
var _startdate =
CALCULATE(
MIN('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]>_lastdate
)
)
return
IF(
ISBLANK(_lastdate),
CALCULATE(
SUM('Table'[Quantity]),
FILTER(
ALL('Table'),
'Table'[Date]<=EARLIER('Table'[Date])
)
),
CALCULATE(
SUM('Table'[Quantity]),
FILTER(
ALL('Table'),
'Table'[Date]>=_startdate&&
'Table'[Date]<=EARLIER('Table'[Date])
)
)
)
Running Cost =
var _date="Table"[Date]
var _lastdate =
CALCULATE(
MAX('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]<_date&&
'Table'[Quantity]<0
)
)
var _startdate =
CALCULATE(
MIN('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]>_lastdate
)
)
return
IF(
ISBLANK(_lastdate),
CALCULATE(
SUM('Table'[Total Cost]),
FILTER(
ALL('Table'),
'Table'[Date]<=EARLIER('Table'[Date])
)
),
CALCULATE(
SUM('Table'[Total Cost]),
FILTER(
ALL('Table'),
'Table'[Date]>=_startdate&&
'Table'[Date]<=EARLIER('Table'[Date])
)
)
)
Measure:
avg 1 = SUM('Table'[Total Cost])/SUM('Table'[Quantity])
avg 2 =
var _maxdate =
CALCULATE(
MAX('Table'[Date]),
ALL('Table')
)
return
DIVIDE(
LOOKUPVALUE('Table'[Running Cost],'Table'[Date],_maxdate),
LOOKUPVALUE('Table'[Running Qty],'Table'[Date],_maxdate)
)
Resultado:
Atentamente
Alano
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.
greg_deckler
@draj: desea buscar Min/Max https://community.powerbi.com/t5/Quick-Measures-Gallery/Lookup-Min-Max/mp/985814#M434
Usted «buscará» su fecha máxima y luego la usará para obtener sus otros dos valores.
Draj
En respuesta a greg_deckler
@Greg_Deckler No busco en función de la fecha máxima. Supongamos que hay 2 más después de la tercera entrada y que la cantidad es positiva. El objetivo es luego calcular el promedio basado en estas 3 entradas (1 actual + 2 nuevas entradas)
greg_deckler
En respuesta a Draj
@draj: eso ciertamente no apareció en la publicación original y todavía no estoy seguro de tener claro el requisito. Entonces, ¿estás diciendo que quieres entradas después de la última entrada negativa? Todavía me parece Lookup Min/Max si ese es el caso. Busque la fecha MAXX de todos los valores negativos. Use esa fecha en su filtro para filtrar las filas posteriores a esa fecha. Luego puede hacer el SUMX apropiado, etc. en esas filas FILTRADAS.
Draj
En respuesta a greg_deckler
@Greg_Deckler Gracias por sus comentarios. Déjame ir con más detalle.
Presentaré una llamada de columna que ejecuta QTY, lo que tendría más sentido ya que explica el concepto de FIFO
Echemos un vistazo a estas 3 entradas, que han sido ordenadas por fecha (antigua a nueva). Tenemos una columna de cantidad corriente. En este momento, la forma correcta de calcular el costo promedio sería ignorar los primeros 2 artículos (ya que la cantidad se cancela entre sí) y solo considerar la última entrada.
Ahora veamos un escenario donde se agrega otra entrada, aumentando la cantidad:
Así que aquí tenemos el artículo 4, y la cantidad corriente ahora es 2.000.000. El costo promedio ahora se calcula como (Costo total de 3 y 4)/(Última cantidad acumulada).
Puede ver que es más dinámico que el cálculo promedio habitual (SUMA de costo total / SUMA de cantidad)
v-alq-msft
En respuesta a Draj
Hola, @draj
Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.
Tabla:
Puede crear columnas y medidas calculadas como se muestra a continuación.
Calculated column:
Running Qty =
var _date="Table"[Date]
var _lastdate =
CALCULATE(
MAX('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]<_date&&
'Table'[Quantity]<0
)
)
var _startdate =
CALCULATE(
MIN('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]>_lastdate
)
)
return
IF(
ISBLANK(_lastdate),
CALCULATE(
SUM('Table'[Quantity]),
FILTER(
ALL('Table'),
'Table'[Date]<=EARLIER('Table'[Date])
)
),
CALCULATE(
SUM('Table'[Quantity]),
FILTER(
ALL('Table'),
'Table'[Date]>=_startdate&&
'Table'[Date]<=EARLIER('Table'[Date])
)
)
)
Running Cost =
var _date="Table"[Date]
var _lastdate =
CALCULATE(
MAX('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]<_date&&
'Table'[Quantity]<0
)
)
var _startdate =
CALCULATE(
MIN('Table'[Date]),
FILTER(
ALL('Table'),
'Table'[Date]>_lastdate
)
)
return
IF(
ISBLANK(_lastdate),
CALCULATE(
SUM('Table'[Total Cost]),
FILTER(
ALL('Table'),
'Table'[Date]<=EARLIER('Table'[Date])
)
),
CALCULATE(
SUM('Table'[Total Cost]),
FILTER(
ALL('Table'),
'Table'[Date]>=_startdate&&
'Table'[Date]<=EARLIER('Table'[Date])
)
)
)
Measure:
avg 1 = SUM('Table'[Total Cost])/SUM('Table'[Quantity])
avg 2 =
var _maxdate =
CALCULATE(
MAX('Table'[Date]),
ALL('Table')
)
return
DIVIDE(
LOOKUPVALUE('Table'[Running Cost],'Table'[Date],_maxdate),
LOOKUPVALUE('Table'[Running Qty],'Table'[Date],_maxdate)
)
Resultado:
Atentamente
Alano
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.
Draj
En respuesta a v-alq-msft
@v-alq-msft Muchas gracias!!
greg_deckler
En respuesta a Draj
@draj – Entonces, ¿por qué no usar la Medida rápida total acumulada que está integrada en Power BI para crear esa columna? Y probablemente otra columna de total acumulado para Costo total. Entonces realmente es una situación de búsqueda mínima/máxima ya que su última fecha tendrá los totales que desea.