2016-05-27 5 views
0

Ich muss eine Best-Case-Szenario-Analyse in einem spreadhseet stark über Power Pivot gebaut machen.Lineare Programmierung mit Power Pivot

Also ich frage mich, ob es möglich wäre, eine lineare Optimierung innerhalb PP zu machen.

Das Problem ist wie folgt:

I N Träger haben, von denen jeder mit einem Preis pro Reise und einer Kapazität (Reisen/Woche). Ich muss die Kosten ($/Woche) minimieren, indem ich die X-Reisen über diese Träger verteile.

Eigentlich habe ich nicht wissen müssen, wie es zu verteilen, sondern nur die minimalen Kosten

Beispiel:

Träger | Preis | Kapazität

A 20 $ 10

B $ 30 20

C $ 15 5

Für X = 20, die Informationen, die ich brauche, ist nur, dass der beste Fall 425 $ kosten würde (5 * $ 15 + 10 * $ 20 + 5 * $ 30).

Ich kann nicht herausfinden, wie die Iterationen zu machen, außer für sich vorgetäuscht durch Spalten mehr berechnet

+0

Ich bin mir nicht sicher, was Sie mit "in PP" meinen, aber Excel Solver-Add-in kann die lineare Programmierung und wenn es keine integrierte Schnittstelle, kann VBA Schnittstelle zwischen dem Solver und powerpivot. –

+0

Mit "innerhalb von PP" meine ich durch DAX und Datenrelationen usw. Ich bin mir bewusst, dass Solver ein großartiges Werkzeug für lineare Programmierung ist, aber das Problem, das ich beschrieben habe, ist für eine Route, und ich habe ungefähr 600 davon. Und da dies nicht die endgültige Analyse ist, wäre es schön, die Ergebnisse mit Power Pivot manipulieren zu können. –

+0

DAX scheint überhaupt keine vollwertige Programmiersprache zu sein, also würde ich nicht denken, dass Sie simplex darauf anwenden könnten. –

Antwort

3

Dies ist ein kumulatives Gesamt Problem mit. Nehmen wir an, dass der Wert für X als Spalte in derselben Power-Pivot-Entität gespeichert wird. Wir werden X TotalPeople nennen. In ein berechnete Spalte namens CummulativeCapacity:

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

Dann ein weitere Spalte hinzufügen, um den Gesamtpreis für den Träger zu speichern:

= 
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] 
) 

Die Summe des Gesamtpreises wird die minimal Kosten.

+0

Wow, du hast es total genagelt! Mit den richtigen Anpassungen bekam ich genau das, was ich wollte. Danke vielmals!Ich denke, es würde viel mehr Erfahrung mit DAX brauchen, um zu diesem Ergebnis zu kommen. –

+0

Danke @VituTomaz Es ist nicht so komplex, wie es aussehen könnte. Das einzige wichtige Konzept, das hier zu verstehen ist, ist das, was EARLIER bedeutet. – Rory