连接到数据库中的空间数据
- 版本 :2022.1 及更高版本
适用于: Tableau Desktop, Tableau Online, Tableau Server
您可以使用存储在数据库中的空间列在 Tableau 中构建地图可视化项。
Tableau 支持使用以下连接器直接连接到空间数据:
Microsoft SQL Server
PostgreSQL + PostGIS
Pivotal Greenplum + PostGIS
Oracle
有关使用这些连接器的信息,请参见Microsoft SQL Server、PostgreSQL、Pivotal Greenplum Database或Oracle连接器示例。
支持的空间数据和 SRID
对于 Microsoft SQL Server,只支持地理类型空间数据。
PostgreSQL + PostGIS、Oracle 以及 Pivotal Greenplum + PostGIS 支持几何和地理类型的字段。地理字段必须指定地理类型(例如,POINT、LINESTRING)和 SRID 才能被识别为空间字段。地理字段必须指定地理类型才能被识别。
注意:在 PostgreSQL + PostGIS 中,您可以连接到包含混合几何类型(点、线和多边形)的表,但 Tableau 将不会同时呈现这些类型。
这些连接器支持以下 SRID:
NAD83 (EPSG:4269)
ETRS89 (EPSG:4258)
WGS84 (EPSG:4326)
在 PostgreSQL + PostGIS 中,SRID 始终默认为 WGS84 (EPSG:4326)。
Tableau 支持使用这些连接器进行实时连接和数据提取连接。
连接到空间列
打开 Tableau 并连接到数据。有关如何使用支持的连接器连接到数据的详细信息,请参见Microsoft SQL Server、PostgreSQL、Oracle或Pivotal Greenplum Database连接器示例。
在“数据源”页面左侧窗格中的“表”下,将一个包含空间数据的表拖到画布上。
空间列显示的名称与他们在数据库中的名称相同。
现在即可使用空间数据在 Tableau 中构建地图。有关如何依据空间文件创建地图的详细信息,请参见依据空间数据构建地图视图。
使用自定义 SQL 和 RAWSQL 执行高级空间分析
连接到自定义 SQL 查询
打开 Tableau 并连接到数据库。
在“数据源”页面的左侧窗格中,将“新建自定义 SQL”拖到画布上。
在出现的“编辑自定义 SQL”对话框中键入或粘贴您的查询。有关可用于空间数据的自定义 SQL 的示例,请参见自定义 SQL 查询示例。
完成后,单击“确定”。
有关详细信息,请参见连接到自定义 SQL 查询。
自定义 SQL 查询示例
下面是一些查询示例。请注意,自定义 SQL 查询将因数据源而异。
如果您的数据有两组点(例如学校和公园),并且您想要显示它们的相交位置:
SELECT S.[common nam] as SchoolName, P.[common nam] as ParkName, S.geom.STBuffer(
此示例查询将为公园在学校半径距离(米)内的每种情况生成一行。查询结果在数据网格中如下所示:
注意:此示例引用名为“Radius”的参数。该参数测量距离(米),并具有以下设置:
数据类型:浮点
当前值:600
允许的值:范围
最小值:100
最大值:2,000
步长:50
有关详细信息,请参见在自定义 SQL 查询中使用参数。
如果只需要特定的点周围的数据
SELECT * FROM [Test_spatial_
此示例查询只查询 POINT 周围 1000 米范围内的数据。像第一个示例中使用的参数一样,半径可以是参数。
或者也可以使用矩形,而不是点和半径。例如:
SELECT * FROM [Test_spatial_
注意:多边形点的卷绕顺序(顺时针或逆时针)确定您将获得哪一组点。您可以使用 SQL Server 函数 ReorientObject()
反转卷绕顺序。
如果看到有关混合数据类型的错误
SELECT *, F.geom.STGeometryType() as geomtype FROM [Test_spatial_
此示例查询筛选出几何图形类型空间数据,因为 Tableau 无法呈现 Microsoft SQL Server 连接的几何图形类型空间数据。您也可以选择其他空间类型。
如果数据在 Tableau 中呈现太慢
SELECT [Id], [OBJECTID], [fire_num], [year_], [acres], [fire_name], [unit_id], [Shape_Leng], [Shape_Area], [geom].Reduce(500) as SimpleGeom
FROM [Test_spatial_
此示例查询可以大大减小数据大小。(某些对象会缩小为点,这些对象将被丢弃。)
使用 RAWSQL
若要将 RAWSQL 用于空间数据,您可以使用 RAWSQL_SPATIAL 或 RAWSQLAGG_SPATIAL 函数创建一个计算字段。例如:
RAWSQL_SPATIAL("Select %1.STIntersection(%2.STBuffer(200))",[school_geom], [park_geom])
此公式根据两个值的交集返回唯一的空间数据。
RAWSQLAGG_SPATIAL("ST_ConvexHull(ST_Collect(%1))", [Geog])
RAWSQLAGG_SPATIAL("ST_ConcaveHull(ST_Collect(%1), %2, false)", [Geog], [ParameterValue])
其中每一个都将返回所提供数据点周围的边界区域。ConcaveHull 是基于精度的最小边界区域,在此函数中是参数值。
有关将 RAWSQL 用于空间数据的详细信息,请参见直通函数 (RAWSQL)。有关如何创建计算字段的详细信息,请参见创建计算字段。
注意:连接到 Oracle 时,RAWSQL 空间函数不可用。
注意:使用 PostgreSQL + PostGIS 时,在使用特定于 PostGIS 函数的 RAWSQL 时可能会导致错误。
空间连接疑难解答
性能问题
在使用包含大量记录的联接空间列时,可能会出现重复标记。这可能会导致性能变慢。
为了提高性能,请提取联接的数据源。有关详细信息,请参见提取数据。
Microsoft SQL Server 错误消息和解决方案
当空间表使用不支持的空间引用时
当空间表包括多种类型的空间对象时
在可视化项中聚合度量时
PostgreSQL + PostGIS、Oracle 和 Pivotal Greenplum + PostGIS 错误消息和解决方案
使用混合 SRID 并且某个 SRID 不受支持时
当空间表使用不支持的空间引用时
查询结果超出 1GB 限制时
示例 - 依据 Microsoft SQL Server 空间数据构建地图
以下示例演示如何创建下面的地图,该地图显示位于华盛顿州西雅图各个公园 600 米范围内的学校。
此示例使用一个名为 TestSpatial 的 Microsoft SQL Server 数据库连接。将使用此数据库中的以下各表:
seattleelementaryschools
allseattleparks
步骤 1:连接
打开 Tableau Desktop 并连接到 Microsoft SQL Server。
在“数据源”页面的左侧窗格中,将“新建自定义 SQL”拖到画布上。
在出现的“编辑自定义 SQL”对话框中键入或粘贴查询。
此示例使用以下查询:
SELECT S.[common nam] as SchoolName, P.[common nam] as ParkName, S.geom.STBuffer(
注意:此示例引用名为“Radius”的参数。有关详细信息,请参见在自定义 SQL 查询中使用参数。
此查询的结果如下所示:
步骤 2:构建地图
转到一个新工作表。
在“数据”窗格中,双击某个空间字段。
此示例中使用“school_geom”。双击后,该字段将自动添加至“标记”卡上的“详细信息”,并且会创建一个地图视图。
从“数据”窗格中,将维度拖到“标记”卡上的“标签”。此示例中使用“School Name”(学校名称)。
在“行”功能区上,按住 Ctrl 单击(在 Mac 上按住 Command 单击)并将“纬度(生成)”向右拖动。这将复制字段。
一个重复的地图将出现在第一个地图下,并且“标记”卡将更新为包含两个“纬度(生成)”选项卡。顶部的选项卡表示顶部的地图,底部的选项卡表示底部的地图。
在“标记”卡上,单击底部的“纬度(生成)”选项卡,并通过将字段拖回到“数据”窗格来移除字段。
底部地图将更新为空白地图。
选择“分析”>“创建计算字段”。
在打开的计算编辑器中,执行以下操作:
为计算字段命名。在此示例中,计算字段称为“Intersection”(交集)。
输入 RAWSQL 公式。此示例使用以下公式:
RAWSQL_SPATIAL("Select %1.STIntersection(%2.STBuffer(200))",[school_geom], [park_geom])
此公式根据两个值的交集返回唯一的空间数据。
完成后,单击“确定”。
选择“分析”,然后清除“聚合度量”。
从“数据”窗格中,将新的计算字段(本例中为“Intersection”)拖到“标记”卡上的“详细信息”。
底部地图将更新为包含新标记。请注意,由于 RAWSQL 公式的原因,标记为唯一的空间形状。
从“数据”窗格中,将维度拖到“标记”卡上的“详细信息”。这会将标记解聚。
此示例中使用维度“ParkName”(公园名称)。
从“数据”窗格中,将同一维度拖到“标记”卡上的“颜色”。
在此示例中,每个公园现在分配有一种颜色。
在“行”功能区上,右键单击右侧的“纬度(生成)”字段,并选择“双轴”。
地图现在将合并,数据将分层。有关详细信息,请参见在 Tableau 中创建双轴(分层)地图。
设置地图的格式。有关详细信息,请参见自定义地图的外观。
在此示例,将应用以下格式设置:
地图现在已完成。
“School Name”(学校名称)标记显示为灰色。
“School Name”(学校名称)标记标签显示为橙色。
地图背景样式设置为深色。
街道和高速公路层显示在背景地图上。