Obtener el resultado de una matriz de la coincidencia de índice

Obtener el resultado de una matriz de la coincidencia de índice

Un poco diferente de la mayoría de las preguntas sobre matrices de coincidencia de índices.

Tengo una tabla de movimientos de A a B. Puedo tener movimiento Tipo 1, Tipo 2, Tipo 3 o Tipo 4.

Cada uno de estos movimientos corresponde a un conjunto diferente de "pasos de enrollado". Estos serían el Paso 1, el Paso 2 o el Paso 3.

Esta relación se captura en una tabla ordenada, así:

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

Donde un 1 es "Sí, están relacionados" y un 0 es "No, no lo están".

Ahora hay una tabla de subpaso a paso, que se ve así:

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

Ahora tengo una tabla de subpasos y cuántos subpasos debo seguir. Tengo una tabla de movimientos y cuántas unidades de movimientos se mueven de A a B. Estoy tratando de calcular cuántas unidades se deben agregar a cada subpaso.

Por ejemplo:

Si tengo el tipo de movimiento 1 para 100 unidades, necesitaría agregar 100 unidades al subpaso 1 - 6. Si luego tengo el tipo de movimiento 2 para 200 unidades, necesitaría agregar 200 unidades adicionales al subpaso 1-6 , para un total de 300 unidades movidas, y luego se agregaron 200 unidades a los subpasos 7-9.

He descubierto que un producto suma es probablemente la mejor manera de hacer esto. Actualmente la primera parte se ve así:

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

Sin embargo, la parte que no funciona es (INDEX(MovementToStepLookup[Roll up Step],MATCH(UnitMovementWorksheetCurrent[Movement Type],MovementToStepLookup[Movement Number],0))=[@[Roll up Step]])): esperaría obtener una matriz VERDADERO/FALSO, pero en su lugar aparece un error #VALOR. El índice me da correctamente la matriz, la coincidencia genera correctamente una matriz, al fusionar los dos (al avanzar) solo me da un número como resultado, en lugar de una matriz de números, luego me da (por ejemplo) { 1} = 1, luego un solo VERDADERO.

Esto funciona cuando paso por la fórmula, pero cuando resalto todo para calcular, simplemente me da #VALOR. Así que supongo que tengo dos preguntas (en realidad, la única pregunta es cómo obtener mis datos, pero desglosándolos un poco...):

1) ¿Cómo consigo que mi coincidencia de índice devuelva un resultado de matriz?
2) ¿Qué estoy haciendo mal en mi fórmula?

Respuesta1

Entonces, después de MUCHAS búsquedas más en Google, la respuesta es extraña y contraria a la intuición, y al momento de escribir este artículo, en realidad no sé todas las razones por las cuales funciona, solo que (¡parece estar!) funcionando.

Cometí un error antes al sacar el paso acumulativo y luego compararlo. Eso fue incorrecto, necesitaba retirarlo si se usaba o no. El partido ha cambiado ligeramente para reflejar esto.

La forma de obligar a Index a devolver múltiples resultados parece ser doble: 1) Tener una declaración condicional, 2) Tener la función N, así:

INDEX(MovementToStepLookup[¿Usado?],N(IF(TRUE,MATCH(UnitMovementWorksheetCurrent[Tipo de movimiento],MovementToStepLookup[Número de movimiento]*(MovementToStepLookup[Paso acumulado]=[@[Paso acumulado]]),0))) )

Para mi condicional, lo tenía como VERDADERO. ¿Por qué molestarse con algo más complejo? Para N, simplemente pásele la matriz.

NO TENGO IDEA de por qué esto funciona. El (artículo mucho mejor) que explica cómo hacerlo dice que tampoco están seguros de por qué. Se pueden encontrar más lecturas aquí:https://excelxor.com/2014/09/05/index-returning-an-array-of-values/. Sin embargo, funciona, así que estoy feliz.

información relacionada