Powerbi DAX:将库存分配给未结订单(额外复杂性)
我正在尝试将库存项目分配给DAX、PowerBi中的未结订单。其思想是首先将所有可用库存分配给最早的订单,然后将剩余库存分配给第二个最早的订单,以此类推,直到库存耗尽。即使未结订单未完全满足,库存也可能耗尽 我已经在这件事上问了一个类似的问题,我得到了一个很好的回答,结果也很好。现在,我给这个问题增加了额外的复杂性,即如果有多个客户或发货地点的订单日期相同,但数量不足以满足多个订单,如何决定和分配 请检查所附图片,作为下面分配的示例 最初的问题是:Powerbi DAX:将库存分配给未结订单(额外复杂性),powerbi,dax,powerquery,powerbi-desktop,Powerbi,Dax,Powerquery,Powerbi Desktop,我正在尝试将库存项目分配给DAX、PowerBi中的未结订单。其思想是首先将所有可用库存分配给最早的订单,然后将剩余库存分配给第二个最早的订单,以此类推,直到库存耗尽。即使未结订单未完全满足,库存也可能耗尽 我已经在这件事上问了一个类似的问题,我得到了一个很好的回答,结果也很好。现在,我给这个问题增加了额外的复杂性,即如果有多个客户或发货地点的订单日期相同,但数量不足以满足多个订单,如何决定和分配 请检查所附图片,作为下面分配的示例 最初的问题是: Inventory Allocation =
Inventory Allocation =
VAR TotalInventory =
LOOKUPVALUE ( Inventory[Qty On Hand], Inventory[Item], 'Open Orders'[Item] )
VAR AlreadyOrdered =
CALCULATE (
SUM ( 'Open Orders'[Qty Open] ),
ALL ( 'Open Orders' ),
Inventory[Item] = EARLIER ( 'Open Orders'[Item] ),
'Open Orders'[Due Date] < EARLIER ( 'Open Orders'[Due Date] )
)
RETURN
IF (
AlreadyOrdered > TotalInventory,
0,
MIN ( 'Open Orders'[Qty Open], TotalInventory - AlreadyOrdered )
)
第一个问题的答案如下:
Inventory Allocation =
VAR TotalInventory =
LOOKUPVALUE ( Inventory[Qty On Hand], Inventory[Item], 'Open Orders'[Item] )
VAR AlreadyOrdered =
CALCULATE (
SUM ( 'Open Orders'[Qty Open] ),
ALL ( 'Open Orders' ),
Inventory[Item] = EARLIER ( 'Open Orders'[Item] ),
'Open Orders'[Due Date] < EARLIER ( 'Open Orders'[Due Date] )
)
RETURN
IF (
AlreadyOrdered > TotalInventory,
0,
MIN ( 'Open Orders'[Qty Open], TotalInventory - AlreadyOrdered )
)
库存分配=
VAR总库存=
查找值(库存[现存量]、库存[项目]、“未结订单”[项目])
VAR AlreadyOrdered=
算计(
总额(“未结订单”[未结数量],
全部(‘未结订单’),
存货[项目]=早期('未结订单'[项目]),
“未结订单”[到期日]<更早(“未结订单”[到期日])
)
返回
如果(
AlreadyOrdered>TotalInventory,
0,
最小值(‘未结订单’[未结数量],总库存-已预售)
)
当您的客户和地点有订单时,您可以执行此操作。例如,客户编号和位置(字母)
因为有订单,您可以进行以下更改:
VAR AlreadyOrdered =
CALCULATE (
SUM ( 'Open Orders'[Qty Open] ),
FILTER ( 'Open Orders' ,
Inventory[Item] = EARLIER ( 'Open Orders'[Item] ),
'Open Orders'[Due Date] < EARLIER ( 'Open Orders'[Due Date]) &&
Inventory[CustNr] < EARLIER (Inventory[CustNr]) &&
Inventory[Location] < EARLIER (Inventory[Location]))
)
VAR已读或已读=
算计(
总额(“未结订单”[未结数量],
过滤器(‘未结订单’,
存货[项目]=早期('未结订单'[项目]),
“未结订单”[到期日]<更早(“未结订单”[到期日])&&
存货[CustNr]<早期(存货[CustNr])&&
库存[位置]<早期(库存[位置])
)
注意:为了保持概述,我建议不要使用早期版本,而是使用变量:
VAR curItem = Inventory[Item]
VAR curDueDate = 'Open Orders'[Due Date]
VAR curCustNr = Inventory[CustNr]
VAR curLocation = Inventory[Location]
VAR TotalInventory =
LOOKUPVALUE ( Inventory[Qty On Hand], curItem, 'Open Orders'[Item] )
VAR AlreadyOrdered =
CALCULATE (
SUM ( 'Open Orders'[Qty Open] ),
ALL ( 'Open Orders' ),
Inventory[Item] = curItem ),
'Open Orders'[Due Date] < curDueDate &&
Inventory[CustNr] < curCustNr &&
Inventory[Location] < curLocation )
)
VAR curItem=库存[项目]
VAR curDueDate='未结订单'[到期日]
VAR curCustNr=存货[CustNr]
VAR curLocation=库存[位置]
VAR总库存=
查找值(库存[现存量],库存项目,“未结订单”[项目])
VAR AlreadyOrdered=
算计(
总额(“未结订单”[未结数量],
全部(‘未结订单’),
存货[项目]=curItem),
“未结订单”[到期日]
列中必须始终有一个顺序(排序),否则这将不起作用 当您的客户和地点有订单时,您可以这样做。例如,客户编号和位置(字母) 因为有订单,您可以进行以下更改:
VAR AlreadyOrdered =
CALCULATE (
SUM ( 'Open Orders'[Qty Open] ),
FILTER ( 'Open Orders' ,
Inventory[Item] = EARLIER ( 'Open Orders'[Item] ),
'Open Orders'[Due Date] < EARLIER ( 'Open Orders'[Due Date]) &&
Inventory[CustNr] < EARLIER (Inventory[CustNr]) &&
Inventory[Location] < EARLIER (Inventory[Location]))
)
VAR已读或已读=
算计(
总额(“未结订单”[未结数量],
过滤器(‘未结订单’,
存货[项目]=早期('未结订单'[项目]),
“未结订单”[到期日]<更早(“未结订单”[到期日])&&
存货[CustNr]<早期(存货[CustNr])&&
库存[位置]<早期(库存[位置])
)
注意:为了保持概述,我建议不要使用早期版本,而是使用变量:
VAR curItem = Inventory[Item]
VAR curDueDate = 'Open Orders'[Due Date]
VAR curCustNr = Inventory[CustNr]
VAR curLocation = Inventory[Location]
VAR TotalInventory =
LOOKUPVALUE ( Inventory[Qty On Hand], curItem, 'Open Orders'[Item] )
VAR AlreadyOrdered =
CALCULATE (
SUM ( 'Open Orders'[Qty Open] ),
ALL ( 'Open Orders' ),
Inventory[Item] = curItem ),
'Open Orders'[Due Date] < curDueDate &&
Inventory[CustNr] < curCustNr &&
Inventory[Location] < curLocation )
)
VAR curItem=库存[项目]
VAR curDueDate='未结订单'[到期日]
VAR curCustNr=存货[CustNr]
VAR curLocation=库存[位置]
VAR总库存=
查找值(库存[现存量],库存项目,“未结订单”[项目])
VAR AlreadyOrdered=
算计(
总额(“未结订单”[未结数量],
全部(‘未结订单’),
存货[项目]=curItem),
“未结订单”[到期日]
列中必须始终有一个顺序(排序),否则这将不起作用 谢谢你的解释,奥尔德特!我尝试了&&但不起作用,我尝试让客户使用计算函数,但也不起作用。Var AlreadyOrdered=计算(总和(‘未结订单’[Qty Open]),全部(‘未结订单’[Qty Open Orders]),‘INV’[Item Number]=更早(‘未结订单’[Item]),‘未结订单’[DURE Date]<更早(‘未结订单’[Customer])我已使用过滤器更新了顶部答案,你能试试吗?我试过编辑过的代码,但没用。此外,我将此添加为一个列,而不是一个度量。因此,不来自同一个表的变量不起作用,例如curItem=Inventory[Item]。感谢Aldert的解释!我尝试了&&但不起作用,我尝试让客户使用计算函数,但也不起作用。Var AlreadyOrdered=计算(总和(‘未结订单’[Qty Open]),全部(‘未结订单’[Qty Open Orders]),‘INV’[Item Number]=更早(‘未结订单’[Item]),‘未结订单’[DURE Date]<更早(‘未结订单’[Customer])我已使用过滤器更新了顶部答案,你能试试吗?我试过编辑过的代码,但没用。此外,我将此添加为一个列,而不是一个度量。因此,不来自同一个表的变量不起作用,例如curItem=Inventory[项目]。