2016-05-27 4 views
0

Power Pivotに重点を置いたスプレッドシートで、最良のシナリオ分析を行う必要があります。パワーピボットを使用した線形プログラミング

私はPP内で線形最適化が可能かどうか疑問に思っていました。次のように

問題がある:

Iは、N個のキャリア、旅行あたりの価格と容量(進行/週)とのそれぞれを有しています。私はこれらのキャリアにXの旅行を分配することによってコスト($ /週)を最小限に抑える必要があります。

実は、私はちょうど最小

例のコストは、それを配布する方法を知っている必要はありません。

キャリアを|価格|容量= 20 Xについて

A $ 20 10

B $ 30 20

C $ 15 5

、私が必要な情報は、最良の場合のシナリオは$ 425(5 * $ 15 +を要するのと同じことです10 * $ 20 + 5 * $ 30)。

私は、複数の計算列

+0

"PP内"の意味はわかりませんが、Excelのソルバーアドインは線形プログラミングを処理でき、組み込みのインターフェイスがない場合、VBAはソルバーとPowerpivotの間でインターフェイスを取ることができます。 –

+0

「PP内」とは、DAXとデータの関係などを意味します。ソルバーは線形計画の優れたツールですが、私が説明した問題は1つの経路であり、約600点あります。これは最終的な分析ではないので、パワーピボットを使用して結果を操作できるのは良いことです。 –

+0

DAXはまったく本格的なプログラミング言語ではないようですので、シンプレックスを実装することはできません。 –

答えて

3

これはcummulative総問題であるを使用して、それらを偽造を除き、反復を作成する方法を見つけ出すことができませんでした。 Xの値が同じパワーピボットエンティティ上の列として格納されているとしましょう。 X TotalPeopleを呼び出します。 がCummulativeCapacityと呼ばれる計算された列を追加します。

= 
CALCULATE (
    SUM (Table1[Capacity]), 
    FILTER (ALL (Table1), Table1[Price] <= EARLIER (Table1[Price])) 
) 

その後のキャリアのために合計金額を格納するための別の列を追加します。

= 
IF (
    [TotalPeople] > [CummulativeCapacity], 
    [Price] * [Capacity], 
    IF (
     (
      [TotalPeople] 
       - CALCULATE (
        MAX ([CummulativeCapacity]), 
        FILTER (Table1, Table1[Price] < EARLIER (Table1[Price])) 
       ) 
     ) 
      * [Price] 
      < 0, 
     0, 
     [TotalPeople] 
      - CALCULATE (
       MAX ([CummulativeCapacity]), 
       FILTER (Table1, Table1[Price] < EARLIER (Table1[Price])) 
      ) 
    ) 
     * [Price] 
) 

合計金額の合計が最小のコストになります。

+0

うわー、あなたは完全にそれを釘付け!適切な適応で、私は欲しかったものを正確に得ました。どうもありがとう!私はこの結果を得るためにDAXの経験がかなり多いと思います。 –

+0

ありがとう@VituTomazそれは見た目ほど複雑ではありません。ここで把握する唯一の重要なコンセプトは、アーリーイヤーの意味です。 – Rory

関連する問題