Получение результата массива обратно из index-match

Получение результата массива обратно из index-match

Немного отличается от большинства вопросов по индексному сопоставлению массивов

У меня есть таблица перемещений из точки А в точку Б. У меня могут быть перемещения типа 1, типа 2, типа 3 или типа 4.

Каждое из этих движений соответствует разному набору "шагов скатывания". Это будет Шаг 1, Шаг 2 или Шаг 3.

Эта взаимосвязь отражена в наглядной таблице, например:

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

Где 1 означает «Да, они родственники», а 0 — «Нет, они не родственники».

Теперь есть таблица подшагов для шагов, которая выглядит так:

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

Теперь у меня есть таблица подшагов и сколько подшагов мне нужно сделать. У меня есть таблица движений и сколько единиц движений перемещается из точки А в точку В. Я пытаюсь вычислить, сколько единиц нужно добавить к каждому подшагу.

Например:

Если у меня есть тип движения 1 для 100 юнитов, мне нужно будет добавить 100 юнитов к подшагам 1–6. Если у меня есть тип движения 2 для 200 юнитов, мне нужно будет добавить еще 200 юнитов к подшагам 1–6, чтобы в общей сложности переместить 300 юнитов, а затем 200 юнитов добавить к подшагам 7–9.

Я выяснил, что суммирование — это, вероятно, лучший способ сделать это. В настоящее время первая часть выглядит так:

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

Однако часть, которая не работает, это (INDEX(MovementToStepLookup[Roll up Step],MATCH(UnitMovementWorksheetCurrent[Movement Type],MovementToStepLookup[Movement Number],0))=[@[Roll up Step]]))- я ожидал получить массив TRUE/FALSE, но вместо этого я просто получаю ошибку #VALUE. Index правильно дает мне массив, Match правильно генерирует массив, при слиянии двух (при пошаговом выполнении) он дает мне только одно число в качестве результата, вместо массива чисел, затем он дает мне (например) {1} = 1, затем одно TRUE.

Это работает, когда я прохожу по формуле, но когда я выделяю все, что нужно вычислить, оно просто выдает мне #ЗНАЧЕНИЕ. Так что, полагаю, у меня два вопроса (на самом деле, единственный вопрос в том, как вытащить мои данные, но если немного их разбить...):

1) Как мне заставить мой индекс-соответствие возвращать результат массива?
2) Что я делаю неправильно в своей формуле?

решение1

Итак, после МНОГОГУЧЕГО гугления ответ оказался странным и нелогичным, и на момент написания статьи я на самом деле не знал всех причин, ПОЧЕМУ это работает, просто то, что это (кажется!) работает.

Ранее я допустил ошибку, когда вытаскивал шаг сворачивания, а затем сравнивал его. Это было неправильно, мне нужно было вытаскивать, использовался он или нет. Соответствие немного изменилось, чтобы отразить это.

Способ принуждения Index к возврату нескольких результатов, по-видимому, двоякий: 1) использовать условный оператор, 2) использовать функцию N, например:

INDEX(MovementToStepLookup[Использовано?],N(IF(TRUE,MATCH(UnitMovementWorksheetCurrent[Тип движения],MovementToStepLookup[Номер движения]*(MovementToStepLookup[Шаг свертывания]=[@[Шаг свертывания]]),0))))

Для моего условного выражения я просто указал значение TRUE. Зачем заморачиваться с чем-то более сложным? Для N просто передайте ему массив.

Я ПОНЯТИЯ НЕ ИМЕЮ, почему это работает. В (гораздо лучшей статье), объясняющей, как это сделать, говорится, что они тоже не уверены, почему. Больше информации можно найти здесь:https://excelxor.com/2014/09/05/index-returning-an-array-of-values/. Однако это работает, так что я доволен.

Связанный контент