Abrufen eines Array-Ergebnisses vom Index-Match

Abrufen eines Array-Ergebnisses vom Index-Match

Also ein bisschen anders als die meisten Index-Match-Array-Fragen

Ich habe eine Tabelle mit Bewegungen von A nach B. Ich kann Bewegung vom Typ 1, Typ 2, Typ 3 oder Typ 4 haben.

Jede dieser Bewegungen entspricht einem anderen Satz von „Roll-up-Schritten“. Dies wären Schritt 1, Schritt 2 oder Schritt 3.

Diese Beziehung wird in einer übersichtlichen Tabelle wie folgt erfasst:

Step      Type   Relationship
Step 1 - Type 1 - 1
Step 2 - Type 1 - 0
Step 3 - Type 1 - 0
Step 1 - Type 2 - 1
Step 2 - Type 2 - 1
Step 3 - Type 2 - 0
Step 1 - Type 3 - 0
Step 2 - Type 3 - 0
Step 3 - Type 3 - 1
Step 1 - Type 4 - 1
Step 2 - Type 4 - 1
Step 3 - Type 4 - 1

Dabei bedeutet 1 „Ja, sie sind verwandt“ und 0 „Nein, sind sie nicht“.

Jetzt gibt es eine Unterschritt-zu-Schritt-Tabelle, die so aussieht:

SubStep  --- Step
1             1
2             1
3             1
4             1
5             1
6             1
7             2
8             2
9             2
10            3
11            3
12            3

Jetzt habe ich eine Tabelle mit Unterschritten und wie viele Unterschritte ich ausführen muss. Ich habe eine Tabelle mit Bewegungen und wie viele Bewegungseinheiten von A nach B bewegt werden. Ich versuche herauszufinden, wie viele Einheiten zu jedem Unterschritt hinzugefügt werden müssen.

Zum Beispiel:

Wenn ich Bewegungstyp 1 für 100 Einheiten habe, muss ich den Unterschritten 1 bis 6 100 Einheiten hinzufügen. Wenn ich dann Bewegungstyp 2 für 200 Einheiten habe, muss ich den Unterschritten 1 bis 6 weitere 200 Einheiten hinzufügen, also insgesamt 300 bewegte Einheiten, und dann müssen den Unterschritten 7 bis 9 200 Einheiten hinzugefügt werden.

Ich habe herausgefunden, dass ein Summenprodukt wahrscheinlich die beste Methode dafür ist. Derzeit sieht der erste Teil so aus:

=SUMPRODUCT(UnitMovementWorksheetCurrent[Units],--(UnitMovementWorksheetCurrent[Month]=[@Month]),--(UnitMovementWorksheetCurrent[Year]=[@Year]),--(UnitMovementWorksheetCurrent[From]=[@[Lab Abbr]]),--(INDEX(MovementToStepLookup[Roll up Step],MATCH(UnitMovementWorksheetCurrent[Movement Type],MovementToStepLookup[Movement Number],0))=[@[Roll up Step]]))

Der Teil, der jedoch nicht funktioniert, ist der folgende (INDEX(MovementToStepLookup[Roll up Step],MATCH(UnitMovementWorksheetCurrent[Movement Type],MovementToStepLookup[Movement Number],0))=[@[Roll up Step]])): Ich erwarte, ein TRUE/FALSE-Array zu erhalten, aber stattdessen erhalte ich nur einen #VALUE-Fehler. Der Index gibt mir das Array korrekt, der Match generiert korrekt ein Array, beim Zusammenführen der beiden (beim Durchlaufen) erhalte ich als Ergebnis nur eine Zahl statt eines Zahlenarrays, dann erhalte ich (zum Beispiel) {1} = 1 und dann ein einzelnes TRUE.

Das funktioniert, wenn ich die Formel durchgehe, aber wenn ich das Ganze zum Berechnen markiere, bekomme ich nur #VALUE. Ich habe also zwei Fragen (eigentlich ist die einzige Frage, wie ich meine Daten durchziehen kann, aber ich breche das ein bisschen auf...):

1) Wie erreiche ich, dass mein Index-Match ein Array-Ergebnis zurückgibt?
2) Was mache ich in meiner Formel falsch?

Antwort1

Nachdem ich also VIEL mehr gegoogelt habe, ist die Antwort seltsam und kontraintuitiv, und während ich dies schreibe, kenne ich eigentlich nicht alle Gründe, WARUM es funktioniert, sondern nur, dass es (zu funktionieren scheint!)

Mir ist vorhin ein Fehler unterlaufen, als ich den Rollup-Schritt herausgezogen und dann verglichen habe. Das war falsch, ich hätte herausziehen müssen, ob er verwendet wurde oder nicht. Die Übereinstimmung wurde leicht geändert, um dies widerzuspiegeln.

Es gibt offenbar zwei Möglichkeiten, Index zur Rückgabe mehrerer Ergebnisse zu zwingen: 1) Durch eine bedingte Anweisung. 2) Durch die Verwendung der Funktion N, etwa so:

INDEX(MovementToStepLookup[Verwendet?],N(WENN(WAHR,VERGLEICH(UnitMovementWorksheetCurrent[Bewegungstyp],MovementToStepLookup[Bewegungsnummer]*(MovementToStepLookup[Rollup-Schritt]=[@[Rollup-Schritt]]),0))))

Für meine Bedingung hatte ich es einfach als TRUE. Warum sich mit etwas Komplexerem herumschlagen? Für das N übergeben Sie ihm einfach das Array.

Ich habe KEINE AHNUNG, warum das funktioniert. In dem (viel besseren Artikel), in dem erklärt wird, wie es geht, heißt es, dass sie sich auch nicht sicher sind, warum. Weitere Informationen finden Sie hier:https://excelxor.com/2014/09/05/index-returning-an-array-of-values/. Aber es funktioniert, also bin ich zufrieden

verwandte Informationen