안녕하세요 제씨입니다.
가을이 한층 더 깊어졌네요. 점점 추위가 익숙해지는 날씨가 되는 것 같습니다.
여러분도 고뿔 조심하셔요 :)
오늘은 고객사와 논의하면서 Performance에 대한 이슈가 제기되었습니다.
무슨 말이냐면, QlikView의 화면 로딩이 느리다는 것이지요 ㅠ_ㅠ
저도 어찌어찌하면서 찾아보니 다음과 같은 자료가 잘 정리되어 있더군요.
Qlik community에서 배포되어있는 파일을 참고삼아 공유합니다.
영어로 되어있지만, 꼼꼼하게 퍼포먼스 향상을 어떻게 해야 하는지 적혀있으니 참고하세요 :)
퍼포먼스가 느려지는 이유는 다양하지만 대표적으로 꼽자면,
데이터가 너무 방대하거나, 화면에 표현식이 너무 많이 들어가 있거나
If나 반복문 로직을 사용해서 퍼포먼스가 안좋아지는 경우가 대표적이겠네요.
그럼 이런 퍼포먼스 이슈들을 어떻게 해결해야 할까요?
1. 복잡한 수식은 Script에서 해결하기
화면에서 If를 쓰거나 반복문을 사용할 때 먼저 생각해야 할 점은, 그 표현식의 로직을 Script에 태울 수 있냐는 점입니다.
그럼 Qvd파일로 마트화해서 데이터 값만 불러들이고, 표현식에서는 간단한 Sum정도로 표현할 수 있도록 하는 것이죠.
최대한 표현식을 가볍게 하는 게 좋습니다.
2. IF 연속문을 Pick-Match로 치환하기
If문 안에 If문이 들어있는 경우, 퍼포먼스에 큰 영향을 미친다고 합니다. If문이 기본적으로 연관된 테이블을 스캔하기 때문이라고 하네요. 그래서 시간이 지날수록 퍼포먼스가 좋아질 리가 없겠죠?
그럼 이런 경우 가급적이면 Pick-Match로 치환하여 표현할 수 있는 방법을 사용하는 게 좋습니다.
If( Region=‘North America’, 100,
if( Region=‘Asia’,50,
if( Region=‘Europe’,75)
)
)
=pick( match( Region,'North America','Asia','Europe'),100,50,75)
3. Set으로 대체하여 사용하기
가급적 Set으로 사용할 수 있으면 Set으로 표현하고, If문을 최소화하는 게 좋습니다. 또한 If문을 불가피하게 사용해야 할 경우에는, 문자열 검색이 아닌 Integer 검색이 될 수 있도록 구축하는 게 좋습니다.
하지만 Set으로 표현할 수 있다면 최선이겠죠?
Worst: Sum( If( ClientGroup=‘North America Sales’, Sales) )
Better: Sum( If ( ClientGroupNum=1,Sales))
Best: Sum( {<ClientGroupNum={1}>} Sales)
4. AGGR(), 계산된 차원(Caculated Dimension)도 가급적 피하자
Aggr() 함수는 강력한 기능입니다. 표현식 내에서 Group By 값으로 집계된 값을 계산할 수 있도록 도와주죠. 하지만 퍼포먼스 측면에서는 도움이 되지는 않습니다. 그래서 가급적이면, Script 단에서 내려서 해결해주는 게 좋다고 하네요!
5. 3~4개 이상의 테이블을 참조하는 차트를 가급적 피하자
데이터 모델링에서 신경써야 하는 부분이겠죠. 그래서 Fact Table은 가급적 최소화 하는 게 좋습니다. 다양한 테이블을 참조해서 가져오게 되면 성능이 저하되니까요.
퍼포먼스를 고려한다면 가급적 모든 Table을 Concatenate해서 하나의 통테이블로 만들면 좋다고 합니다. 하지만 모델링 측면에서 반복되는 데이터를 줄이고, Schema를 담은 정리하기 위해서는 그 중간을 잘 찾아가는 게 개발자/컨설턴트의 역할일 것 같습니다.
가만 살펴보니 퍼포먼스 저하의 주범은 If문인 경우가 대부분이군요. 조건문을 최소화하는 방향으로 고객사의 화면을 가볍게 만들어봐야겠습니다. 숱을 치는 느낌으로 말이죠 :)
이상으로 오늘의 포스팅을 마치겠습니다.
그럼 다음 포스팅까지 안녕히!
'Data > Qlik' 카테고리의 다른 글
왜 대한민국에서는 Qlik Sense 보다 Qlik View를 더 선호할까? (0) | 2020.09.07 |
---|---|
QlikView와 QlikSense의 차이 (0) | 2020.03.22 |
Qlik이란 무엇인가? (0) | 2019.07.28 |