derived_analytic_model

用量

view: view_name {
  derived_analytic_model: {
    sql: analytic_model_definition ;;
  }
}
階層
derived_analytic_model
預設值

特別規則
分析模型僅支援 BigQuery 和 Snowflake 連線。

定義

如果是 BigQuery 和 Snowflake 連線,derived_analytic_model 參數會定義資料庫內的分析模型 (BigQuery 圖表Snowflake 中的語意檢視區塊),由 Looker 管理。在這種情況下,Looker 會執行您在 derived_analytic_model LookML 參數定義中指定的適當 SQL 資料定義語言 (DDL) 陳述式,在資料庫中產生分析模型。您在 derived_analytic_model 參數中定義的 SQL 語法必須受到資料庫支援。

衍生資料表不同,Looker 管理的分析模型物件不會在資料庫中保留任何資料,也不會以遞增方式重新整理。而是代表語意模型,直接在資料庫中定義關係和指標。

如要定義分析模型,請使用 derived_analytic_model 參數的下列其中一個子參數:

此外,如果您使用 sql 子參數定義分析檢視區塊,則可使用 derived_analytic_model 參數的 publish_as_db_analytic_model 子參數,建立可在 Looker 外部查詢的穩定分析模型。

derived_analytic_model 參數中定義分析模型後,即可定義對應至分析模型的 LookML 維度和測量指標。如需範例,請參閱「範例」一節。

sql

如要只提供分析模型定義的 SQL,並讓 Looker 管理分析模型的建立作業,請使用 sql 參數。使用 sql 子參數時,請勿加入 CREATECREATE OR REPLACE 陳述式,因為 Looker 會自動產生 DDL 陳述式,在資料庫端建立分析模型。

如需使用 sql 參數在資料庫中建立分析模型的範例,請參閱「使用 sql 建立衍生分析模型」。

sql_create

使用 sql_create 參數定義完整的 SQL 陳述式,以建立分析模型。使用 sql_create 參數時,您需要加入 CREATE OR REPLACE 陳述式 (如果方言不支援 CREATE OR REPLACE,則為 CREATE 陳述式)。

使用 sql_create 子參數時,請注意下列事項:

  • 如果是 BigQuery 連線,請使用 CREATE OR REPLACE 陳述式建立分析模型。
  • 使用 ${SQL_TABLE_NAME} 替換所建立的分析模型計算名稱,確保 SQL 陳述式會正確納入您在 LookML view 參數中提供的分析模型名稱。

如需使用 sql_create 參數在資料庫中建立分析模型的範例,請參閱「使用 sql_create 建立衍生分析模型」。

create_process

如要定義多個連續的 SQL 陳述式來定義分析模型,請使用 create_process 參數。在 create_process 參數下,使用 sql_step 子參數指定個別的 SQL 陳述式。資料庫會依您指定的順序,一次執行一個 sql_step 陳述式。Looker 會在您定義 sql_step 子參數時發出 SQL 陳述式,且不會加上任何包裝函式,因此您必須加入含有 CREATE OR REPLACE 陳述式的步驟 (如果方言不支援 CREATE OR REPLACE,則為 CREATE 陳述式)。

如需使用 create_process 參數在資料庫中建立分析模型的範例,請參閱「使用 create_process 建立衍生分析模型」。

publish_as_db_analytic_model

對於使用 sql 參數建立的衍生分析模型,您可以使用 publish_as_db_analytic_model: yes 定義衍生分析模型,提示 Looker 建立穩定的分析模型,以便在 Looker 外部查詢。

在衍生分析模型的 LookML 部署至正式環境後,Looker 重新產生器會在下一個週期發布 (建立) 穩定分析模型。publish_as_db_analytic_model: yes

如要瞭解如何取得穩定分析模型的名稱,以便在 Looker 以外查詢穩定分析模型,請參閱「存取穩定分析模型」一節。

根據分析檢視畫面建立 LookML 維度和測量指標

定義分析模型後,您可以在同一個檢視表檔案中,定義以分析模型為基礎的 LookML 維度和測量指標。

請參閱方言的說明文件,瞭解定義分析模型時要使用的正確語法,以及如何參照分析模型中的元素。舉例來說,如要從 BigQuery 圖形實體建立 LookML 維度,您必須在設定範圍時使用底線分隔元素。舉例來說,如果是 BigQuery 圖表,這個 LookML 維度會以 Stores 節點資料表中的 location_id 屬性為準:

  dimension: location_id {
    type: number
    sql: Stores_location_id ;;
  }

不過,如要建立以 Snowflake 語意檢視為基礎的 LookML 維度,您必須使用指標或維度的不合格名稱。

範例

以下各節提供範例,說明如何使用 derived_analytic_model 的不同子參數建立分析檢視區塊:

使用 sql 建立衍生分析模型

以下是 LookML 檢視表檔案範例,使用 derived_analytic_modelsql 子參數,為 BigQuery 資料庫定義以 SQL 為基礎的分析模型。Looker 會執行 sql 參數中提供的 SQL DDL 指令,在資料庫中建立分析模型。

請注意範例中的下列事項:

  • sql 子參數只包含分析模型本身的定義。由於使用 sql 時,Looker 會自動處理分析模型的 CREATE 指令,因此沒有 CREATE 陳述式。
  • 分析模型是以 publish_as_db_analytic_model: yes 定義,因此 Looker 會建立穩定的分析模型,可在 Looker 外部查詢。
view: MyWarehouseOrdersView {
  derived_analytic_model: {
    publish_as_db_analytic_model: yes

    # Defining the analytic model
    
    sql:
      NODE TABLES (
        Customers
        KEY(customer_id)
        PROPERTIES(
          country_code,
          concat(first_name, ' ', last_name) AS name,
          age,
          MEASURE(AVG(age)) AS AvgAge 
        ),
      Orders
        KEY(order_id)
        PROPERTIES (
          customer_id,
          employee_id,
          date,
          discount,
          MEASURE(AVG(discount)) AS AvgDiscount
        )

      EDGE TABLES (
        -- Relationship: Orders -> Customers
        looker_test.orders AS orders_to_users
          KEY(id)
          SOURCE KEY (order_id) REFERENCES orders (order_id)
          DESTINATION KEY (customer_id) REFERENCES Customers (customer_id)
          NO PROPERTIES
      ) ;;
  }

  # Mapping dimensions/measures to the dimensions/measures
  # provided by the analytic model

  dimension: customer_id {
    type: number
    sql: Customers_customer_id ;;
  }

  dimension: customer_age {
    type: number
    sql: Customers_age ;;
  }

  measure: orders_avg_discount {
    type: number
    sql: Orders_AvgDiscount ;; 
  }
}

使用 create_process 建立衍生分析模型

以下是 LookML 檢視表檔案範例,可使用 derived_analytic_modelcreate_process 子參數,為 BigQuery 資料庫定義以 SQL 為基礎的數據分析模型。在本例中,您需要定義多個連續的 SQL 陳述式,才能定義分析模型。第一個步驟會捨棄現有的分析模型,第二個步驟則會建立分析模型。

view: university_statistics {
  derived_analytic_model: {
    create_process: {
      sql_step: 
        DROP PROPERTY GRAPH IF EXISTS ${SQL_TABLE_NAME} ;;
      sql_step: 
        CREATE PROPERTY GRAPH ${SQL_TABLE_NAME}
         NODE TABLES (
          university.College
            KEY(college_id)
            PROPERTIES(college_id, college_name),
          university.Department
            KEY(dept_id)
            PROPERTIES(dept_id, dept_name, college_id,
              budget OPTIONS(description="Department budget in USD"),
              MEASURE(SUM(budget)) AS total_budget),
          university.Course
            KEY(course_id)
            PROPERTIES(
              course_id,
              course_name,
              credits,
              dept_id,
              MEASURE(AVG(credits)) AS avg_credits,
              MEASURE(SUM(credits)) AS total_credits,
              MEASURE(COUNT(course_id)) AS course_count)
        )
        EDGE TABLES (
          university.Department AS CollegeDept
            SOURCE KEY (college_id) REFERENCES College (college_id)
            DESTINATION KEY (dept_id) REFERENCES Department (dept_id),
          university.Course AS DeptCourse
            SOURCE KEY (dept_id) REFERENCES Department (dept_id)
            DESTINATION KEY (course_id) REFERENCES Course (course_id)
        );;
    }
  }

  # Mapping dimensions/measures to the dimensions/measures
  # provided by the analytic model

  dimension: college_id {
    type: number
    sql: College_college_id ;;
  }

  dimension: course_name {
    type: string
    sql: Course_course_name ;;
  }
  
  ...
}

使用 sql_create 建立衍生分析模型

以下是 LookML 檢視表檔案範例,可透過 derived_analytic_modelsql_create 子參數,為 BigQuery 資料庫定義以 SQL 為基礎的分析模型。在這個範例中,sql_create 參數會定義要執行的完整 CREATE OR REPLACE 陳述式,以便在單一步驟中建立分析模型。

view: MyWarehouseOrdersView {
  derived_analytic_model: {
    sql_create:
      CREATE OR REPLACE PROPERTY GRAPH ${SQL_TABLE_NAME}
        NODE TABLES(
          accounting.Loan AS Loan
            KEY(loanId)
            LABEL Loan PROPERTIES(
              loanId,
              loanAmount,
              balance,
              createTime,
              interestRate,
              accountId,
              balance + 100 AS derived_balance,
              CASE WHEN balance > 1000 THEN "High" ELSE "Low" END AS risk_level,
              CONCAT("ID-", CAST(loanId AS STRING)) AS full_id,
              DATE(2024, 1, 1) AS fixed_date,
              MEASURE(AVG(interestRate)) AS avg_interest_rate
            ),
          accounting.AccountView AS Account
            KEY(accountId)
            LABEL Account PROPERTIES(
              accountId,
              createTime,
              isBlocked,
              accountType,
              amount,
              ownerId,
              MEASURE(MIN(createTime)) AS oldest_account_create_time,
              MEASURE(MAX(createTime)) AS newest_account_create_time,
              MEASURE(AVG(amount)) AS avg_account_amount,
              MEASURE(SUM(amount)) AS total_account_amount,
              MEASURE(COUNT(DISTINCT accountType)) AS account_type_count
            ),
          accounting.PersonMV AS Person
            KEY(personId)
            LABEL Person PROPERTIES(
              personId,
              personName,
              age,
              age_tier,
              MEASURE(AVG(age)) AS avg_age,
              MEASURE(COUNT(DISTINCT age_tier)) AS age_tier_count
            )
        )
        EDGE TABLES(
          accounting.Loan AS Account_Repay_Loan
            KEY(loanId)
            SOURCE KEY(loanId) REFERENCES Loan(loanId)
            DESTINATION KEY(accountId) REFERENCES Account(accountId)
            LABEL Repay NO PROPERTIES,
          accounting.Account AS Person_Own_Account
            KEY(accountId)
            SOURCE KEY(accountId) REFERENCES Account(accountId)
            DESTINATION KEY(ownerId) REFERENCES Person(personId)
            LABEL Own NO PROPERTIES
        );;
  }

  # Mapping dimensions/measures to the dimensions/measures
  # provided by the analytic model

  dimension: loan_id {
    type: number
    sql: Loan_loanId ;;
  }

  dimension: account_ID {
    type: number
    sql: Account_accountID ;;
  }

  ...

}

存取穩定分析模型

如果您使用 sql 子參數建立衍生分析模型,並在 derived_analytic_model 參數下加入 publish_as_db_analytic_model: yes 陳述式,Looker 會在衍生分析模型的 LookML 部署至正式環境後,於下一個 Looker 重新產生器週期發布 (建立) 穩定分析模型。publish_as_db_analytic_model: yes

發布穩定分析模型後,您可以使用穩定名稱直接查詢。如要判斷穩定名稱,請查看分析模型「探索」查詢「資料」部分的「SQL」分頁中包含的資訊。請按照下列步驟取得分析模型的穩定名稱:

  1. 開啟分析模型檢視區的「探索」

  2. 在「探索」中,從欄位挑選器選取任何維度或測量指標。

  3. 按一下「資料」部分的「SQL」分頁標籤。

  4. 在「SQL」分頁中,找出下列其中一個 SQL 陳述式:

    • BigQuery Graph:
      • CREATE PROPERTY GRAPH
      • SELECT ... FROM GRAPH_EXPAND('PROPERTY_GRAPH_NAME')
    • 適用於 Snowflake 語意檢視區塊:
      • CREATE SEMANTIC VIEW
      • SELECT ... FROM SEMANTIC_VIEW_NAME
  5. 穩定名稱是 Looker 在暫存結構定義中建立的檢視區塊,指向「SQL」分頁中顯示的實際模糊處理資料表。如要取得分析檢視區塊的穩定名稱,請填寫 SQL 陳述式中的下列資訊:

    SCRATCH_SCHEMA_NAME.CONNECTION_REGISTRATION_KEY_MODEL_NAME_VIEW_NAME
    
    • SCRATCH_SCHEMA_NAME:臨時結構定義名稱是 CREATESELECT 陳述式後方字串的開頭,位於「.」之前
    • CONNECTION_REGISTRATION_KEY:連線註冊金鑰為兩個字元,視資料庫方言而定,會遵循 CREATESELECT 陳述式中資料表名稱的美元符號或第一個底線。
    • MODEL_NAME:LookML 模型的名稱。
    • VIEW_NAME:定義分析模型的檢視區塊名稱。

舉例來說,以下是 BigQuery 連線的探索查詢「SQL」分頁中的文字。分析模型定義在名為 sales_analytic_model 的檢視區塊中,而 LookML 模型的名稱是 thelook。在這個案例中,Looker 已建立分析模型,因此沒有 CREATE 陳述式。但 SELECT ... FROM GRAPH_EXPAND 陳述式包含資料表名稱資訊:

-- use existing sales_analytic_model in `looker-test-db.looker_scratch.LG_J7LSZ1778710001008_sales_analytic_model`
SELECT
    sales_analytic_model.orders_id  AS sales_analytic_model_orders_id,
    AGG(sales_analytic_model.orders_count_orders ) AS sales_analytic_model_count_orders
FROM GRAPH_EXPAND("looker-test-db.looker_scratch.LG_J7LSZ1778710001008_sales_analytic_model") AS sales_analytic_model
GROUP BY
    1
ORDER BY
    2 DESC
LIMIT 500

以下是您需要用來衍生分析模型穩定名稱的值:

  • SCRATCH_SCHEMA_NAME」這個價格looker-test-db.looker_scratch
  • CONNECTION_REGISTRATION_KEY」這個價格J7
  • MODEL_NAME」這個價格thelook
  • VIEW_NAME」這個價格sales_analytic_model

因此,分析模型的穩定名稱如下:

looker-test-db.looker_scratch.J7_thelook_sales_analytic_model

取得分析模型的穩定名稱後,即可直接查詢分析模型。

注意事項

使用資料庫內分析模型時,請注意下列事項和限制:

  • 資料類型:分析模型僅支援下列維度指標資料類型:

    • 支援的維度和指標:
      • string
      • number
      • date
      • yesno
    • 僅支援以下維度:
      • time
      • date_time
  • 評估:

    • 必須預先定義基本指標:必須在基礎資料庫分析模型中預先定義基本指標。Looker 無法透過對分析模型中的維度執行匯總 (例如 type: sumtype: count),定義新的基本指標。
    • 支援以其他指標為基礎的指標:您可以使用 LookML 指標的 sql 參數,執行使用分析模型中預先定義基礎指標的非匯總運算。建立以其他指標為依據的指標時,無法將新指標定義為匯總指標類型,例如 sumcount。您必須將新指標定義為非匯總指標類型,例如 stringnumberdateyesno。請參閱以下範例:

      measure: average_order_amount {
        type: number
        sql: ROUND(${total_order_amount} / NULLIF(${count_orders}, 0), 2) ;;
      }
      
  • 彙整:如果探索的基本檢視畫面是以分析模型為基礎,就無法包含任何彙整。同樣地,以分析模型為基礎的檢視區塊,也無法彙整至具有標準 LookML 基本檢視區塊的「探索」。

  • 隱含聯結:分析模型不支援依賴隱含聯結的功能。依賴隱含聯結的功能示例包括自訂日曆,以及使用 type: locationtype: distancetype: zipcode 定義的欄位。

  • 分析模型不支援下列功能: