Looker의 고유한 기능 중 하나는 데이터베이스에 바로 연결된다는 점입니다. 즉, 항상 최신 데이터에 액세스할 수 있으며 사용 가능한 가장 세분화된 수준으로 드릴다운할 수 있습니다. 따라서 연간 또는 월간 요약을 확인할 수 있지만 Looker는 일, 시간, 초 단위로 즉시 상세히 살펴볼 수 있는 옵션도 제공합니다.
이 페이지에서는 데이터 드릴링을 맞춤설정하고 활용하여 다음과 같이 사용자를 위한 더 강력한 분석 환경을 만드는 방법의 예시를 제공합니다.
- 기본 드릴 데이터 테이블에 값이 표시되는 방식 맞춤설정
- 시각적 드릴 환경을 만들기 위해 드릴 시각화 맞춤설정
기본 드릴 데이터 테이블에 값이 표시되는 방식 맞춤설정
Looker의 웹 기반 최신 아키텍처에서는 한 수준에서 차상위 수준으로 드릴하는 것 이상의 작업을 수행할 수 있습니다. 몇 가지 매개변수만으로 커스텀 드릴 경로를 빌드할 수 있습니다.
다음 예시는 다음을 포함하여 드릴 테이블에 데이터가 표시되는 방식을 맞춤설정하는 방법을 보여줍니다.
- 드릴 테이블에 커스텀 행 한도(최대 5,000행) 추가
- 드릴 테이블에 정렬 추가
- 드릴 테이블에 피벗 추가
드릴 테이블에 행 한도(최대 5,000행) 추가
드릴 테이블에 행 한도를 추가하면 사용자가 측정 값을 드릴할 때 데이터가 표시되는 방식을 제어할 수 있습니다. 예를 들어 사용자가 반환된 개수 측정값에 대해 자세히 알아볼 때 드릴 테이블에 처음 20개의 결과만 표시하려면 어떻게 해야 할까요? 다음 LookML 코드에서와 같이 link 매개변수를 사용하고 url 하위 매개변수를 "{{ link }}&limit=20"로 설정할 수 있습니다.
measure: returned_count {
type: count_distinct
sql: ${id} ;;
filters: [is_returned: "yes"]
drill_fields: [detail*]
link: {
label: "Explore Top 20 Results"
url: "{{ link }}&limit=20"
}
}
set: detail {
fields: [id, order_id, status, created_date, sale_price, products.brand, products.item_name, users.email]
}
이렇게 하면 사용자는 반환된 개수 측정의 드릴 메뉴에서 상위 20개 결과 살펴보기를 선택하여 상위 20개 결과를 상세히 살펴볼 수 있습니다.
드릴 테이블에 정렬 추가
데이터 제한 외에도 드릴 테이블에서 데이터가 정렬되는 방식을 제어할 수도 있습니다. 예를 들어 사용자가 반환된 개수 측정값을 자세히 알아볼 때 할인가별로 20개 결과를 표시하려면 어떻게 해야 할까요? link 매개변수를 사용하고 url 하위 매개변수를 "{{ link }}&sorts=order_items.sale_price"로 설정할 수 있습니다. 다음 LookML 코드는 커스텀 정렬과 커스텀 행 한도를 결합합니다.
measure: returned_count {
type: count_distinct
sql: ${id} ;;
filters: [is_returned: "yes"]
drill_fields: [detail*]
link: {
label: "Explore Top 20 Results by Sale Price"
url: "{{ link }}&sorts=order_items.sale_price+desc&limit=20"
}
}
set: detail {
fields: [id, order_id, status, created_date, sale_price, products.brand, products.item_name, users.email]
}
이렇게 하면 사용자는 할인가 측정의 드릴 메뉴에서 할인가별 상위 20개 결과 살펴보기를 선택하여 할인가별 상위 20개 결과를 상세히 살펴볼 수 있습니다.
드릴 테이블에 피벗 추가
데이터 제한 및 정렬 외에도 드릴 테이블에서 측정기준을 피벗할 수도 있습니다. 예를 들어 연령대 필드에 피벗을 추가하여 사용자가 주문 수 측정값에 대해 자세히 알아볼 때 각 연령대의 연도와 총 마진율 등급을 표시하려면 어떻게 해야 할까요? link 매개변수를 사용하고 url 하위 매개변수를 "&pivots=users.age_tier"로 설정할 수 있습니다.
measure: order_count {
type: count_distinct
drill_fields: [created_year, item_gross_margin_percentage_tier, users.age_tier, total_sale_price]
link: {
label: "Total Sale Price by Month for Each Age Tier"
url: "{{link}}&pivots=users.age_tier"
}
sql: ${order_id} ;;
}
이렇게 하면 사용자는 주문 수 측정의 드릴 메뉴에서 연령대별 월별 총 판매가를 선택할 때 각 연령대의 연도와 총 마진율을 상세히 살펴볼 수 있습니다.

시각적 드릴 환경 만들기
데이터 테이블은 데이터를 효과적인 방식으로 전달합니다. 하지만 사용자가 드릴할 때 표시되는 데이터를 시각화하려면 어떻게 해야 할까요? 데이터 테이블 외에도 시각화에 드릴 데이터를 표시하는 방법에는 여러 가지가 있습니다. 이 섹션에는 다음 예시가 포함되어 있습니다.
- 시각적 드릴 실험실 기능을 사용하여 드릴링
- 한도 및 이동 평균을 사용한 분산형 차트로 드릴링
- 피벗을 사용한 누적 선 차트로 드릴링
- 커스텀 시각화로 드릴링
- 조건부 서식이 있는 테이블 계산으로 드릴링
시각적 드릴 실험실 기능을 사용하여 드릴링
시각적 드릴 실험실 기능을 사용하면 사용자가 Explore 또는 Look을 상세히 살펴볼 수 있습니다. 맞춤설정이 필요 없고 제한된 드릴 세트를 사용하면 Looker의 데이터를 기반으로 미리 선택된 다양한 시각화 유형에 드릴 데이터를 표시할 수 있습니다.
시각적 드릴 실험실 기능은 대시보드에서 지원되지 않습니다. 대시보드의 경우 실험실 기능을 사용 설정하지 않아도link매개변수를 사용하여 시각적 드릴 환경을 만들 수 있습니다. 다음 섹션에서는link매개변수를 사용하여 시각적 드릴 환경을 만드는 방법의 예시를 보여줍니다.
예를 들어 하루에 판매된 상품의 수를 표시하기 위해 생성일 및 총 판매가 필드를 자세히 분석하는 방법을 만들 수 있습니다.
measure: count {
type: count_distinct
sql: ${id} ;;
drill_fields: [created_date, total_sale_price]
}
시각적 드릴은 가장 간단한 옵션입니다. 하지만 사용자가 드릴할 때 표시되는 시각화 유형을 제어하려면 어떻게 해야 할까요? 다음 섹션에서는 드릴 시각화를 추가로 맞춤설정하는 방법에 대한 예시를 제공합니다.
한도 및 이동 평균을 사용한 분산형 차트로 드릴링
사용자가 이동 평균 추세선을 포함하는 분산형 차트를 살펴볼 수 있습니다. 예를 들어 하루에 판매된 상품 수를 30일 이동 평균이 포함된 분산형 차트로 표시한다고 가정해 보겠습니다.
이렇게 하려면 Liquid 변수를 사용하여 URL에 시각화 설정을 지정하면 됩니다. 다음 설정은 드릴에 표시되는 시각화를 제어합니다.
measure: count {
type: count_distinct
sql: ${id} ;;
drill_fields: [created_date, total_sale_price]
link: {
label: "Show as scatter plot"
url: "
{% assign vis_config = '{
\"stacking\" : \"\",
\"show_value_labels\" : false,
\"label_density\" : 25,
\"legend_position\" : \"center\",
\"x_axis_gridlines\" : true,
\"y_axis_gridlines\" : true,
\"show_view_names\" : false,
\"limit_displayed_rows\" : false,
\"y_axis_combined\" : true,
\"show_y_axis_labels\" : true,
\"show_y_axis_ticks\" : true,
\"y_axis_tick_density\" : \"default\",
\"y_axis_tick_density_custom\": 5,
\"show_x_axis_label\" : false,
\"show_x_axis_ticks\" : true,
\"x_axis_scale\" : \"auto\",
\"y_axis_scale_mode\" : \"linear\",
\"show_null_points\" : true,
\"point_style\" : \"circle\",
\"ordering\" : \"none\",
\"show_null_labels\" : false,
\"show_totals_labels\" : false,
\"show_silhouette\" : false,
\"totals_color\" : \"#808080\",
\"type\" : \"looker_scatter\",
\"interpolation\" : \"linear\",
\"series_types\" : {},
\"colors\": [
\"palette: Santa Cruz\"
],
\"series_colors\" : {},
\"x_axis_datetime_tick_count\": null,
\"trend_lines\": [
{
\"color\" : \"#000000\",
\"label_position\" : \"left\",
\"period\" : 30,
\"regression_type\" : \"average\",
\"series_index\" : 1,
\"show_label\" : true,
\"label_type\" : \"string\",
\"label\" : \"30 day moving average\"
}
]
}' %}
{{ link }}&vis_config={{ vis_config | encode_uri }}&toggle=dat,pik,vis&limit=5000"
}
}
피벗을 사용한 누적 선 차트로 드릴링
사용자가 생성 연도를 기준으로 피벗된 각 월 번호의 총 판매가를 표시하는 누적 선 차트와 같이 누적 선 차트로 드릴할 수도 있습니다.
다음 LookML에서는 위 시각화에 대한 설정을 지정합니다.
measure: total_sale_price {
type: sum
value_format_name: usd
sql: ${sale_price} ;;
drill_fields: [total_sale_price, created_month_name, created_year]
link: {
label: "Show as stacked line"
url: "
{% assign vis_config = '{
\"stacking\" : \"normal\",
\"legend_position\" : \"right\",
\"x_axis_gridlines\" : false,
\"y_axis_gridlines\" : true,
\"show_view_names\" : false,
\"y_axis_combined\" : true,
\"show_y_axis_labels\" : true,
\"show_y_axis_ticks\" : true,
\"y_axis_tick_density\" : \"default\",
\"show_x_axis_label\" : true,
\"show_x_axis_ticks\" : true,
\"show_null_points\" : false,
\"interpolation\" : \"monotone\",
\"type\" : \"looker_line\",
\"colors\": [
\"#5245ed\",
\"#ff8f95\",
\"#1ea8df\",
\"#353b49\",
\"#49cec1\",
\"#b3a0dd\"
],
\"x_axis_label\" : \"Month Number\"
}' %}
{{ link }}&vis_config={{ vis_config | encode_uri }}&sorts=order_items.created_year+asc,order_items.created_month_name+asc&pivots=order_items.created_year&toggle=dat,pik,vis&limit=500&column_limit=15"
} # NOTE the &pivots=
}
커스텀 시각화로 드릴링
사용자가 커스텀 시각화를 드릴하도록 허용할 수도 있습니다.
이렇게 하려면 link 매개변수에 지정한 시각화 설정에 커스텀 시각화를 포함하면 됩니다.
measure: average_shipping_time {
type: average
value_format_name: decimal_2
sql: ${shipping_time} ;;
drill_fields: [products.category, users.age_tier, average_shipping_time]
link: {
label: "See as custom viz (heatmap)"
url: "
{% assign vis_config = '{
\"minColor\" : \"#d6d6d6\",
\"maxColor\" : \"#9a33e3\",
\"dataLabels\" : false,
\"custom_color_enabled\" : false,
\"custom_color\" : \"forestgreen\",
\"show_single_value_title\": true,
\"show_comparison\" : false,
\"comparison_type\" : \"value\",
\"comparison_reverse_colors\": false,
\"show_comparison_label\" : true,
\"show_view_names\" : true,
\"show_row_numbers\" : true,
\"truncate_column_names\" : false,
\"hide_totals\" : false,
\"hide_row_totals\" : false,
\"table_theme\" : \"editable\",
\"limit_displayed_rows\" : false,
\"enable_conditional_formatting\": false,
\"conditional_formatting_include_totals\": false,
\"conditional_formatting_include_nulls\": false,
\"type\" : \"highcharts_heatmap\",
\"stacking\" : \"\",
\"show_value_labels\" : false,
\"label_density\" : 25,
\"legend_position\" : \"center\",
\"x_axis_gridlines\" : false,
\"y_axis_gridlines\" : true,
\"y_axis_combined\" : true,
\"show_y_axis_labels\" : true,
\"show_y_axis_ticks\" : true,
\"y_axis_tick_density\" : \"default\",
\"y_axis_tick_density_custom\": 5,
\"show_x_axis_label\" : true,
\"show_x_axis_ticks\" : true,
\"x_axis_scale\" : \"auto\",
\"y_axis_scale_mode\" : \"linear\",
\"ordering\" : \"none\",
\"show_null_labels\" : false,
\"show_totals_labels\" : false,
\"show_silhouette\" : false,
\"totals_color\" : \"#808080\",
\"series_types\" : {},
\"hidden_fields\" : [
\"order_items.count\",
\"order_items.total_sale_price\"
]
}' %}
{{ link }}&vis_config={{ vis_config | encode_uri }}&sorts=products.category+asc,users.age_tier+asc&toggle=dat,pik,vis&limit=5000"
}
}
조건부 서식이 있는 테이블 계산으로 드릴링
사용자가 조건부 서식을 표시하는 테이블 계산을 드릴할 수도 있습니다.
다음과 같이 LookML에서 정의할 수 있습니다.
measure: total_sale_price {
type: sum
value_format_name: usd
sql: ${sale_price} ;;
drill_fields: [created_month, users.gender, total_sale_price]
link: {
label: "Table Calc & Total"
url: "
{% assign table_calc = '[
{ \"table_calculation\": \"percent_of_total\",
\"label\": \"Percent of Total\",
\"expression\": \"${order_items.total_sale_price:row_total} / sum(${order_items.total_sale_price:row_total})\",
\"value_format\": null,
\"value_format_name\": \"percent_2\",
\"_kind_hint\": \"supermeasure\",
\"_type_hint\": \"number\"
},
{ \"table_calculation\": \"growth_rate\",
\"label\": \"Growth Rate\",
\"expression\": \"${order_items.total_sale_price} / offset(${order_items.total_sale_price},1) - 1\",
\"value_format\": null,
\"value_format_name\": \"percent_2\",
\"_kind_hint\": \"measure\",
\"_type_hint\": \"number\"
}]' %}
{% assign vis_config = '{
\"type\": \"table\",
\"show_view_names\": false,
\"show_row_numbers\": false,
\"truncate_column_names\": false,
\"table_theme\": \"gray\",
\"enable_conditional_formatting\": true,
\"conditional_formatting\": [
{
\"type\": \"low to high\",
\"value\": null,
\"background_color\": null,
\"font_color\": null,
\"palette\": {
\"name\": \"Custom\",
\"colors\": [
\"#FFFFFF\",
\"#6e00ff\"
]},
\"bold\": false,
\"italic\": false,
\"strikethrough\": false,
\"fields\": [
\"growth_rate\"
]},{
\"type\": \"low to high\",
\"value\": null,
\"background_color\": null,
\"font_color\": null,
\"palette\": {
\"name\": \"Custom\",
\"colors\": [
\"#FFFFFF\",
\"#88ff78\"
]},
\"bold\": false,
\"italic\": false,
\"strikethrough\": false,
\"fields\": [
\"percent_of_total\"
]}]}' %}
{{link}}&total=on&row_total=right&dynamic_fields={{ table_calc |replace(') ', '' | encode_uri }}&pivots=users.gender&vis_config={{ vis_config |replace(') ', '' | encode_uri }}"
}
}