概览

本文档介绍了如何使用 Places Insights 和 Looker Studio 构建动态地理空间报告。让非技术利益相关方能够自行解答问题,从而发掘位置数据的价值。本指南介绍了如何将静态报告转换为交互式热图风格的市场分析工具,而无需为每个请求编写 SQL。支持访问复杂的位置数据,弥合数据工程与商业智能之间的差距。
采用这种架构模式可获得以下几项主要优势:
- 直观的数据呈现:将地点数据洞见转换为交互式地图和图表,以便立即了解空间密度和趋势。
- 无需使用 SQL 即可简化探索:让市场分析师或房地产规划师等团队成员能够使用预定义的参数动态过滤数据(例如,使用下拉菜单更改“城市”或“时间段”)。他们无需编写任何 SQL 代码,即可探索数据。
- 无缝协作:借助 Looker Studio 标准的共享功能,您可以安全地分发这些互动式数据分析。
解决方案工作流
以下工作流可建立高性能的报告架构。它从静态基准转变为完全动态的应用,确保在引入复杂性之前数据正确无误。
前提条件
在开始之前,请按照以下说明设置地点洞察。您需要有权访问 Looker Studio,这是一个免费工具。
第 1 步:建立静态地理空间基准
在引入互动性之前,请先建立一个基本查询,并确保它在 Looker Studio 中正确呈现。使用 Places Insights 和 BigQuery 的地理空间功能,通过 H3 索引系统将数据汇总到六边形网格中。这将生成可与 Looker 数据洞察的填充地图图表类型搭配使用的查询输出,以实现可视化。
1.1 关联数据
使用以下静态查询来建立初始连接。它以固定位置(伦敦)和类别(餐厅)为目标,以验证数据流水线。
SELECT
h3_index,
`carto-os.carto.H3_BOUNDARY`(h3_index) AS h3_geo,
restaurant_count
FROM (
SELECT WITH AGGREGATION_THRESHOLD
`carto-os.carto.H3_FROMGEOGPOINT`(point, 8) AS h3_index,
COUNT(*) AS restaurant_count
FROM
-- Note: Change 'gb' to your target country code (e.g., 'us')
`places_insights___gb.places`
WHERE
'London' IN UNNEST(locality_names)
AND 'restaurant' IN UNNEST(types)
GROUP BY
h3_index
)
ORDER BY
restaurant_count DESC;
关于空间聚合的说明
此查询使用 BigQuery 中提供的公共 CARTO 空间扩展 (carto-os)。H3_FROMGEOGPOINT 函数可将特定位置点转换为 H3 单元格,该系统可将世界划分为六边形网格单元格。
我们之所以使用这种转换,是因为 Looker Studio 的填充地图需要使用多边形(形状)来呈现颜色。通过将点转换为六边形,我们可以直观呈现特定区域内的商家密度,而不是绘制数千个重叠的点。
关于汇总阈值的说明
所有地点数据洞见查询都需要 WITH AGGREGATION_THRESHOLD 子句。此隐私保护措施可确保仅在汇总计数达到 5 或更高值时才返回数据。
在此可视化图表的背景下,如果某个 H3 网格单元包含的餐厅数量少于 5 家,则该单元会完全从结果集中省略,并在地图上显示为空。
如需在 Looker Studio 中实现此功能,请执行以下操作:
- 创建新的空白报告。
- 选择 BigQuery 作为数据连接器。
- 从左侧菜单中选择自定义查询,然后选择您的结算项目 ID。
- 将上面的静态基本查询粘贴到编辑器中。
- 清除使用旧版 SQL、启用日期范围和启用查看者电子邮件地址参数。
- 点击添加。
1.2 配置地理空间可视化图表
连接数据后,请配置 Looker Studio 以正确识别 H3 边界数据:
- 通过添加图表菜单,将填充地图可视化图表添加到报告画布。
- 确保包含多边形几何图形的
h3_geo字段设置为地理空间数据类型。- 点击连接名称旁边的修改数据源(铅笔)图标。
- 如果
h3_geo设置为 Text (ABC),请使用下拉菜单依次选择 Geo > Geospatial, - 点击完成。
- 将
h3_index字段映射到位置(充当唯一标识符)。 - 将
h3_geo字段映射到地理空间字段(充当多边形几何图形)。 - 将
restaurant_count字段映射到颜色指标。
这将呈现按 H3 单元格划分的餐厅密度地图。深蓝色(默认颜色选项)表示餐厅数量较多的单元格。

第 2 步:实现动态参数
为了使报告具有互动性,我们将在报告中添加控件,以便用户从以下选项中进行选择:
- 地点:控制报告重点关注的城市。
- 星期几:根据地点的营业日期过滤地点,利用架构中的
regular_opening_hours记录。 - 一天中的小时:通过与
start_time和end_time字段进行比较,根据营业时间过滤地点。
为此,您需要在运行时将用户选择的参数直接传递到修改后的 Places Insights 查询中。在 Looker Studio 的数据源编辑器中,您必须将这些参数明确定义为类型化变量。
在 Looker 数据洞察中,选择资源菜单,然后点击管理添加的数据源。在随即显示的面板中,选择之前添加的 BigQuery 自定义 SQL 数据源旁边的 EDIT。
在“修改连接”窗口中,选择添加参数。我们将添加三个参数,其值如下所示。
| 参数名称 | 数据类型 | 允许的值 | 值列表(必须与数据库完全一致) | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
p_locality |
文本 | 值列表 |
|
||||||||||||||||
p_day_of_week |
文本 | 值列表 |
|
||||||||||||||||
p_hour_of_day |
文本 | 值列表 |
|
p_hour_of_day 参数的配置示例。

对于 p_hour_of_day 参数,请密切注意 Value 列。
由于 SQL 查询使用 CAST(@p_hour_of_day AS TIME),因此从 Looker Studio 传递的值必须采用严格的 HH:MM:SS 格式(24 小时制)。
设置并保存所有三个参数后,修改 BigQuery 自定义 SQL 连接,以使用 @ 语法引用这些变量。
为此,请点击“修改连接”,然后粘贴以下修改后的查询:
SELECT
h3_index,
`carto-os.carto.H3_BOUNDARY`(h3_index) AS h3_geo,
restaurant_count
FROM (
SELECT WITH AGGREGATION_THRESHOLD
`carto-os.carto.H3_FROMGEOGPOINT`(point, 8) AS h3_index,
COUNT(*) AS restaurant_count
FROM
`places_insights___gb.places`
WHERE
-- Dynamic locality filter based on parameter
@p_locality IN UNNEST(locality_names)
AND 'restaurant' IN UNNEST(types)
AND business_status = 'OPERATIONAL'
AND EXISTS (
SELECT 1
FROM UNNEST(
CASE @p_day_of_week
WHEN 'monday' THEN regular_opening_hours.monday
WHEN 'tuesday' THEN regular_opening_hours.tuesday
WHEN 'wednesday' THEN regular_opening_hours.wednesday
WHEN 'thursday' THEN regular_opening_hours.thursday
WHEN 'friday' THEN regular_opening_hours.friday
WHEN 'saturday' THEN regular_opening_hours.saturday
WHEN 'sunday' THEN regular_opening_hours.sunday
END
) AS hours
WHERE hours.start_time <= CAST(@p_hour_of_day AS TIME)
AND hours.end_time >= TIME_ADD(CAST(@p_hour_of_day AS TIME), INTERVAL 1 HOUR)
)
GROUP BY
h3_index
)
ORDER BY
restaurant_count DESC;
点击“重新连接”以保存修改。在修改后的查询中,请注意新变量(例如 @p_hour_of_day),这些变量与我们刚刚设置的参数名称相关联。
返回到报告画布,向最终用户公开这些参数:
- 向报告中添加三个下拉列表控件。
- 对于每个控制变量,请将 Control 字段设置为与您新创建的形参相对应:
- 控制变量 1:
p_locality - 对照组 2:
p_day_of_week - 对照组 3:
p_hour_of_day
- 控制变量 1:
最终报告应如下所示。更改任一下拉菜单控件中的值后,Looker 数据洞察会从 Places Insights 中提取所请求的数据,然后再在地图上直观呈现。

第 3 步:分享结果
使用 Looker Studio 内置的共享工具共享报告。这样,观看者就可以根据他们从下拉列表中选择的参数动态更新可视化图表。
总结
此模式可创建一个可扩缩的交互式报告工具,该工具利用 BigQuery 的计算能力向 Looker Studio 提供汇总的 Places Insights 数据。此架构避免了尝试直观呈现海量原始数据集的陷阱,并让最终用户能够灵活地近乎实时地探索不同维度(例如时间、位置和业务类型)的数据。借助此强大工具,非技术利益相关者可以灵活地探索数据。
后续步骤
通过对 Places Insights 架构的不同部分进行参数化,探索其他各种动态报告:
- 动态竞争对手分析:为
brand名称创建一个参数,以便用户在不同竞争对手之间即时切换热图,查看他们在市场中的相对饱和度。如需了解品牌数据的可用性,请参阅关于地点数据洞见数据。 - 互动式网站选择:为
price_level添加参数(例如, “中等”与“高”)和最低rating,以便房地产团队根据特定人口统计资料动态过滤区域。 - 自定义集水区:允许用户定义自定义研究区域,而不是按城市名称进行过滤。
- 基于半径:创建三个数值参数:p_latitude、p_longitude 和 p_radius_meters。坐标可从 Google Maps Platform API(包括 Geocoding API)获取。在查询中,将以下内容注入到 ST_DWITHIN 函数中:
ST_DWITHIN(point, ST_GEOGPOINT(@p_longitude, @p_latitude), @p_radius_meters)
- 基于多边形:对于复杂的自定义形状(例如销售区域),用户无法轻松输入几何文本。您可以在 BigQuery 中创建一个包含形状几何图形和易记名称(例如“加利福尼亚州”)的查找表,“Zone A”)。在 Looker Studio 中创建一个文本参数
p_zone_name,以便用户选择区域,并使用子查询检索ST_CONTAINS函数的几何图形。
- 基于半径:创建三个数值参数:p_latitude、p_longitude 和 p_radius_meters。坐标可从 Google Maps Platform API(包括 Geocoding API)获取。在查询中,将以下内容注入到 ST_DWITHIN 函数中:
贡献者
- David Szajngarten | 开发者关系工程师
- Henrik Valve | DevX 工程师