我的问题是建立一个规划生产线的崛起。
我有一个WIP,其中选择了一个加速类别用于每个MSO(主缝合订单)。加速基于小时围栏(例如1-6小时,6-12小时等)。
在WIP上,MSO将具有单位(示例1,920单位)除以每小时的容量(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小时的新结果?
提前非常感谢你!
库尔特
答案 0 :(得分:2)
我不确定如何在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
的内部列表的格式为 time-efficiency-ends ,
效率值。插入无穷大意味着最后的效率永远不会停止。
在正常的迭代编程语言中,您可以使用for循环更新状态,但在M中,您需要使用List.Accumulate
并将所有状态打包为一个值。
答案 1 :(得分:0)
在您的数据模型中,您可能在一个包含2个字段,[Units]和[UnitsPerHour]的表中使用MSO,而另一个名为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小时以便加速。