cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Helper II
Helper II

solución alternativa para el cálculo recursivo de mi medida dax?

Hola

Tengo 2 tablas en pedidos con la fecha de validez del pedido y en stock de tránsito (stock que llega a donde se atenderá el pedido).

(utilizando datos de muestra para simplificar la comprensión)
Estoy buscando un cálculo final como este en mi mesa final -

ClavePedido válido hasta la fechacantidad de pedidoEn tránsito stock que llegue antes de esta fecha(total_qty)pedidos acumulados cubiertos antes de esta fecha(used_stock)Stock alcanzado que no se ha agotado(avail_stock)cantidad de pedido de esta fecha atendida (con servicio)
122-09-2020103003010
123-09-20201530102015
124-09-202020302555

He hecho el cálculo hasta la columna 4 en power BI

si esto fuera en Excel simplemente podría haber hecho
used_stock(2) - serviced(1) + used_stock(1)
avail_stock(2) á total_qty(2) - used_stock(2)
atendidos(2) a min(orden(2),avail_stock(2))


Mis tablas base se ven así -
tabla de pedidos -

ClavePedido válido hasta la fechacantidad de pedido
122-09-202010
123-09-202015
124-09-202020


en la mesa de tránsito -

Clavefecha prevista de alcanzarCantidad en el envío
121-09-202030
125-09-202040


He realizado el cálculo de medida total_qty buscando la suma acumulada de la cantidad de envío para las fechas anteriores al valor seleccionado de la fecha de validez del pedido.

Estoy tratando de hacer el resto de las medidas, pero terminando en referencias circulares. ¿Hay alguna manera de hacerlo?

7 REPLIES 7
Super User IV
Super User IV

@powerbihelp1245 - Véase pbIX adjunto a continuación sig, Tabla 2, 2a y 2b. En la página 2. Creé las siguientes medidas:

total_qty = SUMX(FILTER(RELATEDTABLE('Table (2a)'),[expected date of reaching]<MAX([Order valid till Date])),[Quanity in shipment])


used_stock = 
    VAR __Date = MAX([Order valid till Date])
    VAR __Calc = SUMX(FILTER(ALL('Table (2)'),[Order valid till Date]<__Date),[order quantity])
RETURN
    __Calc+0


avail_stock = [total_qty] - [used_stock]


serviced = MIN(MAX([order quantity]),[avail_stock])


---------------------------------------

@ me in replies or I'll lose your thread!!!

I have a NEW book! 
DAX Cookbook from Packt
Over 120 DAX Recipes!




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

Proud to be a Super User!




@Greg_Deckler muchas gracias por su respuesta.

(editar 2 - en resumen, el stock usado debe ser la suma de los pedidos atendidos en lugar de la suma de los pedidos, lo que dará lugar a una dependencia circular)

Sin embargo, estas medidas sólo me darán el resultado correcto para estos datos en los que los pedidos eran menores que el stock disponible. Si el pedido es mayor que el stock disponible, su sumx para calcular el stock usado será incorrecto, ya que el stock usado sólo debe ser la suma de min(order,available stock) y no sólo la suma de la cantidad de pedido como used_stock no puede ser mayor que el stock disponible.

Por ejemplo, si los datos tenían el segundo pedido como 25 en lugar de 15, sus medidas mostrarán -

ClavePedido válido hasta la fechacantidad de pedidoEn tránsito stock que llegue antes de esta fecha(total_qty)pedidos acumulados cubiertos antes de esta fecha(used_stock)Stock alcanzado que no se ha agotado(avail_stock)cantidad de pedido de esta fecha atendida (con servicio)
122-09-2020103003010
123-09-20202530102020
124-09-2020203035-5 (?)-5

mientras que en realidad debería aparecer así -

ClavePedido válido hasta la fechacantidad de pedidoEn tránsito stock que llegue antes de esta fecha(total_qty)pedidos acumulados cubiertos antes de esta fecha(used_stock)Stock alcanzado que no se ha agotado(avail_stock)cantidad de pedido de esta fecha atendida (con servicio)
122-09-2020103003010
123-09-20202530102020
124-09-202020303000



Básicamente, el sumx en stock usado debe estar en min(cantidad de pedido, avail_stock), pero esto da lugar a un error de dependencia circular.

Todavía podríamos manejar estos -5 haciéndolo cero si el resultado es negativo, pero si un nuevo envío llega en 24-09 se estropeará el avail_stock ya que entonces agregará un erronous -5.

(editar - Sólo fyi, las órdenes no se llevan adelante, sólo son válidas hasta la fecha de validez mencionada)



@Greg_Deckler

para cualquiera que intente resolver esto, sólo quiero el cálculo correcto de la columna con servicio, las columnas de descanso son intermedias creadas por mí como lógica. Si hay otra lógica elegante para llegar a la columna con servicio, eso sería brillante, ya que parece que mi lógica inevitablemente resultará en una dependencia circular

@powerbihelp1245 No está claro en esto. Parecía que estaba recibiendo todas las respuestas correctas. ¿Quizás podría proporcionar un conjunto ampliado de datos de muestra y resultados esperados?


---------------------------------------

@ me in replies or I'll lose your thread!!!

I have a NEW book! 
DAX Cookbook from Packt
Over 120 DAX Recipes!




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

Proud to be a Super User!




Consulte los siguientes datos y la salida esperada y el resultado que darán sus medidas -

ClavePedido válido hasta la fechacantidad de pedido
122-09-202010
123-09-202025
124-09-202020

Clavefecha prevista de alcanzarCantidad en el envío
121-09-202030
124-09-202020

producción esperada -

ClavePedido válido hasta la fechacantidad de pedidototal_qtyused_stockavail_stockServiced
122-09-2020103003010
123-09-20202530102020
124-09-20202050302020

sus medidas de producción -

ClavePedido válido hasta la fechacantidad de pedidototal_qtyused_stockavail_stockServiced
122-09-2020103003010
123-09-20202530102020
124-09-20202050351515

Una vez más tenga en cuenta que sólo quiero el cálculo correcto de la medida con servicio, el descanso es sólo la lógica intermedia construida por mí. Por lo tanto, estoy abierto a una lógica diferente para llegar a la columna con servicio.

Microsoft
Microsoft

Hola @powerbihelp1245 ,

Usé los siguientes datos de ejemplo.

tabla de pedidos:

KEYOrden válido hasta la cantidad del pedido de fecha

19/22/202010
19/23/202025
19/24/202020

en la tabla de tránsito:

KeyQuanity en el envíocuado fecha de llegar

1309/21/2020
120

9/24/2020

Cree estas medidas.

total_qty = 
CALCULATE (
    SUM ( 'in transit table'[Quanity in shipment] ),
    FILTER (
         'in transit table' ,
        [expected date of reaching] <= MAX ( 'order table'[Order valid till Date] )
    )
)
used_stock = 
VAR _Calc =
    CALCULATE (
        SUM ( 'order table'[order quantity] ),
        FILTER (
            ALL ( 'order table' ),
            [Order valid till Date] < MAX ( 'order table'[Order valid till Date] )
        )
    )
VAR _Quanity =
    CALCULATE (
        SUM ( 'in transit table'[Quanity in shipment] ),
        FILTER (
             'in transit table' ,
            [expected date of reaching] < MAX ( 'order table'[Order valid till Date] )
        )
    )
RETURN
    IF ( _Calc + 0 > _Quanity, _Quanity, _Calc + 0 )
avail_stock = 
[total_qty] - [used_stock]
serviced = 
MIN ( MAX ( 'order table'[order quantity] ), [avail_stock] )

El resultado es este.

5.png

Puede consultar más detalles desde aquí.

Saludos

Stephen Tao

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

permítanme probarlo. Me pondremos en su lugar para que me pongas en cuenta.

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

Community Conference

Microsoft Power Platform Communities

Check out the Winners!

secondImage

Create an end-to-end data and analytics solution

Learn how Power BI works with the latest Azure data and analytics innovations at the digital event with Microsoft CEO Satya Nadella.

Top Solution Authors
Top Kudoed Authors