SQL_상시_위치

용도

Explore: Explore_name {
sql_always_where: ${created_date} >= '2017-01-01' ;;
}
계층 구조
sql_always_where
기본값
없음

결제 가능
측정기준 이름 또는 SQL 열 이름을 사용하는 SQL WHERE 조건

특수 규칙
탐색의 일부가 아닌 조인된 뷰의 일부인 sql_always_where에서 SQL 열 이름을 참조하는 경우 always_join 매개변수를 사용하거나 필드 이름을 대신 참조하는 것이 중요합니다.

정의

sql_always_where를 사용하면 사용자가 변경할 수 없는 쿼리 제한을 적용할 수 있습니다. 이 제한은 sql_always_where가 사용되는 탐색의 모든 쿼리에 대해 Looker에서 생성하는 기본 SQL의 WHERE 절에 삽입됩니다. 이러한 제한사항은 실제 사용자가 실행하는 검색어 외에도 대시보드, 예약된 보기, 해당 탐색을 사용하는 삽입된 정보에 적용됩니다.

데이터베이스의 실제 테이블 및 열 이름을 사용하여 순수 SQL로 조건을 작성할 수 있습니다. 또한 다음과 같은 Looker 참조를 사용할 수 있습니다.

  • ${view_name.SQL_TABLE_NAME}: 다른 Looker 뷰 또는 파생된 테이블을 참조합니다. 이 참조의 SQL_TABLE_NAME는 리터럴 문자열이므로 아무것도 바꾸지 않아도 됩니다.
  • ${view_name.field_name}: Looker 필드를 참조합니다. Looker에서 필요한 조인을 자동으로 포함할 수 있으므로 이 방법을 사용하는 것이 SQL 열을 직접 참조하는 것보다 낫습니다.

사용자가 만든 쿼리의 기본 SQL을 확인하지 않는 한 sql_always_where 조건은 사용자에게 표시되지 않습니다.

Examples

사용자가 2012년 1월 1일 이전의 주문을 확인하지 못하도록 차단합니다.

# Using Looker references
explore: order {
  sql_always_where: ${created_date} >= '2012-01-01' ;;
}

# Using raw SQL
explore: order {
  sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}

사용자가 Periaptly Corporation의 고객 정보를 보지 못하도록 차단합니다.

explore: customer {
  sql_always_where: ${name} <> 'Periaptly Corporation' ;;
}

사용자가 Periaptly Corporation의 주문을 보지 못하도록 차단합니다.

explore: order {
  sql_always_where: ${customer.name} <> 'Periaptly Corporation' ;;
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

일반 과제

원시 SQL을 사용하는 경우 always_join를 사용해야 할 수 있습니다.

sql_always_where에서 조인된 뷰의 일부인 SQL 열 이름을 참조하는 경우 탐색 대신 always_join 매개변수를 사용해야 합니다. 다음 예를 참조하세요.

explore: order {
  sql_always_where: customer.name <> 'Periaptly Corporation' ;;
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

이 경우 sql_always_whereorder 탐색 대신 조인된 customer 뷰의 열을 참조합니다. sql_always_where는 모든 쿼리에 적용되므로 customer도 모든 쿼리에 결합되어야 합니다.

Looker는 쿼리에 사용할 SQL을 생성할 때 가장 깔끔한 SQL을 생성하려고 시도하며, 사용자가 선택하는 필드에 필요한 조인만 사용합니다. 이 경우 사용자가 고객 필드를 선택한 경우에만 Looker가 customer에 참여합니다. always_join를 사용하면 강제로 조인이 실행되도록 할 수 있습니다.

sql_always_where: customer.name <> 'Periaptly Corporation' 대신 sql_always_where: ${customer.name} <> 'Periaptly Corporation'를 사용했다면 always_join를 사용하지 않아도 customer가 조인할 수 있을 정도로 스마트한 기능을 제공합니다. 따라서 가능하다면 원시 SQL 참조 대신 Looker 필드 참조를 사용하는 것이 좋습니다.

탐색당 sql_always_where 하나만 사용

explore 정의에는 sql_always_where가 하나만 있어야 합니다. 필요에 따라 ANDOR를 사용하여 원하는 모든 동작을 단일 sql_always_where에 넣습니다.

알아두어야 할 사항

SQL HAVING 절에 비슷한 매개변수가 있음

sql_always_where에는 sql_always_having라는 매우 유사한 매개변수가 있습니다. 이 매개변수는 동일한 방식으로 작동하지만 WHERE 절이 아닌 HAVING 절에 조건을 적용합니다.

사용자가 변경할 수 있지만 삭제할 수는 없는 필터를 만들려면 always_filter를 고려하세요.

사용자가 특정 필터 집합을 사용하도록 하되 기본값을 변경할 수 있도록 하려면 대신 always_filter를 사용해 보세요.

변경할 수 없는 사용자별 필터를 원하는 경우 access_filter를 사용하는 것이 좋습니다.

탐색에 각 사용자별로 적용되는 필터를 포함하고 어떤 식으로든 변경할 수 없도록 하려면 access_filter를 사용하면 됩니다.