1

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

У меня есть таблица движений от А до Б. У меня может быть движение Тип 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 - это, вероятно, лучший способ сделать это. На данный момент первая часть выглядит так:

=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]])) - I ' Я ожидал получить массив TRUE/FALSE из него, но вместо этого я просто получил ошибку #VALUE. Индекс правильно дает мне массив, Match правильно генерирует массив, при объединении двух (при переходе) он дает мне только один номер в результате, вместо массива чисел, тогда он дает мне (например) { 1} = 1, затем одно ИСТИНА.

Это работает, когда я пересекаю формулу, но когда я выделяю все, что нужно вычислить, это просто дает мне #VALUE. Итак, я полагаю, у меня есть два вопроса (действительно, единственный вопрос - как получить данные, но немного разбить их ...):

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

1 ответ1

0

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

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

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

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

Для моего условного, я просто имел это как ИСТИНА. Зачем беспокоиться о чем-то более сложном? Для N просто передайте ему массив.

У меня нет идеи, почему это работает. (Гораздо лучшая статья), объясняющая, как это сделать, говорит, что они тоже не уверены, почему. Дополнительную информацию можно найти здесь: https://excelxor.com/2014/09/05/index-returning-an-array-of-values/ . Тем не менее, это работает, поэтому я счастлив

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .