본문으로 바로가기

Microsoft 365 배열함수 기초 이론 (4단계)

달의이성
달의이성
조회수 25
요약

고급 배열함수 기법과 최적화

🚀 고급 패턴과 최적화 전략

🔥 LET 함수 마스터리

변수를 활용한 복잡한 로직 구현과 성능 최적화

🧠 LAMBDA 함수 활용

사용자 정의 함수로 재사용성 극대화

⚡ 성능 최적화 기법

대용량 데이터에서도 빠른 처리 속도 보장


🔥 LET 함수 고급 활용

기본 개념

=LET(변수1,1, 변수2,2, ..., 최종계산식)

패턴 1: 중간 계산 재사용

// 나쁜 예: 동일한 계산을 반복
=HSTACK(
    FILTER(A2:D11, C2:C11>AVERAGE(C2:C11)),
    FILTER(A2:D11, C2:C11>AVERAGE(C2:C11))
)

// 좋은 예: LET으로 최적화
=LET(
    평균급여, AVERAGE(C2:C11),
    고급여자, FILTER(A2:D11, C2:C11>평균급여),
    HSTACK(고급여자, 고급여자)
)

패턴 2: 복잡한 조건문 단순화

// 다단계 조건 처리
=LET(
    // 1단계: 기본 데이터 필터링
    유효데이터, FILTER(A2:D11, (B2:B11<>"")*( C2:C11>0)),
    
    // 2단계: 등급별 분류
    A등급, FILTER(유효데이터, INDEX(유효데이터,0,4)="A"),
    B등급, FILTER(유효데이터, INDEX(유효데이터,0,4)="B"),
    C등급, FILTER(유효데이터, INDEX(유효데이터,0,4)="C"),
    
    // 3단계: 통계 계산
    A등급통계, {ROWS(A등급), AVERAGE(INDEX(A등급,0,3))},
    B등급통계, {ROWS(B등급), AVERAGE(INDEX(B등급,0,3))},
    C등급통계, {ROWS(C등급), AVERAGE(INDEX(C등급,0,3))},
    
    // 4단계: 최종 결과
    VSTACK(
        {"등급", "인원", "평균급여"},
        {"A", INDEX(A등급통계,1), INDEX(A등급통계,2)},
        {"B", INDEX(B등급통계,1), INDEX(B등급통계,2)},
        {"C", INDEX(C등급통계,1), INDEX(C등급통계,2)}
    )
)

패턴 3: 동적 배열 크기 조정

// 가변 크기 데이터 처리
=LET(
    원본데이터, A2:D100,  // 실제 데이터는 일부만 있음
    유효행수, COUNTA(A2:A100),
    실제데이터, TAKE(원본데이터, 유효행수),
    
    // 동적 처리
    IF(유효행수=0, "데이터 없음", 
       SORT(실제데이터, 3, -1)
    )
)

🧠 LAMBDA 함수 마스터리

기본 문법

=LAMBDA(변수1, [변수2], ..., 계산식)

패턴 1: 재사용 가능한 비즈니스 로직

// 급여 등급 계산 함수
급여등급 = LAMBDA(급여,
    IF(급여>=4500, "S급",
    IF(급여>=4000, "A급", 
    IF(급여>=3500, "B급", "C급")))
)

// 사용 예시
=BYROW(C2:C11, 급여등급)

패턴 2: 복잡한 조건부 계산

// 성과급 계산 함수 (부서별 다른 기준)
성과급계산 = LAMBDA(부서, 급여, 평가,
    LET(
        기본성과급, 급여 * 0.1,
        부서보정, SWITCH(부서, 
            "영업", 1.5, 
            "개발", 1.3, 
            "마케팅", 1.2, 
            1.0),
        평가보정, SWITCH(평가, 
            "A", 1.5, 
            "B", 1.2, 
            "C", 1.0, 
            0.8),
        기본성과급 * 부서보정 * 평가보정
    )
)

// 사용 예시
=MAP(B2:B11, C2:C11, D2:D11, 성과급계산)

패턴 3: 동적 집계 함수

// 유연한 집계 함수 (SUM, AVERAGE, MAX, MIN 등을 동적으로)
동적집계 = LAMBDA(데이터, 집계방식,
    SWITCH(집계방식,
        "합계", SUM(데이터),
        "평균", AVERAGE(데이터),
        "최대", MAX(데이터),
        "최소", MIN(데이터),
        "개수", COUNT(데이터),
        "중앙값", MEDIAN(데이터),
        "표준편차", STDEV(데이터),
        "데이터 없음"
    )
)

// 부서별 다양한 통계 한번에 계산
=LET(
    부서목록, UNIQUE(B2:B11),
    집계방식목록, {"평균", "최대", "최소", "표준편차"},
    
    MAP(부서목록, TRANSPOSE(집계방식목록),
        LAMBDA(부서, 방식,
            LET(
                부서급여, FILTER(C2:C11, B2:B11=부서),
                동적집계(부서급여, 방식)
            )
        )
    )
)

⚡ 성능 최적화 기법

최적화 원칙 1: 불필요한 계산 제거

나쁜 예: 중복 계산

=VSTACK(
    FILTER(A2:A1000, (B2:B1000="영업")*(C2:C1000>AVERAGE(C2:C1000))),
    FILTER(A2:A1000, (B2:B1000="개발")*(C2:C1000>AVERAGE(C2:C1000))),
    FILTER(A2:A1000, (B2:B1000="마케팅")*(C2:C1000>AVERAGE(C2:C1000)))
)

좋은 예: LET으로 최적화

=LET(
    전체데이터, A2:A1000,
    부서데이터, B2:B1000,
    급여데이터, C2:C1000,
    평균급여, AVERAGE(급여데이터),
    고급여조건, 급여데이터>평균급여,
    
    VSTACK(
        FILTER(전체데이터, (부서데이터="영업")*고급여조건),
        FILTER(전체데이터, (부서데이터="개발")*고급여조건),
        FILTER(전체데이터, (부서데이터="마케팅")*고급여조건)
    )
)

최적화 원칙 2: 조기 필터링

나쁜 예: 전체 데이터를 모두 처리

=TAKE(SORT(A1:D10000, 3, -1), 10)

좋은 예: 필요한 데이터만 먼저 추출

=LET(
    유효데이터, FILTER(A1:D10000, C2:C10001>0),
    TAKE(SORT(유효데이터, 3, -1), 10)
)

최적화 원칙 3: 배열 크기 최소화

나쁜 예: 고정된 큰 범위

=UNIQUE(A1:A10000)  // 실제로는 100행만 데이터가 있음

좋은 예: 동적 범위 조정

=LET(
    마지막행, COUNTA(A:A),
    실제범위, A1:INDEX(A:A, 마지막행),
    UNIQUE(실제범위)
)

🎯 고급 실무 패턴

패턴 1: 동적 피벗 테이블

// 부서×평가 교차표 (자동 확장)
=LET(
    원본데이터, A2:D11,
    부서목록, SORT(UNIQUE(INDEX(원본데이터,0,2))),
    평가목록, SORT(UNIQUE(INDEX(원본데이터,0,4))),
    
    교차표, MAP(부서목록, TRANSPOSE(평가목록),
        LAMBDA(부서, 평가,
            SUMPRODUCT(
                (INDEX(원본데이터,0,2)=부서)*
                (INDEX(원본데이터,0,4)=평가)
            )
        )
    ),
    
    // 합계 행/열 추가
    부서별합계, BYROW(교차표, LAMBDA(, SUM())),
    평가별합계, BYCOL(교차표, LAMBDA(, SUM())),
    전체합계, SUM(교차표),
    
    완성표, VSTACK(
        HSTACK("부서", 평가목록, "합계"),
        HSTACK(부서목록, HSTACK(교차표, 부서별합계)),
        HSTACK("합계", 평가별합계, 전체합계)
    ),
    
    완성표
)

패턴 2: 이동 평균과 트렌드 분석

// 월별 실적 이동평균 (3개월)
=LET(
    월별실적, A2:B13,  // 월, 실적
    실적값, INDEX(월별실적,0,2),
    
    이동평균3, MAP(SEQUENCE(ROWS(월별실적)-2,1,3),
        LAMBDA(종료위치,
            AVERAGE(INDEX(실적값, SEQUENCE(3,1,종료위치-2)))
        )
    ),
    
    트렌드, MAP(TAKE(이동평균3,-ROWS(이동평균3)+1), DROP(이동평균3,1),
        LAMBDA(이전, 현재, 
            IF(현재>이전*1.05, "상승",
            IF(현재<이전*0.95, "하락", "유지"))
        )
    ),
    
    VSTACK(
        {"월", "실적", "3개월이동평균", "트렌드"},
        HSTACK(
            DROP(월별실적,2),
            DROP(이동평균3,0,1),
            트렌드
        )
    )
)

패턴 3: 자동 예외 감지

// 급여 이상값 자동 감지 (표준편차 기준)
=LET(
    전체데이터, A2:D11,
    급여데이터, INDEX(전체데이터,0,3),
    
    평균급여, AVERAGE(급여데이터),
    표준편차, STDEV(급여데이터),
    상한선, 평균급여 + 2*표준편차,
    하한선, 평균급여 - 2*표준편차,
    
    이상값표시, MAP(급여데이터,
        LAMBDA(급여,
            IF(급여>상한선, "높음",
            IF(급여<하한선, "낮음", "정상"))
        )
    ),
    
    이상값목록, FILTER(
        HSTACK(전체데이터, 이상값표시),
        이상값표시<>"정상"
    ),
    
    VSTACK(
        {"이름", "부서", "급여", "평가", "이상여부"},
        이상값목록
    )
)

🏆 마스터 레벨 종합 프로젝트

프로젝트: 전사 인사 분석 대시보드

다음 모든 기능을 포함한 종합 시스템을 구축하세요:

1. 동적 검색 및 필터링

  • 다중 조건 검색 (이름, 부서, 급여범위, 평가등급)

  • 실시간 결과 업데이트

  • 검색 결과 통계 자동 계산

2. 고급 분석

  • 부서별/평가별 교차 분석

  • 급여 분포 및 이상값 감지

  • TOP/BOTTOM N 분석

  • 트렌드 분석 (전월 대비 등)

3. 자동 보고서

  • 요약 통계 테이블

  • KPI 지표 계산

  • 예외 상황 자동 알림

4. 성능 최적화

  • 대용량 데이터 처리 가능

  • 빠른 응답 속도

  • 메모리 효율적 처리

평가 기준

  • 기능성: 모든 요구 기능이 정상 동작

  • 사용성: 직관적이고 쉬운 인터페이스

  • 성능: 1000행 이상 데이터에서도 빠른 처리

  • 확장성: 새로운 조건이나 분석 추가 용이

  • 안정성: 예외 상황에서도 에러 없이 동작


🎯 최종 마스터리 체크포인트

마스터 인증 조건

다음을 모두 완성하면 배열함수 마스터 레벨:

  1. LET 함수 숙련도

    • 복잡한 계산을 논리적으로 분해

    • 중간 변수를 효과적으로 활용

    • 가독성과 성능을 동시에 고려

  2. LAMBDA 함수 활용도

    • 재사용 가능한 사용자 정의 함수 작성

    • 비즈니스 로직을 함수로 추상화

    • MAP, BYROW, BYCOL과 효과적 조합

  3. 성능 최적화 능력

    • 대용량 데이터 처리 가능

    • 불필요한 계산 제거

    • 메모리 효율적 구현

  4. 실무 적용 능력

    • 복잡한 비즈니스 요구사항 해결

    • 사용자 친화적 인터페이스 구현

    • 유지보수 가능한 코드 작성

🏆 축하합니다! 이제 당신은 Microsoft 365 배열함수의 진정한 마스터입니다!