1

我的问题是基于为规划生产线建立一个斜坡。

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

非常感谢您!

库尔特

关系

4

2 回答 2

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 ,efficiency-value。插入无穷大意味着最后的效率永不停止。

在普通的迭代编程语言中,您可以使用 for 循环更新状态,但在 M 中,您需要使用List.Accumulate并将所有状态打包成一个值。

于 2016-01-03T23:50:15.393 回答
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 以作为加速时间。

于 2016-01-05T12:00:42.167 回答