我的问题是基于为生产线规划建立一个斜坡。
我有一个WIP,其中为每个MSO(主缝合订单)选择了一个渐变类别。爬坡是基于小时限制的(例如1-6小时、6-12小时等)。
在在制品上,MSO将有单位(例如1920个单位),除以每小时的产能(80件/小时),得出24小时所需的时间。这需要根据第1-6、6-12、12-18和18-24小时的爬坡率计算,并将我们的效率乘以相关效率。
例如:
Hours 1-6: 20% efficiency * 80 units = 16 units/hr (6 x 16 = 96 units produced)
Hours 6-12: 40% efficiency * 80 units = 32 units/hr (192 units)
Hours 12-18: 60% efficiency * 80 Units = 48 units/hr (288 units)
Hours 18-24: 80% efficiency * 80 units = 64 units/hr (384 units)
Hours 24+: 100% efficiency * 80 units = 80 units/hr ((1920-960)/80)= 12 hours remaining
TOTAL TIME = 36 hours to produce
Power BI如何知道将最初的24小时估计分成多个部分,乘以各自的效率,并返回36小时的新结果?
提前感谢您!
Kurt
关系
我不知道如何在DAX中做到这一点,但你标记了PowerQuery,所以这里有一个自定义查询,可以根据你的参数计算36:
let
MSO = 1920,
Capacity = 80,
Efficiency = {
{6, 0.2},
{12, 0.4},
{18, 0.6},
{24, 0.8},
{#infinity, 1.0}
},
Accumulated = List.Accumulate(Efficiency, [
Remaining = MSO,
RunningHours = 0
], (state, current) =>
let
until = current{0},
eff = current{1},
currentCapacity = eff * Capacity,
RemainingHours = state[Remaining] / currentCapacity,
CappedHours = List.Min({RemainingHours, until - state[RunningHours]})
in [
Remaining = state[Remaining] - currentCapacity * CappedHours,
RunningHours = state[RunningHours] + CappedHours
]),
Result = if Accumulated[Remaining] = 0
then Accumulated[RunningHours]
else error "Not enough time to finish!"
in
Result
Efficiency
的内部列表的形式为时间效率结束,
效率值。插入无穷大意味着最后的效率永远不会停止。
在正常的迭代编程语言中,您可以使用for循环更新状态,但在M中,您需要使用List.Accumulate
并将所有状态打包为一个值。
在您的数据模型中,您可能在一个包含两个字段的表中有MSO,即[Units]和[UnitsPerHour],以及另一个名为EffTable的表,该表可能存储按小时界限划分的效率。在MSO表中创建4个新的计算列,每小时一列,例如[1-6]:
=
6 * LOOKUPVALUE ( EffTable[Efficiency], EffTable[Hours], "1--6" )
* [UnitsPerHour]
这些字段包含您将在4个时隙中生产的单位数量。为总数创建一个新的计算字段[RampUpUnits]:
=
[1--6Hours] + [6--12Hours] + [12--18Hours] + [18--24Hours]
最后计算总时间为:
=
24
+ ( [Units] - [RampUpUnits] )
/ [UnitsPerHour]
这将计算剩余单元所需的小时数,并将其与24相加作为上升时间。