【问题标题】:Dimension for geozones or Lat & Long in data warehouse数据仓库中地理区域或纬度和经度的维度
【发布时间】:2017-12-31 23:56:19
【问题描述】:

我有一个 DimPlace 维度,其中包含地点名称(由用户手动输入)和地点的纬度和经度(自动捕获)。由于地点是手动输入的,因此同一个地点可能会以不同的名称出现多次,此外,两个不同的地点可能彼此非常接近。

我们希望能够分析两个“地点”之间的 MPG,但我们希望将它们分组以形成更大的区域 - 即使用 lat 和 long 将一个位置的所有各种拼写以及不同但非常接近的所有拼写放在一起位置,在一个记录中。

我正计划为此创建一个新维度——比如 DimPlaceGeozone。我正在寻找一种资源来帮助加载映射到...的所有经纬度值??也许是邮政编码或城市名称?有时您可以找到一个脚本来加载常用维度(如 DimTime) - 我希望北美的 lat & long 值有类似的东西?

【问题讨论】:

标签: sql-server data-warehouse dimensional-modeling


【解决方案1】:

我过去做过类似的事情...我前面遇到的一个绊脚石是,跨越边界的 2 个位置可能比位于同一区域的 2 个位置在物理上更靠近。

我通过创建一个“双网格”系统来解决这个问题,该系统将每个位置分为 4 个区域。这样 2 个位置共享至少 1 个“区域”,您知道它们在彼此的范围内。

这里有一个例子,覆盖美国大部分地区...

IF OBJECT_ID('tempdb..#LatLngAreas', 'U') IS NOT NULL 
DROP TABLE #LatLngAreas;
GO

WITH 
    cte_Lat AS (
        SELECT 
            t.n,
            BegLatRange = -37.9 + (t.n / 10.0),
            EndLatRange  = -37.7 + (t.n / 10.0)
        FROM
            dbo.tfn_Tally(1030, 0) t
        ),
    cte_Lng AS (
        SELECT 
            t.n,
            BegLngRange = -159.7 + (t.n / 10.0),
            EndLngRange = -159.5 + (t.n / 10.0)
        FROM
            dbo.tfn_Tally(3050, 0) t
        )
SELECT 
    Area_ID = ROW_NUMBER() OVER (ORDER BY lat.n, lng.n),
    lat.BegLatRange, 
    lat.EndLatRange, 
    lng.BegLngRange, 
    lng.EndLngRange
    INTO #LatLngAreas
FROM
    cte_Lat lat
    CROSS JOIN cte_Lng lng;


SELECT 
    b3.Branch_ID,
    b3.Name,
    b3.Lat,
    b3.Lng,
    lla.Area_ID
FROM
    dbo.ContactBranch b3    -- replace with DimPlace
    JOIN #LatLngAreas lla
        ON b3.Lat BETWEEN lla.BegLatRange AND lla.EndLatRange
        AND b3.lng BETWEEN lla.BegLngRange AND lla.EndLngRange;

HTH, 杰森

【讨论】:

  • 这看起来会奏效——或者无论如何是一个很好的开始。谢谢!
  • 没问题。很高兴能提供帮助。
  • 你的函数 tfn_Tally() 是做什么的?
  • 它只是传统计数表的功能版本(其他人也称其为“数字表”)。这是从 Itzik Beg-Gan 那里借来的一个想法。 itprotoday.com/microsoft-sql-server/…
猜你喜欢
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2019-08-04
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多