기본 콘텐츠로 건너뛰기

네이키드 필드 참조

필드가 집계 함수에 포함되지 않은 경우 네이키드로 간주됩니다.

네이키드 필드 참조는 여러 값을 포함할 수 있는 배열입니다. 이 경우 Qlik Sense는 사용자가 원하는 값을 모르면 NULL로 평가합니다.

항상 표현식에 집계 함수를 사용하십시오.

표현식이 제대로 평가되지 않으면 집계 함수가 없을 가능성이 높습니다.

표현식에서 필드 참조는 값의 배열입니다. 예:

Max(Invoice Date)가 단일 값임을 보여주는 테이블과 Invoice Date가 값의 배열임을 보여주는 테이블.

 Two tables, one showing that Max(Invoice Date) is a single value, and one showing that Invoice Date is an array of values.

송장 날짜 필드를 집계 함수에 묶어야 단일 값으로 축소됩니다.

표현식에서 집계 함수를 사용하지 않으면 Qlik Sense는 기본적으로 Only() 함수를 사용합니다. 필드 참조가 여러 값을 반환하면 Qlik SenseNULL로 해석합니다.

If() 함수를 사용하여 송장 날짜 분할

If() 함수는 조건부 집계에 자주 사용됩니다. 이 함수는 함수 내에 제공된 조건이 True로 평가되는지, False로 평가되는지에 따른 값을 반환합니다.

앱 내의 Naked field references 시트에서 제목이 Using If() on Invoice dates인 테이블을 찾습니다.

다음과 같이 하십시오.

  1. 제목이 Using If() on Invoice dates인 사용 가능한 테이블을 선택합니다.
    속성 패널이 열립니다.
  2. 열 추가를 클릭하고 측정값을 선택합니다.
  3. 기호 Expression 를 클릭합니다.
    식 편집기를 엽니다.
  4. 다음을 입력합니다. If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. 적용을 클릭합니다.

송장 날짜를 참조 날짜로 분할하여 보여주는 테이블.

 Table showing invoice dates being split by a reference date.

이 표현식은 Invoice Date가 참조 날짜(2/18/2013) 이전인지를 테스트하여, 이전이면 'Before'를 반환합니다. 해당 날짜가 참조 날짜(2/18/2013) 이후이거나 같으면, 'After'를 반환합니다. 참조 날짜는 정수 41323으로 표현됩니다.

자세한 내용은 if - 스크립트 및 차트 함수를 참조하십시오.

네이키드 필드 참조 방지

언뜻보기에 이 표현식은 올바르게 보입니다.

If([Invoice Date]>= Date(41323) 'After', 'Before')

참조 날짜 이후의 송장 날짜를 평가하여 'After'를 반환해야 하며, 그렇지 않으면 'Before'를 반환해야 합니다. 그러나 Invoice Date는 네이키드 필드 참조이고 집계 함수가 없으므로 여러 값을 가진 배열이며 NULL로 평가됩니다. 이전 예에서는 테이블에 Date 값마다 하나의 Invoice Date만 있었기 때문에 표현식이 올바르게 계산되었습니다.

유사한 표현식이 다른 차원 값에서 계산하는 방법과 발생하는 네이키드 필드 참조 문제를 해결하는 방법을 살펴보겠습니다.

If() 함수에서 네이키드 필드 참조 방지

이전과 유사한 표현식을 사용할 것입니다.

If([Invoice Date]>= Date(41323), Sum(Sales))

이번에는 함수가 참조 날짜 이후의 판매액을 합산합니다.

앱 내의 Naked field references 시트에서 제목이 Sum(Amount)인 테이블을 찾습니다.

다음과 같이 하십시오.

  1. 사용 가능한 Sum(Amount) 테이블을 선택합니다.
    속성 패널이 열립니다.
  2. 열 추가를 클릭하고 측정값을 선택합니다.
  3. 기호 Expression 를 클릭합니다.
    식 편집기를 엽니다.
  4. 다음을 입력합니다. If( [Invoice Date]>= 41323, Sum(Sales) )
  5. 적용을 클릭합니다.

연도 및 연간 판매액 합계와 함께 If() 함수를 사용한 표현식의 결과를 보여주는 테이블.

 Table showing year, sum of sales for each year, and the results of the expression

팁: 각 표현식 간의 차이를 보여 주기 위해 측정값에 레이블을 그대로 유지합니다. 통화 값이 있는 열에서 숫자 서식화폐로 변경하고 서식 패턴$ #,##0;-$ #,##0으로 변경합니다.

매년 참조 날짜 이후에 나오는 송장 날짜 배열이 있습니다. 표현식에 집계 함수가 없으므로 이는 NULL로 평가됩니다. 올바른 표현식은 If() 함수의 첫 번째 매개 변수에서 Min() 또는 Max()와 같은 집계 함수를 사용해야 합니다.

If(Max([Invoice Date])>= Date(41323), Sum(Sales))

다음과 같이 하십시오.

  1. 열 추가를 클릭하고 측정값을 선택합니다.
  2. 기호 Expression 를 클릭합니다.
    식 편집기를 엽니다.
  3. 다음을 입력합니다. If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. 적용을 클릭합니다.

연도 및 연간 판매액 합계와 함께 If() 함수를 사용한 다양한 표현식의 결과를 보여주는 테이블.

Table showing year, sum of sales for each year, and the results of the different expressions

또는 If() 함수는 Sum() 함수 내에서 사용할 수 있습니다.

Sum(If([Invoice Date]>= Date(41323), Sales) )

다음과 같이 하십시오.

  1. 열 추가를 클릭하고 측정값을 선택합니다.
  2. 기호 Expression 를 클릭합니다.
    식 편집기를 엽니다.
  3. 다음을 입력합니다. Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. 적용을 클릭합니다.

연도 및 연간 판매액 합계와 함께 If() 함수를 사용한 다양한 표현식의 결과를 보여주는 테이블.

Table showing year, sum of sales for each year, and the results of the different expressions

두 번째부터 마지막까지의 표현식에서 If() 함수는 차원 값마다 한 번 평가되었습니다. 마지막 표현식에서는 원시 데이터의 행마다 한 번 평가됩니다. 함수가 평가되는 방법의 차이로 인해 결과가 달라지지만 둘 다 답을 반환합니다. 첫 번째 표현식은 NULL로 간단히 평가됩니다. 위 그림은 2/18/2013을 참조 날짜로 사용하여 표현식 간의 차이를 보여줍니다.