LookML ๋ชจ๋ธ ํ˜„์ง€ํ™”

๋ชจ๋ธ ํ˜„์ง€ํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์–ธ์–ด์— ๋”ฐ๋ผ ๋ชจ๋ธ์˜ ๋ผ๋ฒจ๊ณผ ์„ค๋ช…์ด ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์„ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์ง€ํ™”๋Š” ์ง€๋ฆฌ์  ์œ„์น˜๋‚˜ ์–ธ์–ด์— ๊ธฐ๋ฐ˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด๋ถ€ ์‚ฌ์šฉ์ž์™€ ์™ธ๋ถ€ ์‚ฌ์šฉ์ž, ๊ด€๋ฆฌ์ž ๋˜๋Š” ๊ฐœ๋ณ„ ์ฐธ์—ฌ์ž ๋“ฑ ๋‹ค๋ฅธ ์ฐจ๋ณ„ํ™” ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๋ผ๋ฒจ๊ณผ ์„ค๋ช…์„ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํ˜„์ง€ํ™”ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ชจ๋ธ์— ๋ผ๋ฒจ, ๊ทธ๋ฃน ๋ผ๋ฒจ, ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ˜„์ง€ํ™”ํ•  ์š”์†Œ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ํ”„๋กœ์ ํŠธ์— ํ˜„์ง€ํ™” ์ •์˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ํ”„๋กœ์ ํŠธ์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์— ํ˜„์ง€ํ™” ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ํ˜„์ง€ํ™”๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ์–ธ์–ด์— ์‚ฌ์šฉ์ž๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋ณ„๋กœ ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ํ˜„์ง€ํ™”๋Š” ์ข…์ข… ๊ด€๋ฆฌ์ž๊ฐ€ ์ˆซ์ž ํ˜•์‹ ํ˜„์ง€ํ™” ๋ฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์–ธ์–ด ์„ค์ •์„ ์ง€์ •ํ•  ๋•Œ ํ•จ๊ป˜ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ์˜ ๋ผ๋ฒจ ๋ฐ ์„ค๋ช… ํ˜„์ง€ํ™”

๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋ธ์˜ ๋ผ๋ฒจ, ๊ทธ๋ฃน ๋ผ๋ฒจ, ์„ค๋ช…์„ ํ˜„์ง€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์—์„œ ํ˜„์ง€ํ™”๋œ LookML ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์ง€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” LookML ๋Œ€์‹œ๋ณด๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • title
  • description
  • text(note ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํ•˜์œ„ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋ฉฐ type: text ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋Œ€์‹œ๋ณด๋“œ ์š”์†Œ ์œ ํ˜•์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ)
  • comparison_label
  • single_value_title

ํ”„๋กœ์ ํŠธ์—์„œ ํ˜„์ง€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋ณด๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์˜ ํ˜„์ง€ํ™” ์ˆ˜์ค€์„ strict๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด Looker IDE๋Š”, ํ˜„์ง€ํ™”๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ผ๋ฒจ์ด ์—†๋Š” LookML ์š”์†Œ ๋ฐ ํ˜„์ง€ํ™”๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์—์„œ ์ •์˜๋˜์ง€ ์•Š์€ LookML ๋ชจ๋ธ์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์— ๋Œ€ํ•˜์—ฌ LookML ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ƒ˜ํ”Œ LookML์—์„œ๋Š” flights ๋ทฐ์™€ id, country, number_of_engines ํ•„๋“œ์— ๋ผ๋ฒจ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. country ํ•„๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

view: flights {
  label: "flight_info"
  sql_table_name: flightstats.accidents ;;

  dimension: id {
    label: "id"
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }

  dimension: country {
    label: "country"
    description: "country_of_departure"
    type: string
    map_layer_name: countries
    sql: ${TABLE}.country ;;
  }

  dimension: number_of_engines {
    label: "number_of_engines"
    type: string
    sql: ${TABLE}.number_of_engines ;;
  }

  dimension: location {
    type: string
    sql: ${TABLE}.location ;;
  }

์ด ํŽ˜์ด์ง€์˜ ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” permissive ํ˜„์ง€ํ™” ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ํŒŒ์ผ์—์„œ ์ด๋Ÿฌํ•œ ๊ฐ’์„ ํ˜„์ง€ํ™”ํ•ฉ๋‹ˆ๋‹ค. location ์ธก์ •๊ธฐ์ค€์—๋Š” ๋ผ๋ฒจ์ด ์—†์œผ๋ฏ€๋กœ ํ˜„์ง€ํ™”๋˜์ง€ ์•Š์€ ์ธก์ •๊ธฐ์ค€์ด ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์€ ํ‚ค-๊ฐ’ ์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์–ธ์–ด์—์„œ ๋ชจ๋ธ์˜ ๋ผ๋ฒจ๊ณผ ์„ค๋ช…์ด ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ‚ค-๊ฐ’ ์Œ์˜ ์™ผ์ชฝ์— ๋ชจ๋ธ์˜ ๋ผ๋ฒจ ๋˜๋Š” ์„ค๋ช… ๋ฌธ์ž์—ด์ธ ํ˜„์ง€ํ™” ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค-๊ฐ’ ์Œ์˜ ์˜ค๋ฅธ์ชฝ์—์„œ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ Looker UI์— ํ‘œ์‹œํ•  ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฐ ์–ธ์–ด๋ณ„๋กœ ์ „์šฉ ๋ฌธ์ž์—ด ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์–ธ์–ด๋ณ„๋กœ ๋ฌธ์ž์—ด ํŒŒ์ผ์„ ํ•˜๋‚˜๋งŒ ๋งŒ๋“œ์„ธ์š”. ๊ธฐ๋ณธ ์–ธ์–ด์™€ ์ผ์น˜ํ•˜๋„๋ก ์ด๋ฆ„์ด ์ง€์ •๋œ ๋ฌธ์ž์—ด ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ์ ํŠธ์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์— default_locale: en์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ๋ชจ๋ธ์— en.strings.json์ด๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ ๊ธฐ๋ณธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์—์„œ ์ •์˜๋˜์–ด์•ผ ํ•˜๋ฉฐ, ํ˜„์ง€ํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด en.strings.json ํŒŒ์ผ ์˜ˆ์‹œ๋Š” ์–ธ์–ด ๊ฐ’์ด en์ธ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ƒ˜ํ”Œ LookML์—์„œ๋Š” en๋„ ๊ธฐ๋ณธ ์–ธ์–ด๋กœ ์ง€์ •๋˜๋ฏ€๋กœ ํ˜„์ง€ํ™”ํ•˜๋ ค๋ฉด ์ด ํŒŒ์ผ์—์„œ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

{
  "flight_info": "Flights",
  "id": "Identifier",
  "country_of_departure": "Country of Departure",
  "number_engines": "Number of Engines"
}

๋‹ค์Œ ํ‘œ์—์„œ๋Š” ์–ธ์–ด๊ฐ€ en์œผ๋กœ ์„ค์ •๋œ ์‚ฌ์šฉ์ž๊ฐ€ Looker Explore์˜ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Flights Identifier Flights country Flights Location Flights Number of Engines
493 Congo Kisangani, Congo 3
2167 Saudi Arabia Riyadh, Saudi Arabia 3
2657 Austria Vienna, Austria 2
17992 United States Kansas City, MO 2
18893 United States Anchorage, AK 4

๋‹ค์Œ์— ์œ ์˜ํ•˜์„ธ์š”.

  • ์ด์ „์— ํ‘œ์‹œ๋œ flights ๋ทฐ ์ƒ˜ํ”Œ LookML์—์„œ๋Š” location ์ธก์ •๊ธฐ์ค€์— ๋ผ๋ฒจ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ Looker์—์„œ ์ธก์ •๊ธฐ์ค€ ์ด๋ฆ„์ธ '์œ„์น˜'๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • en.strings.json ํŒŒ์ผ์—์„œ '๊ตญ๊ฐ€' ๋ผ๋ฒจ์˜ ํ˜„์ง€ํ™”๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ Looker๋Š” ๋ทฐ ํŒŒ์ผ์— ์ •์˜๋œ ๋Œ€๋กœ ๋ผ๋ฒจ์„ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  '๊ตญ๊ฐ€'๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ, ์–ธ์–ด ๊ฐ’์ด es_ES์ธ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™œ์šฉ๋˜๋Š” es_ES.strings.json ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "flight_info": "Vuelos",
  "id": "Identificador",
  "country": "Paรญs",
  "country_of_departure": "Paรญs de Partida",
  "number_engines": "Nรบmero de Motores"
}

๋‹ค์Œ ํ‘œ์—์„œ๋Š” ์–ธ์–ด๊ฐ€ es_ES๋กœ ์„ค์ •๋œ ์‚ฌ์šฉ์ž๊ฐ€ Looker์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Vuelos Identificador Vuelos country Vuelos Location Vuelos Nรบmero de Motores
493 Congo Kisangani, Congo 3
2167 Saudi Arabia Riyadh, Saudi Arabia 3
2657 Austria Vienna, Austria 2
17992 United States Kansas City, MO 2
18893 United States Anchorage, AK 4

๋‹ค์Œ์— ์œ ์˜ํ•˜์„ธ์š”.

  • ์•ž์—์„œ์˜ ์˜ˆ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ผ๋ฒจ๊ณผ ์„ค๋ช…์ด ์ถ”๊ฐ€๋œ ์›๋ณธ ๋ทฐ์—์„œ location ์ธก์ •๊ธฐ์ค€์— ๋Œ€ํ•œ ๋ผ๋ฒจ์„ ์ „ํ˜€ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ Looker๋Š” ์ธก์ •๊ธฐ์ค€์˜ ์ด๋ฆ„์ธ ๋Œ€๋ฌธ์ž 'Location'์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์ธ en.strings.json ํŒŒ์ผ์—์„œ '๊ตญ๊ฐ€' ๋ผ๋ฒจ์˜ ํ˜„์ง€ํ™”๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ es_ES.strings.json ํŒŒ์ผ์— '๊ตญ๊ฐ€'๋ฅผ ์ •์˜ํ–ˆ๋”๋ผ๋„ Looker๋Š” ์ด ๋ฌธ์ž์—ด์„ ํ˜„์ง€ํ™”ํ•˜์ง€ ์•Š๊ณ  ๋ทฐ ํŒŒ์ผ '๊ตญ๊ฐ€'์— ์ •์˜๋œ ๋Œ€๋กœ ๋ผ๋ฒจ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์— ํ˜„์ง€ํ™” ์„ค์ • ์ถ”๊ฐ€

ํ”„๋กœ์ ํŠธ์—์„œ ํ˜„์ง€ํ™”๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด localization_settings ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ”„๋กœ์ ํŠธ์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์— ํ˜„์ง€ํ™” ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

localization_settings: {
  default_locale: en
  localization_level: permissive
}

default_locale

default_locale ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์€ ๋ชจ๋ธ์˜ ์–ด๋–ค ๋ฌธ์ž์—ด์ด ํ˜„์ง€ํ™”๋˜๋Š”์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ผ๋ฒจ ๋˜๋Š” ์„ค๋ช… ๋ฌธ์ž์—ด์ด ๋‹ค๋ฅธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์— ์ •์˜๋˜์–ด ์žˆ์–ด๋„ ๊ธฐ๋ณธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์— ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Looker UI์— ํ˜„์ง€ํ™”๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ์–ธ์–ด๋Š” Looker ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ ์–ธ์–ด์™€ ํ˜ผ๋™ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Looker ๊ด€๋ฆฌ์ž๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ธฐ๋ณธ ์–ธ์–ด๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด Looker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ en์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์†ํ•œ ์‚ฌ์šฉ์ž ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์˜ ์–ธ์–ด ๊ฐ’์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Looker๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์–ธ์–ด์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๊ฐ€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์–ธ์–ด๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Looker๋Š” ์‚ฌ์šฉ์ž๋ฅผ en ์–ธ์–ด์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Looker ๊ด€๋ฆฌ์ž๊ฐ€ ๋ชจ๋“  Looker ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์–ธ์–ด๋ฅผ ์„ค์ •ํ•  ๊ฒƒ์œผ๋กœ ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๋ฉด, ํ”„๋กœ์ ํŠธ์˜ default_locale ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ธ์Šคํ„ด์Šค์˜ ๊ธฐ๋ณธ ์–ธ์–ด๋กœ(๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ en์œผ๋กœ) ์„ค์ •ํ•˜๊ณ , ํ•ด๋‹น ์–ธ์–ด์— ๋Œ€ํ•ด .strings.json ํŒŒ์ผ์—์„œ ๋ชจ๋“  ๋ผ๋ฒจ ๋ฐ ์„ค๋ช…์— ๋Œ€ํ•œ ํ˜„์ง€ํ™”๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

localization_level

ํ”„๋กœ์ ํŠธ์˜ ํ˜„์ง€ํ™” ์ˆ˜์ค€์€ ๋ชจ๋ธ์—์„œ ํ˜„์ง€ํ™”๋˜์ง€ ์•Š์€ ์š”์†Œ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š”์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๋ชจ๋ธ, Explore, ๋ทฐ, ํ•„๋“œ์— ํ˜„์ง€ํ™”๋œ ๋ผ๋ฒจ์„ ์š”๊ตฌํ•˜๋ ค๋ฉด ํ˜„์ง€ํ™” ์ˆ˜์ค€์„ strict๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Looker IDE๋Š” ๋ผ๋ฒจ์ด ์—†๋Š” ์š”์†Œ์™€ ๊ธฐ๋ณธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ผ๋ฒจ ๋ฐ ์„ค๋ช…์— ๋Œ€ํ•ด LookML ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์ง€ํ™” ์ˆ˜์ค€์„ permissive๋กœ ์„ค์ •ํ•˜์—ฌ ๋ผ๋ฒจ์ด ์—†๋Š” ์š”์†Œ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ , ๊ธฐ๋ณธ ํ˜„์ง€ํ™” ๋ฌธ์ž์—ด ํŒŒ์ผ์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ผ๋ฒจ๊ณผ ์„ค๋ช…์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

strict ํ˜„์ง€ํ™” ์ˆ˜์ค€์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ ํ˜„์ง€ํ™” ์ˆ˜์ค€์„ permissive๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ผ๋ฒจ ๋ฐ ์„ค๋ช…์˜ ํ˜„์ง€ํ™”๋ฅผ ์™„๋ฃŒํ•œ ํ›„ ํ˜„์ง€ํ™” ์ˆ˜์ค€์„ strict๋กœ ์„ค์ •ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์–ด์— ์‚ฌ์šฉ์ž ํ• ๋‹น

์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์„ ์„ค์ •ํ•˜๋ฉด ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•˜๋Š” ์–ธ์–ด์— ์‚ฌ์šฉ์ž๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์–ธ์–ด ํ•„๋“œ ๋˜๋Š” locale ์‚ฌ์šฉ์ž ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ .์ธ์Šคํ„ด์Šค, ์‚ฌ์šฉ์ž ๊ทธ๋ฃน, ๋˜๋Š”๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž ์ˆ˜์ค€์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ es_ES.strings.json ํŒŒ์ผ์— ์ •์˜๋œ ๋ผ๋ฒจ๊ณผ ์„ค๋ช…์„ ๋ณด๊ฒŒ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, Looker ๊ด€๋ฆฌ์ž๋Š” ์‚ฌ์šฉ์ž์˜ ์–ธ์–ด ์„ค์ •์„ es_ES๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ํŒŒ์ผ๋กœ ๋งŒ๋“  ๋งž์ถค ์–ธ์–ด๋Š” ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๋Š” ๋Œ€์‹  ํ•„๋“œ๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋ฌธ์ž์—ด ํŒŒ์ผ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์—ฌ ์–ธ์–ด ํ•„๋“œ์— ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์šฉ์ž ๋ฌธ์„œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์„œ๋ช…๋œ ์ž„๋ฒ ๋“œ ์‚ฌ์šฉ์ž์˜ ์–ธ์–ด ์„ค์ •

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์†์„ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ช…๋œ ์ž„๋ฒ ๋“œ URL์— ์‚ฌ์šฉ์ž์˜ ์–ธ์–ด ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ช…๋œ ์ž„๋ฒ ๋“œ์— ํ•„์š”ํ•œ ์ •ํ™•ํ•œ ํ˜•์‹์€ ์„œ๋ช…๋œ ์ž„๋ฒ ๋“œ URL ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€์ง€๋งŒ, ์‚ฌ์šฉ์ž ์†์„ฑ ์ด๋ฆ„์€ locale์ž…๋‹ˆ๋‹ค. ์„œ๋ช…๋œ ์ž„๋ฒ ๋“œ URL ๋ฐ ์„œ๋ช…๋œ ์ž„๋ฒ ๋“œ URL ๋นŒ๋“œ์šฉ ๋„๊ตฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„œ๋ช…๋œ ์ž„๋ฒ ๋”ฉ ๋ฌธ์„œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Liquid ๋ณ€์ˆ˜์—์„œ ์–ธ์–ด ์‚ฌ์šฉ

์•ž์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋ธ ํ˜„์ง€ํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์–ธ์–ด์— ๋Œ€ํ•œ ๋ชจ๋ธ ๋ผ๋ฒจ ๋ฐ ์„ค๋ช… ํ‘œ์‹œ๋ฅผ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Liquid ๋ณ€์ˆ˜์— ํ˜„์ง€ํ™” ํ‚ค๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฐ’๋„ ํ˜„์ง€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด en.strings.json์ด๋ผ๋Š” ๊ธฐ๋ณธ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์—์„œ ๋‹ค์Œ ํ•ญ๋ชฉ์ด ํฌํ•จ๋œ ํ˜„์ง€ํ™” ํ‚ค domestic๊ณผ international์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "domestic": "Domestic",
  "international": "International"
}

es_ES.strings.json ํŒŒ์ผ์—์„œ ๋‹ค์Œ ํ˜„์ง€ํ™” ํ‚ค์˜ ์ŠคํŽ˜์ธ์–ด ๋ฒ„์ „์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "domestic": "Nacional",
  "international": "Internacional"
}

์ด ๊ฒฝ์šฐ Liquid ๋ณ€์ˆ˜์˜ domestic ๋ฐ international ํ˜„์ง€ํ™” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธก์ •๊ธฐ์ค€์˜ ์ถœ๋ ฅ์„ ํ˜„์ง€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

dimension: from_US {
    label: "from_us"
    type: string
    sql: CASE
         WHEN ${TABLE}.country = 'United States' THEN '{{ _localization['domestic'] }}'
         ELSE '{{ _localization['international'] }}'
         END;;
  }

en ์–ธ์–ด ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Flights Identifier Flights country Flights From the US?
289 United States Domestic
400 Canada International
493 Congo International
936 United States Domestic

es_ES ์–ธ์–ด ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Vuelos Identificador Vuelos Paรญs Vuelos ยฟDe Los Estados Unidos?
289 United States Nacional
400 Canada Internacional
493 Congo Internacional
936 United States Nacional

es_ES ์–ธ์–ด ์‚ฌ์šฉ์ž๋Š” ๊ฐ๊ฐ 'Nacional' ๋ฐ 'Internacional'๋กœ ํ˜„์ง€ํ™”๋œ '๊ตญ๋‚ด' ๋ฐ '๊ตญ์ œ' ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ LookML ๋Œ€์‹œ๋ณด๋“œ ํ•„ํ„ฐ ๋ฐ LookML ๋Œ€์‹œ๋ณด๋“œ ์š”์†Œ ํ•„ํ„ฐ์—์„œ Liquid๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ์˜ ๊ธฐ๋ณธ๊ฐ’์„ ํ˜„์ง€ํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LookML ๋Œ€์‹œ๋ณด๋“œ์— ์ด ํ˜„์ง€ํ™”๋œ ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ผ์ด ์žˆ๊ณ  ํ•ด๋‹น ํƒ€์ผ์— LookML์—์„œ ์ •์˜๋œ ํ•„ํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

filters:
  flights.from_US: "{{ _localization['domestic'] }}"

en ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€์‹œ๋ณด๋“œ์˜ ํƒ€์ผ์„ ํƒ์ƒ‰ํ•˜๋ฉด Explore๊ฐ€ Flights From the US? ํ•„๋“œ์˜ Domestic ๊ฐ’์œผ๋กœ ํ•„ํ„ฐ๋ง๋˜๋ฉฐ, Explore์˜ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์— ๋‹ค์Œ ๊ฒฐ๊ณผ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Flights Identifier Flights country Flights From the US?
289 United States Domestic
936 United States Domestic

es_ES ์–ธ์–ด๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€์‹œ๋ณด๋“œ์˜ ํƒ€์ผ์—์„œ ํƒ์ƒ‰ํ•˜๋ฉด Explore ํ•„๋“œ๊ฐ€ Vuelos ยฟDe Los Estados Unidos? ํ•„๋“œ์˜ Nacional ๊ฐ’์œผ๋กœ ํ•„ํ„ฐ๋ง๋˜๋ฉฐ Explore์˜ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์—๋Š” ๋‹ค์Œ ๊ฒฐ๊ณผ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Vuelos Identificador Vuelos Paรญs Vuelos ยฟDe Los Estados Unidos?
289 United States Nacional
936 United States Nacional

ํ™•์žฅ๋œ ๊ฐ์ฒด ๋ฐ ์„ธ๋ถ„ํ™”๋œ ๊ฐ์ฒด์— ํ˜„์ง€ํ™” ๊ทœ์น™์ด ์ ์šฉ๋˜๋Š” ๋ฐฉ์‹ ์ดํ•ด

๋ทฐ, Explore ๋ถ„์„ ๋˜๋Š” LookML ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ™•์žฅํ•  ๋•Œ์™€ ๋ทฐ ๋˜๋Š” Explore ๋ฏธ์„ธ ์กฐ์ • ์‹œ์— ํ˜„์ง€ํ™” ๊ทœ์น™์ด ์ ์šฉ๋˜๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

๊ฐ์ฒด๋ฅผ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ƒ์„ธ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ ์ƒˆ ๋ผ๋ฒจ ๋˜๋Š” ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ ์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์— ํ˜„์ง€ํ™” ์ •์˜๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด flights ๋ทฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


view: flights {
  label: "flight_info"
  sql_table_name: flightstats.accidents ;;
  ...
}

๊ทธ๋Ÿฐ ๋‹ค์Œ flights ๋ทฐ๋ฅผ ํ™•์žฅํ•˜๋Š” ์ƒˆ ๋ทฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

include: "/views/flights.view"

view: flights_enhanced {
  extends: [flights]
  label: "enhanced_flight_info"
}

์–ธ์–ด ๋ฌธ์ž์—ด ํŒŒ์ผ์—์„œ ๋‘ ๊ฐ€์ง€ ๋ทฐ ๋ผ๋ฒจ ๋ฌธ์ž์—ด("flight_info" ๋ฐ "enhanced_flight_info")์„ ๋ชจ๋‘ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ํ˜„์ง€ํ™” ์ˆ˜์ค€์ด strict๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ์ƒˆ ๋ผ๋ฒจ ๋˜๋Š” ์„ค๋ช…์„ ์ •์˜ํ•  ๋•Œ๊นŒ์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ปค๋ฐ‹ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.