概览

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

第 2 步:实现动态参数
为了使报告具有互动性,我们将向报告添加控件,让用户能够从以下选项中进行选择:
- 地点:控制报告重点关注的城市。
- 星期几:根据地点营业的日期过滤地点,利用架构中的
regular_opening_hours记录。 - 一天中的时间:通过与
start_time和end_time字段进行比较,根据地点的营业时间过滤地点。
为此,您将在运行时将用户选择的参数直接传递到修改后的地点数据分析查询中。在数据洞察的数据源编辑器中,您必须将这些参数明确定义为类型化变量。
在数据洞察中,选择资源 菜单,然后点击管理添加的数据源 。在显示的面板中,针对我们之前添加的 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),因此从数据洞察传递的值必须采用严格的 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,这些变量与我们刚刚设置的参数名称相关联。
返回到报告画布,向最终用户公开这些参数:
- 向报告添加三个下拉列表 控件。
- 对于每个控件,将控制字段 设置为与您新创建的参数相对应:
- 控件 1:
p_locality - 控件 2:
p_day_of_week - 控件 3:
p_hour_of_day
- 控件 1:
最终报告应如下所示。更改其中一个下拉控件中的值将触发数据洞察从地点数据分析中提取请求的数据,然后在地图上直观呈现。

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