使用DAX进行生产计划

时间:2016-01-02 17:07:48

标签: powerpivot powerbi powerquery capacity-planning

我的问题是建立一个规划生产线的崛起。

我有一个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小时的新结果?

提前非常感谢你!

库尔特

Relationships

2 个答案:

答案 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小时以便加速。