따라서 대부분의 인덱스 일치 배열 질문과는 약간 다릅니다.
A부터 B까지의 동작 테이블이 있습니다. 동작 유형 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
이제 하위 단계와 수행해야 할 하위 단계 수에 대한 테이블이 생겼습니다. 나는 동작 테이블을 가지고 있으며 A에서 B로 몇 개의 동작 단위가 이동되고 있는지를 알고 있습니다. 각 하위 단계에 몇 개의 단위를 추가해야 하는지 계산하려고 합니다.
예를 들어:
100단위에 대한 이동 유형 1이 있는 경우 하위 단계 1~6에 100단위를 추가해야 합니다. 200단위에 대한 이동 유형 2가 있는 경우 하위 단계 1~6에 200단위를 추가해야 합니다. , 총 300개의 단위가 이동된 후 하위 단계 7~9에 200개의 단위가 추가됩니다.
나는 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]]))
TRUE/FALSE 배열을 얻으려고 했지만 대신 #VALUE 오류가 발생한다는 것입니다. Index는 나에게 배열을 올바르게 제공하고, Match는 배열을 올바르게 생성합니다. 두 개를 병합할 때(단계적으로 진행할 때) 결과적으로 숫자 배열 대신 하나의 숫자만 제공합니다. 그러면 나에게 제공됩니다(예를 들어) { 1} = 1이고 단일 TRUE입니다.
이는 수식을 단계별로 실행할 때 작동하지만 계산할 전체 항목을 강조 표시하면 #VALUE만 표시됩니다. 그래서 두 가지 질문이 있다고 가정합니다(실제로 유일한 질문은 내 데이터를 가져오는 방법이지만 데이터를 조금 세분화하는 것입니다...).
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/. 그래도 효과가 있어서 다행이에요