如何在Looker中计算排除特定类型Issue Items的平均商品评分
Looker自定义度量:排除特定问题商品的平均评分计算
方案一:子查询快速实现
无需额外定义维度,直接通过子查询判断并排除目标商品:
measure: avg_rating_excluding_quality_price_issues { type: average sql: CASE WHEN EXISTS ( SELECT 1 FROM issue WHERE issue.order_issue_items_id = ${customer_assignment_items.order_item_id} AND issue.reason IN ('QUALITY', 'PRICE') ) THEN NULL ELSE ${customer_assignment_items.rating} END ;; description: "所有商品的平均评分,排除存在QUALITY或PRICE类型问题的商品" }
逻辑说明:
EXISTS子查询检查当前订单商品是否关联了QUALITY或PRICE类型的问题记录- 若存在这类问题,返回
NULL——Looker的average类型度量会自动忽略NULL值,相当于排除该商品 - 无问题(或无关联Issue记录)的商品直接返回评分,纳入平均计算
方案二:左连接+过滤器(符合Looker范式)
先定义关联Issue表的维度,再通过过滤器排除目标问题类型:
1. 定义关联Issue的维度
dimension: issue_reason { sql: ${issue.reason} ;; type: string join: issue { sql_on: ${customer_assignment_items.order_item_id} = ${issue.order_issue_items_id} ;; type: left_outer } }
2. 创建自定义度量
measure: avg_rating_excluding_quality_price_issues { type: average sql: ${customer_assignment_items.rating} ;; filters: { field: issue_reason operator: not in values: ["QUALITY", "PRICE"] } description: "所有商品的平均评分,排除存在QUALITY或PRICE类型问题的商品" }
逻辑说明:
- 左连接
issue表,保留所有订单商品(包括无Issue的) - 过滤器排除
issue_reason为QUALITY或PRICE的记录,剩余记录的评分参与平均计算
注意事项
- 替换
${customer_assignment_items.rating}为你实际使用的评分字段/度量名称 - 确保
issue表和customer_assignment_items表在Looker模型中有正确关联,或子查询中的表名与数据库实际表名一致
内容的提问来源于stack exchange,提问作者virtualrealism
相关产品推荐
相关产品推荐

