【问题标题】:Using DAX for Production Planning使用 DAX 进行生产计划
【发布时间】:2016-01-02 17:07:48
【问题描述】:

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

我有一个 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

【问题讨论】:

    标签: powerpivot powerbi powerquery capacity-planning


    【解决方案1】:

    我不确定如何在 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 并将所有状态打包成一个值。

    【讨论】:

      【解决方案2】:

      在您的数据模型中,您可能在一个包含 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 以作为加速时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-03
        • 2012-05-30
        • 1970-01-01
        相关资源
        最近更新 更多