차트 표현식 내 대체 상태의 예

이 예는 QlikView 개발자 및/또는 최고의 QlikView 파워 유저가 대체 상태를 활용하는 것과 관련된 모범 사례를 보여주기 위해 고안되었습니다. 이 예는 'Alternate States Functionality.qvw' 파일에서 찾을 수 있습니다.

상태 사이에 선택 내용 동기화

단일 차트에서 다음과 같은 표현식을 사용할 수 있습니다.

count({$} DISTINCT [Invoice Number])

count({State1} DISTINCT [Invoice Number])

count({State2} DISTINCT [Invoice Number])

이 방식에는 문제가 있습니다. QlikView 개발자는 최종 사용자가 다양한 상태에 따라 적절한 선택을 할 수 있도록 세 가지 상태 모두에 대한 선택 내용(목록 상자 및 다중 상자)을 복제해야 합니다. 대부분의 상황에서 QlikView 개발자는 모든 상태에 대해 일련의 '공통' 선택 내용을 사용할 수 있기를 바랄 것입니다. 그러면 최종 사용자가 다양한 차트에 해당하는 컨텍스트를 설정한 다음 특정 선택 내용을 활용하여 상태 간의 차이점을 표시할 수 있습니다. 상태와 함께 집합 분석을 사용하여 상태 사이에 특정 선택 내용이 일관성을 유지하도록 만들 수 있습니다.

count({State1<Year = $::Year, Month = $::Month>} DISTINCT [Invoice Number])

count({State2<Year = $::Year, Month = $::Month>} DISTINCT [Invoice Number])

QlikView 개발자는 State1 및 State2의 Year 및 Month 선택 내용이 기본 상태의 Year 및 Month 선택 내용과 동기화되도록 유지합니다. QlikView 개발자는 상태 사이에 더 많은 필드가 일관성을 유지하도록 필요에 따라 집합 수정자에 요소를 추가할 수 있습니다.

집합 연산자

상태와 함께 집합 연산자(+, *, -, /)를 사용할 수 있습니다. 다음 표현식은 유효하며 기본 상태 또는 State1 중 하나에 있는 고유 송장 번호의 수를 셉니다.

​예:  

count({$ + State1} DISTINCT [Invoice Number])
<기본> 상태와 State1의 합집합에 있는 고유 송장 번호의 수를 셉니다.

count({1 - State1} DISTINCT [Invoice Number])
State1에 없는 고유 송장 번호의 수를 셉니다.

count({State1 * State2} DISTINCT [Invoice Number])
<기본> 상태와 State1 모두에 있는 고유 송장 번호의 수를 셉니다.

참고: 집합 연산자를 이러한 방식으로 사용할 때는 주의를 기울여야 합니다. 상황에 따라 결과가 예상한 것과 다를 수 있습니다. 이는 특정 상태의 선택 내용이 결합되는 집합과 완벽하게 호환되지 않는 데이터 집합을 생성할 수 있기 때문입니다. 데이터 모델의 복잡성이 높아질수록 그럴 가능성이 특히 더 높습니다.

암시적 필드 값 정의

집합 연산자를 사용하는 다른 방법으로 요소 함수 P() 및 E()와 함께 사용하는 방법이 있습니다. 이 함수는 집합 표현식 내에서만 사용 가능합니다.

​예:  

count({$<[Invoice Number] = p({State1} [Invoice Number])>} DISTINCT [Invoice Number])
이 표현식은 State1에서 사용 가능한 송장 번호를 기준으로 <기본> 상태에 있는 고유 송장 번호의 수를 셉니다.

이는 다음 표현식과 거의 같지만 완전히 동일하지는 않습니다.

count({$<[Invoice Number] = State::[Invoice Number]>} DISTINCT [Invoice Number])

두 표현식의 차이점이라면 첫 번째 표현식에서는 State1의 송장 번호에 사용 가능한 값이 기본 상태로 전달된다는 점입니다. 두 번째 표현식에서는 State1에서 선택한 값이 기본 상태로 전달됩니다. 사용자가 State1에서 송장 번호를 선택하지 않은 경우 아무 송장 번호 값도 기본 상태로 전달되지 않습니다.

집합 연산자는 집합 수정자 내에 사용하는 것이 가장 좋습니다. 다음 표현식은 State1과 State2에서 사용 가능한 송장 번호의 교집합을 찾고 해당 값을 기본 상태의 송장 번호로 전달합니다.

​예:  

count({$<[Invoice Number] = p({State1} [Invoice Number]) * p({State2} [Invoice Number])>} DISTINCT [Invoice Number])
<기본> 상태와 State1에 있는 송장 번호의 교집합을 찾는 표현식은 다음과 같습니다.

count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1} [Invoice Number])>} DISTINCT [Invoice Number])

이 표현식은 요소 함수와 집합 식별자 모두에서 상태(이 경우 <기본>)를 사용하므로 혼동스럽게 보일 수 있습니다. 요소 함수 p($)가 기본 상태의 사용 가능한 값을 반환한다는 점에 유의하십시오. 집합/상태 식별자 {$}는 요소 함수의 결과에 따라 수정됩니다. 현재 기본 상태에 존재하는 모든 송장 선택 내용은 요소 함수의 교집합에서 나온 값으로 재정의됩니다.

위 표현식은 기본 상태와 State1 사이의 공통 선택 내용을 동기화하지 못하므로 아직 완벽하게 정확한 것은 아니라는 점에 유의해야 합니다. 다음은 위 문제에 대응하는 표현식입니다.

​예:  

count({$<[Invoice Number] = p({$} [Invoice Number]) * p({State1<Year = $::Year, Month = $::Month>} [Invoice Number])>} DISTINCT [Invoice Number])

앞서와 마찬가지로, QlikView 개발자는 수정자에 필드를 추가하여 다양한 상태 사이에 선택 내용이 일관적으로 유지되도록 할 수 있습니다.