我的问题是基于建立一个计划生产线的坡道。
我有一个在制品,其中坡道类别被选择用于每个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 producePower BI如何知道将原始的24小时估计值分成几部分,乘以各自的效率,然后返回36小时的新结果?
提前谢谢你!
库尔特
Relationships
发布于 2016-01-04 07:50:15
我不知道如何在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
Resulttime-efficiency-ends,efficiency-value.格式为Efficiency的内部列表插入无限,意味着最后的效率永远不会停止。
在普通的迭代编程语言中,您可以使用for循环来更新状态,但在M中,您需要使用List.Accumulate并将所有状态打包到一个值中。
发布于 2016-01-05 20:00:42
在您的数据模型中,可能有一个表中的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小时的斜坡时间。
https://stackoverflow.com/questions/34568419
复制相似问题