Liquid는 Looker에서 더 동적인 콘텐츠를 만드는 데 사용할 수 있는 템플릿 언어입니다. 예를 들어 쿼리 결과에 따라 외부 도구의 URL을 빌드하거나 사용자의 선택사항에 따라 쿼리되는 데이터베이스 테이블을 변경할 수 있습니다.
유동 문은 변수, 필터, 태그로 빌드됩니다. 변수에는 사용하려는 정보가 포함되며 Looker에서 제공하는 변수가 이 페이지에 설명되어 있습니다. 이 값과 유동적인 가이드는 이 유동성 가이드에서 확인할 수 있는 필터와 태그를 사용하여 추가로 수정할 수 있습니다.
LookML에는 Liquid를 사용할 수 있는 위치가 여러 개 있습니다.
action
매개변수- 필드의
description
매개변수 (탐색은 제외) html
매개변수label
매개변수,view_label
매개변수,group_label
매개변수,group_item_label
매개변수를 비롯한 필드 수준의 라벨 매개변수link
매개변수sql
로 시작하는 매개변수(예:sql
및sql_on
)default_value
대시보드 필터 매개변수filters
대시보드 요소 매개변수
유동 변수 사용
Liquid 변수의 기본 사용법은 간단합니다. 사용할 변수를 식별한 후 (다음 목록 참고) 유효한 LookML 매개변수에 이 변수를 삽입하기만 하면 됩니다. 특정 LookML 매개변수에서 사용할 수 있는 특정 Liquid 변수가 아래에 정의되어 있습니다.
2가지 액체 사용
Liquid 변수는 두 가지 방법으로 사용할 수 있습니다.
- 출력 구문: 이 유형의 유형은 텍스트를 삽입할 수 있으며 Looker에서 Liquid를 사용하는 가장 일반적인 방법일 수 있습니다. 이 방법에서는 Liquid 변수를 중괄호 두 개에 묶습니다. 예:
{{ value }}
- 태그 구문: 이 유형의 사용은 일반적으로 텍스트를 삽입하지 않습니다. 대신 논리적 비교 및 기타 Liquid 작업에 사용됩니다. 이 방법에서는 Liquid 변수를 중괄호 하나와 단일 퍼센트 기호로 묶습니다. 예:
{% dynamic if value > 10000 %}
기본 예시
이 HTML 사용 예에서는 제품 이미지를 생성하기 위해 <img>
태그에 제품 ID가 삽입됩니다.
dimension: product_image {
sql: ${product_id} ;;
html: <img src="https://www.brettcase.com/product_images/{{ value }}.jpg" /> ;;
}
이 URL 사용 예에서는 아티스트에 대한 Google 검색을 생성하기 위해 아티스트 이름이 URL에 삽입됩니다.
dimension: artist_name {
sql: ${TABLE}.artist_name ;;
link: {
label: "Google"
url: "https://www.google.com/search?q={{ value }}"
icon_url: "https://google.com/favicon.ico"
}
}
이 SQL 사용 예시에서는 사용자가 선택한 필드에 따라 데이터베이스 테이블이 결정됩니다. 구문은 if
(그렇지 않으면 elsif
으로 표시) else
구조를 사용하여 쿼리에 포함된 필드를 확인하고 이에 대응합니다.
sql_table_name:
{% dynamic if event.created_date._in_query %}
event_by_day
{% elsif event.created_week._in_query %}
event_by_week
{% dynamic else %}
event
{% dynamic endif %} ;;
이 라벨 사용 예에서 email
측정기준은 LookML 모델 이름에 따라 label
값을 변경합니다. 이렇게 하면 필드 선택 도구 및 email
측정기준이 포함된 모든 쿼리 결과에서 필드 이름이 동적으로 변경됩니다.
dimension: email {
label: "{% dynamic if _model._name == 'thelook' %} Looker Registered Email Address {% dynamic else %} External Email Address {% dynamic endif %}"
type: string
sql: ${TABLE}.email ;;
}
추가 사용 예시는 관심 있는 개별 LookML 매개변수 페이지를 참고하세요.
다른 필드에서 변수 액세스
유동 변수는 일반적으로 사용되는 필드를 기반으로 합니다. 그러나 필요한 경우 다른 필드의 값에도 액세스할 수 있습니다.
{{ view_name.field_name._liquid-variable-name }}
형식을 사용하여 쿼리 결과에서 동일한 행의 다른 필드에 액세스합니다. _liquid-variable-name
를 Looker Liquid 변수로 바꿉니다. 다음과 같이 변수 이름 앞에 밑줄이 있는지 확인합니다.
{{ view_name.field_name._value }}
{{ view_name.field_name._rendered_value }}
{{ view_name.field_name._model._name }}
다음 예는 다른 입력란에서 웹사이트 URL에 액세스하기 위해 사용한 유형입니다.
dimension: linked_name {
sql: ${name} ;;
html: <a href="{{ website.url._value }}" target="_blank">{{ value }}</a> ;;
}
{{ field_name._value }}
Liquid 변수 구문으로 다른 필드를 참조하면 참조된 필드가 SQL 쿼리의SELECT
절에 추가되고GROUP BY
절에 추가 열로 추가됩니다. 참조된 필드의 값을 적절하게 가져오는 데 필요합니다. 하지만 이로 인해 집계 측정에 예상치 못한 결과가 발생할 수 있습니다. 자세한 내용은 이 페이지의 집계식에서 액체 변수를 사용하는 방법에 관한 섹션을 참고하세요.
액체 변수 정의
다음 표에서는 LookML과 함께 사용할 수 있는 Liquid 변수를 설명합니다. 사용량 열에는 각 Liquid 변수와 함께 사용할 수 있는 LookML 매개변수가 표시되며 다음 옵션이 포함됩니다.
A = action
매개변수와 작동
DV = default_value
(대시보드용) 매개변수와 작동
DE = 필드 수준에서 description
매개변수를 사용할 수 있지만 탐색 수준에서는 description
를 사용하지 않음
F = filters
(대시보드 요소용) 매개변수와 작동
H = html
매개변수와 작동
LA = label
매개변수, view_label
매개변수, group_label
매개변수, group_item_label
매개변수를 비롯한 필드 수준에서 라벨 매개변수와 함께 작동하지만 모델, 탐색, 보기, 참조 선 수준에서는 라벨 매개변수로 작동하지 않거나 link
의 하위 매개변수로 label
을 사용합니다.
LI = link
매개변수와 작동
S = sql
로 시작하는 모든 LookML 매개변수 (예: sql
, sql_on
, sql_table_name
)와 호환됩니다.
변수 | 정의 | 용도 | 출력 예시 |
---|---|---|---|
필드 값 | |||
value | 데이터베이스 쿼리에서 반환된 필드의 원시 값입니다. 피봇 필드의 값을 참조할 수 있습니다. 사용량 열에 표시된 매개변수 외에도 value 는 action 및 link 매개변수의 label 하위 매개변수에서 지원됩니다. | A H LI | 8521935 |
rendered_value | Looker의 기본 형식이 지정된 필드의 값입니다. 고객센터의 유동적인 날짜 형식을 통한 쉬운 날짜 형식 지정 도움말에 표시된 대로 rendered_value 에서 날짜 형식 지정 구문을 참조할 수 있습니다.사용 열에 표시된 매개변수 외에도 rendered_value 는 action 및 link 매개변수의 label 하위 매개변수에서 지원됩니다. | A H LI | 8,521,935.00달러 |
filterable_value | Looker URL에서 필터로 사용하기 위해 형식이 지정된 필드의 값입니다. 예를 들어 'Periaptly, Inc'와 같이 쉼표가 포함된 문자열 값을 필터링하면 value 변수는 'Periaptly'와 'Inct;'라는 두 개의 다른 문자열을 반환합니다. filterable_value 변수는 특수문자를 이스케이프 처리하고 단일 문자열을 반환하여 이 문제를 수정합니다(이 예에서는 "Periaptly, Inc"). | A H LI | 8521935 |
링크 | |||
link | Looker의 기본 드릴 링크 URL입니다. 일부 필드에는 기본 링크가 없습니다. | A H LI S | /explore/thelook/orders?fields=orders.order_amount&limit=500 |
linked_value | Looker의 기본 형식과 기본 링크가 있는 필드의 값입니다. 측정에는 기본 연결이 없으므로 linked_value 와 호환되려면 drill_fields 매개변수를 구성해야 합니다. | A H LI | 8,521,935.00달러 |
필터 | |||
_filters['view_name.field_name'] | view_name.field_name 를 사용하여 요청하는 필드에 사용자 필터가 적용됩니다._filters['view_name.field_name'] 은(는) 파생된 테이블의 sql 매개변수에서도 지원되지만 다른 sql 매개변수에서는 지원되지 않습니다. 파생된 테이블 sql 매개변수에서 _filters['view_name.field_name'] 를 사용하려면 sql_quote 액체 필터가 필요합니다. | A DE H LA LI | null 아님 |
{% date_start date_filter_name %} | date_filter_name 을 사용하여 요청하는 날짜 필터의 시작일 자세한 내용은 date_start 및 date_end 사용 섹션을 참고하세요. | S | 2017-01-01 |
{% date_end date_filter_name %} | date_filter_name 을 사용하여 요청하는 날짜 필터의 종료일 자세한 내용은 date_start 및 date_end 사용 섹션을 참고하세요. | S | 2017-01-01 |
{% condition filter_name %} sql_or_lookml_reference {% endcondition %} | 요청하는 필터의 값은 sql_or_lookml_reference 를 SQL로 적용하여 filter_name 를 사용합니다. 이 변수는 템플릿 필터 및 조건부 조인과 함께 사용됩니다. | S | 예는 템플릿 필터 문서 페이지 및 sql_on 문서 페이지의 조건부 조인 섹션을 참고하세요. |
{% parameter parameter_name %} | parameter_name 를 사용하여 요청하는 매개변수 필터의 값입니다. | DE LA S | 예시는 parameter 매개변수 문서 페이지를 참고하세요. |
parameter_name._parameter_value | parameter_name 를 사용하여 요청하는 매개변수 필터의 값을 논리 문에 삽입합니다. | DE H LA LI S | 중요한 세부정보 및 예는 parameter 매개변수 문서 페이지를 참고하세요. |
사용자 속성 | |||
_user_attributes['name_of_attribute'] | 사용자 속성을 사용 중인 경우 쿼리를 실행하는 특정 사용자에 관해 name_of_attribute 로 요청하는 사용자 속성의 값입니다. _user_attributes['name_of_attribute'] 변수는 고급 필터 구문에서도 사용할 수 있습니다. | A DE H LA LI S DV F | 북동쪽 (예를 들어 사용자 속성이 "지역"인 경우) 추가 예를 보려면 동적 스키마 및 테이블 이름 삽입에 사용자 속성 사용 도움말을 참조하세요. |
_localization['localization_key'] | 사용자 언어를 기반으로 모델의 문자열 파일에 정의된 현지화 키와 연결된 값을 반환합니다. | DV F | 예시는 LookML 모델 현지화 문서 페이지를 참고하세요. |
LookML 객체 | |||
_model._name | 이 필드의 모델 이름입니다. | A DE H LA LI S | 보세요 |
_view._name | 이 필드의 뷰 이름입니다. | A DE H LA LI S | orders |
_explore._name | 이 필드의 탐색 이름입니다. | A DE H LA LI S | 주문_상품 |
_explore._dashboard_url | 22.12 현재 대시보드의 상대 URL입니다. | H LI | /dashboards/5 |
_field._name | view_name.field_name 형식의 필드 자체 이름 | A DE H LA LI S | 주문.총_주문_금액 |
쿼리 | |||
_query._query_timezone | 쿼리가 실행된 시간대입니다. | A DE H LA LI S | America/Los_Angeles |
view_name._in_query | 뷰의 뷰가 포함된 필드가 쿼리에 있는 경우 true 를 반환합니다. | DE LA LI S | true |
view_name.field_name._in_query | view_name.field_name 로 요청하는 필드가 쿼리 데이터 표에 표시되거나, 쿼리 필터에 포함되거나, required_fields 매개변수를 통해 쿼리에 포함된 경우 true 를 반환합니다. | DE LA LI S | true |
view_name.field_name._is_selected | view_name.field_name 로 요청하는 필드가 쿼리 데이터 표에 표시되면 true 를 반환합니다. | DE LA LI S | true |
view_name.field_name._is_filtered | view_name.field_name 로 요청하는 필드가 쿼리 필터에 포함된 경우 true 를 반환합니다. | DE LA LI S | true |
date_start
및 date_end
의 사용
date_start
및 date_end
Liquid 변수는 BigQuery와 같이 날짜별로 여러 테이블로 데이터를 분할하는 데이터베이스 방언에 매우 유용합니다. {% date_start date_filter_name %}
또는 {% date_end date_filter_name %}
태그 구문을 사용해야 합니다. 출력 구문 {{ date_start date_filter_name }}
{{ date_end date_filter_name }}
예를 들어 다음과 같은 뷰를 뷰에서 만들 수 있습니다.
filter: new_filter_test{
type: date
}
dimension: filter_start{
type: date
sql: {% date_start new_filter_test %} ;;
}
dimension: filter_end{
type: date
sql: {% date_end new_filter_test %} ;;
}
2022년 4월 1일부터 2022년 5월 25일까지 기간을 기준으로 new_filter_test
에서 필터링할 경우 filter_start
측정기준은 2022년 4월 1일로, filter_end
는 2022년 5월 25일로 평가됩니다.
date_start
및 date_end
에 관한 다음 사항에 유의하세요.
사용자가 Liquid 변수의
date_filter
부분에 지정된 필터를 사용하여 쿼리를 필터링하지 않으면{% date_start date_filter %}
과{% date_end date_filter %}
이 모두 NULL로 평가됩니다.사용자가 Liquid 변수의
date_filter
부분에 지정된 필터에 관해 끝이 가까운 범위로 쿼리를 필터링하면 범위의 끝이 NULL로 확인됩니다. 예를 들어 탐색에서 사용자가new_filter_test
를 2022-06-07 이전으로 설정하면 example을 사용하면{% date_start date_filter %}
출력은 NULL입니다. 사용자가 종료일은 있지만 시작일은 없는 범위이기 때문입니다. 사용자가new_filter_test
를 2022-06-07 이후로 설정하면{% date_end date_filter %}
출력은 NULL이 됩니다.
Liquid 출력에서 NULL 결과가 표시될 수 있는 두 경우 중 하나의 경우, 데이터베이스 언어에 따라 IFNULL
또는 COALESCE
과 같은 NULL 값을 고려하기 위해 sql
매개변수에 SQL 함수를 포함해야 합니다.
date_start
및 date_end
유동 변수를 사용하여 날짜로 파티션을 나눈 테이블을 처리하는 방법에 대한 자세한 설명은 date_start 및 date_end 사용 Looker 커뮤니티 주제를 참고하세요.
유연한 기간별 분석을 위해 date_start
및 date_end
을 사용하는 예시는 애널리틱스 블록 유연한 기간별 분석 도움말을 참조하세요.
_in_query
, _is_selected
, _is_filtered
의 사용
_in_query
, _is_selected
, _is_filtered
변수는 이 예시와 같이 참 또는 거짓 값을 제공합니다. 따라서 적절한 유형의 유동 변수 참조 선택이 중요합니다.
쿼리에 특정 항목이 포함되었는지 확인하려면 이를 기반으로 특정 텍스트를 삽입하려면 다음과 같은 패턴을 사용해야 합니다.
{% dynamic if view_name.field_name._in_query %}
something to insert if true
{% dynamic else %}
something to insert if false
{% dynamic endif %}
문자 그대로 'true' 또는 'false'까지 삽입하려면 다음과 같은 패턴을 사용합니다.
{{ view_name.field_name._in_query }}
일부 SQL 방언은 리터럴 단어 'true' 및 'false'를 지원하지 않습니다. 이 경우 sql_boolean
필터를 추가하여 필요한 true와 false 값을 얻을 수 있습니다.
{{ view_name.field_name._in_query | sql_boolean }}
_is_selected
및 _is_filtered
변수에도 동일한 패턴이 적용됩니다.
label
매개변수와 함께 유동 변수 사용
필드 label
매개변수에서 유동 변수를 사용하여 필드 선택 도구와 시각화에서 필드 모양을 동적으로 변경할 수 있습니다. 이 페이지에서 표 섹션을 참고하여 label
매개변수와 함께 사용할 유동 변수를 확인하세요.
유동 변수는
label
매개변수,view_label
매개변수,group_label
매개변수,group_item_label
매개변수를 비롯한 필드 수준의 라벨 매개변수와 함께 작동하지만 모델, 탐색, 보기 또는 참조 선 수준의 라벨 매개변수 또는link
의 하위 매개변수로는 작동하지 않습니다.
다음 변수를 label
와 함께 사용하여 필드 선택 도구, 탐색의 데이터 섹션에 있는 열 헤더, 시각화에 적용할 수 있습니다.
_model._name
_view._name
_explore._name
_field._name
_user_attributes['name_of_attribute']
위의 표에서 LA로 표시된 다른 유동 변수 (예: 필터 기반 값 (예: _filters
)을 반환하거나 변수 값을 확인하기 전에 쿼리를 실행해야 하는 변수)는 필드 선택 도구의 필드 이름을 변경하지 않습니다. 이 경우 필드 이름은 결과 시각화에서만 변경됩니다.
label
과 함께 parameter
유동 변수를 사용할 때 label
에는 value
하위 매개변수의 값이 전달됩니다.
description
매개변수와 함께 유동 변수 사용
description
매개변수와 함께 Liquid 변수를 사용하여 필드의 설명을 동적으로 변경할 수 있습니다. 이 설명은 사용자가 필드 선택 도구에서 필드 정보 아이콘, 탐색의 데이터 섹션에서 필드의 열 이름 또는 표 차트의 필드 열 이름 위로 마우스를 가져가면 표시됩니다. 이 페이지에서 유동 변수 정의 섹션의 표를 보면 description
매개변수와 함께 작동하는 유동 변수를 확인할 수 있습니다.
액체 변수는 필드 수준에서만
description
매개변수와 함께 작동합니다. 탐색 수준에서는description
매개변수와 함께 작동하지 않습니다.
다음 변수를 description
와 함께 사용하여 필드 선택 도구, 탐색의 데이터 섹션, 표 차트의 열 헤더에 적용할 수 있습니다.
_model._name
_view._name
_explore._name
_field._name
_user_attributes['name_of_attribute']
위의 표에서 DE로 표시된 다른 유동 변수(예: _filters
에 따라 필터로 값을 반환하거나 변수 값이 결정되기 전에 쿼리를 실행해야 하는 유동 변수)는 필드 선택 도구 또는 탐색의 데이터 섹션에서 설명을 변경하지 않습니다. 이 유동 변수는 사용자가 표 차트의 필드 열 위로 마우스를 가져가면 표시되는 설명에만 영향을 미칩니다.
description
매개변수에서 Liquid를 사용하는 방법의 예는 description
매개변수 문서 페이지를 참고하세요.
고려사항
yesno
필드 참조
yesno
필드의 값을 참조하는 경우 이 값은 대소문자를 구분합니다. Yes
또는 No
을 사용합니다. 예를 들면 다음과 같습니다.
{% dynamic if value == 'Yes' %}
Liquid 변수와 함께 논리 연산자 사용하기
Liquid 변수에서는 논리 연산자 and
, or
, not
를 사용할 수 있습니다. Liquid의 논리 연산자는 대소문자를 구분하며 모두 소문자로 작성해야 합니다. 예를 들면 다음과 같습니다.
{% dynamic if value == "Shirt" or value == "Shoes" %}
This is a shirt or shoes.
{% dynamic endif %}
"변수를 찾을 수 없음" 오류 발생
Liquid에서 이 오류가 발생하는 한 가지 이유는 다음과 같이 {{ }}
과 {% %}
을 동시에 사용하는 경우입니다.
{% if value > {{ search_latency_top_hr.limit_95._value }} %}
대신 를 수행합니다.
{% dynamic if value > search_latency_top_hr.limit_95._value %}
템플릿 필터를 사용하는 경우 파생된 테이블에 조인하지 않은 테이블 이름을 참조하고 있는지 확인합니다.
명명 규칙은 쿼리 그룹화에 영향을 미칠 수 있음
이름이 value인 필드가 있으면 이 필드는 value
Liquid 변수가 같은 뷰 내의 다른 필드에서 참조될 때마다 탐색 쿼리의 GROUP BY 절에 포함됩니다.
예를 들면 다음과 같습니다.
dimension: id {
primary_key: true
type: number
sql: ${TABLE}.id ;;
html:
{% dynamic if value > 10 %}
<font color="darkgreen">{{ rendered_value }}</font>
{% elsif value > 11 %}
<font color="goldenrod">{{ rendered_value }}</font>
{% dynamic else %}
<font color="darkred">{{ rendered_value }}</font>
{% dynamic endif %} ;;
}
dimension: value {
sql: ${TABLE}.status ;;
type: string
}
이렇게 하면 탐색에서 id만 선택한 경우 다음 SQL이 생성됩니다.
SELECT
orders.id AS orders.id,
orders.status AS orders.value
FROM order_items
LEFT JOIN orders ON order_items.order_id = orders.id
GROUP BY 1,2
ORDER BY orders.id
LIMIT 500
이 그룹화 동작을 방지하려면 필드를 명시적으로 참조하도록 value
변수의 범위를 필드 이름으로 지정해야 합니다.
dimension: id {
primary_key: true
type: number
sql: ${TABLE}.id ;;
html:
{% dynamic if value > 10 %}
<font color="darkgreen">{{ id._rendered_value }}</font>
{% elsif value > 11 %}
<font color="goldenrod">{{ id._rendered_value }}</font>
{% dynamic else %}
<font color="darkred">{{ id._rendered_value }}</font>
{% dynamic endif %} ;;
}
파생된 테이블에서 _filters['view_name.field_name']
를 사용하려면 sql_quote
가 필요합니다.
SQL 기반 파생 테이블을 정의할 때 SQL에서 값이 렌더링되고 필터가 문자열 값을 반환하는 _filters['view_name.field_name']
Liquid 변수를 사용할 경우 출력에 작은따옴표를 추가해야 합니다. sql_quote
액체 필터를 포함하면 됩니다.
예를 들어 derived_table
매개변수의 sql
매개변수에서 이러한 액체 변수 중 하나를 사용하는 경우:
{{ _filters['view_name.field_name'] }}
또는
{% assign foo = _filters['view_name.field_name'] %} foo
Liquid 필터 선언에 Liquid 필터 | sql_quote
를 추가할 수 있습니다.
{{ _filters['view_name.field_name'] | sql_quote }}
및
{% assign foo = _filters['view_name.field_name'] | sql_quote %} foo
다음은 _filters['view_name.field_name']
변수를 사용하는 파생 테이블의 예입니다.
view: users_sql_based_dt {
derived_table: {
sql:
SELECT
users.id AS id,
(DATE(users.created_at)) AS created_date,
users.city AS city,
COUNT(*) AS user_count
FROM
public.users AS users
{% dynamic if users_sql_based_dt.city._is_filtered %}
WHERE
users.city = {{ _filters['users_sql_based_dt.city'] | sql_quote }}
{% dynamic endif %}
GROUP BY
1,
2,
3
ORDER BY
2 DESC
;;
}
city
필드는 SQL에 출력될 문자열이므로 출력 SQL이 작은따옴표로 묶이도록 하려면 sql_quote
Liquid 필터가 필요합니다. 결과 탐색에서 사용자가 도시 이름을 필터로 지정하면 Looker가 도시 이름 문자열을 따옴표로 묶습니다. 사용자가 도시 값 New York
에서 탐색 쿼리를 필터링하는 경우 Looker에서 이 SQL을 데이터베이스에 전송합니다.
WHERE
users.city = 'New York'
값이 SQL에서 렌더링되는 파생 테이블의 문자열 필드에
_filters['view_name.field_name']
Liquid 변수를 사용하는 경우| sql_quote
를 Liquid 변수에 추가하지 않으면 다음과 같은 LookML 경고가 표시됩니다.
Using "_filters[]" in Derived Table SQL without "sql_quote" is discouraged.
다음 구문과 함께 sql_quote
를 사용하여 배열의 여러 값을 따옴표로 묶을 수도 있습니다.
{{ _filters['view_name.field_name'] |split(",") | sql_quote |join(",") }}
다음은 IN
문의 입력으로 액체 출력을 사용하는 예입니다.
WHERE
users.city IN({{ _filters['users_sql_based_dt.city'] |split(",") | sql_quote |join(",") }})
이 구문을 사용하면 Liquid 출력에서 전체 목록('value1, value2, value3'
)을 따옴표로 묶는 대신 개별 값('value1','value2','value3'
)을 따옴표로 묶습니다.
집계 방식의 액체 변수는 그룹에 영향을 줌
측정값의 link
또는 html
매개변수에서 {{ view_name.field_name._value }}
구문이나 {{ field_name._value }}
구문을 사용하여 다른 필드의 값을 참조할 때 Looker는 해당 필드를 SQL 쿼리로 가져와 필드 값을 가져옵니다. 따라서 Liquid는 SQL 쿼리 생성 방식과 GROUP BY
절에 사용되는 열 수에 영향을 미칠 수 있으며, 이로 인해 type: count
측정값과 같은 집계 방법을 사용할 때 예상치 못한 동작이 발생할 수 있습니다.
예를 들어 다음과 같은 두 가지 측정 조치가 있다고 가정해 보겠습니다.
measure: count_without_liquid {
type: count
}
measure: count_with_liquid {
type: count
link: {
label: "Status Count"
url: "https://www.google.com/search?q={{ status._value }}"
}
}
count_without_liquid
측정값을 사용하여 쿼리를 생성하면 다음 결과를 얻습니다.
이 경우 쿼리는 매월 하나의 개수를 반환합니다. 이전 결과를 위해 생성된 SQL은 다음과 같습니다.
SELECT
TO_CHAR(DATE_TRUNC('month', order_items.created_at ), 'YYYY-MM') AS "order_items.created_month",
COUNT(*) AS "order_items.count_without_liquid"
FROM order_items AS order_items
GROUP BY DATE_TRUNC('month', order_items.created_at )
ORDER BY 1 DESC
LIMIT 500
그러나 count_with_liquid
측정을 사용하여 쿼리를 생성하면 다음 결과를 얻습니다.
이 예시에서는 쿼리의 월별 횟수 대신 월간 및 각 상태에 대한 횟수를 수신하는 것을 볼 수 있습니다. 생성된 SQL에서 값을 검색할 수 있도록 쿼리에 status
필드가 추가되었기 때문입니다. 쿼리에 추가되었기 때문에 GROUP BY
절에도 추가되었습니다.
SELECT
TO_CHAR(DATE_TRUNC('month', order_items.created_at ), 'YYYY-MM') AS "order_items.created_month",
order_items.status AS "order_items.status",
COUNT(*) AS "order_items.count_without_liquid"
FROM order_items AS order_items
GROUP BY DATE_TRUNC('month', order_items.created_at ),2
ORDER BY 1 DESC
LIMIT 500
이를 막기 위한 한 가지 옵션은 row[]
함수를 Liquid 변수와 함께 사용하는 것입니다. 이 함수는 렌더링된 결과에서 값을 가져오므로 참조된 필드를 SQL 쿼리에 추가하지 않습니다.
link: {
label: "{% dynamic if row['view_name.field_name'] %} some_label {% dynamic endif %}"
url: "https://www.google.com/search?q={{ row['view_name.field_name'] }}"
}
이 구문을 사용할 때는 link
매개변수가 필드가 선택되었거나 다른 방법으로 쿼리에 포함된 경우에만 작동합니다.
요약하면 row[]
구문을 사용하면 {{ field_name._value }}
와 마찬가지로 필드가 쿼리에 추가되지 않습니다. 동적 라벨로 입력란을 사용할 수 없는 경우 링크에 라벨이 없어 링크가 링크 메뉴에서 사라집니다.