PBI Dax 试图生成城市、州查找 50 英里范围内的取货地点列表

问题描述 投票:0回答:1

我正在尝试生成我的城市、州查找值 50 英里半径内的美国附近取货地点列表。我在表 A 中记录了纬度和经度,在表 B 中列出了美国城市的纬度和经度。我已经找到了使用固定起始位置作为距离半径的测量公式,但我无法找到适用于动态起始位置的公式。我的起始位置是城邦查找值。

我已经尝试过这个措施 `= var Lat1 = MIN('tableB'[lat]) var Lng1 = MIN('tableB'[lng])

var Lat2 = MIN('tableA'[lat])
var Lng2 = MIN('tableA'[lng])

var P = DIVIDE( PI(), 180 )
var A = 0.5 - COS((Lat2-Lat1) * p)/2 + 
COS(Lat1 * p) * COS(lat2 * P) * (1-COS((Lng2- Lng1) * p))/2
var final = 12742 * ASIN((SQRT(A)))
return final`

这只是返回总距离,而不是每个位置的距离

我已经尝试过这个计算列

= ACOS(SIN('tableA'[PICKUP_LAT]*PI()/180) * SIN('tableA'[DELIVERY_LAT]*PI()/180) + COS('tableA'[PICKUP_LAT]*PI()/180) * COS('tableA'[DELIVERY_LAT]*PI()/180) *COS('tableA'[DELIVERY_LON]*PI()/180-'tableA'[PICKUP_LON]*PI()/180)) * 3959

这是我在认为起始位置应该基于单独的表之前尝试过的方法。

dax powerbi-desktop
1个回答
0
投票

以下是我建议采取的步骤的摘要:

  1. 创建一个仅包含切片器使用的位置的表。
  2. 创建一个度量来计算距离。
  3. 将测量添加到表中并按小于或等于 50 英里进行筛选。

1。创建一个仅包含切片器使用的位置的表。

Locations = DISTINCT('Table'[Location])

2。创建一个度量来计算距离。

HaversineDistance = 
    VAR __FromCity = SELECTEDVALUE(Locations[Location])
    VAR __ToCity = SELECTEDVALUE('Table'[Location])
    VAR __FromLat = LOOKUPVALUE('Table'[Latitude],'Table'[Location],__FromCity)
    VAR __ToLat = LOOKUPVALUE('Table'[Latitude],'Table'[Location],__ToCity)
    VAR __FromLong = LOOKUPVALUE('Table'[Longitude],'Table'[Location],__FromCity)
    VAR __ToLong = LOOKUPVALUE('Table'[Longitude],'Table'[Location],__ToCity)
    VAR __distanceLong = RADIANS(__ToLong - __FromLong)
    VAR __distanceLat = RADIANS(__ToLat - __FromLat)

    VAR __a = (SIN(__distanceLat/2))^2 + COS(RADIANS(__FromLat)) * COS(RADIANS(__ToLat)) * SIN((__distanceLong/2))^2
    VAR __y = SQRT(__a)
    VAR __x = SQRT(1 - __a)
    VAR __atan2 = 
        SWITCH(
            TRUE(),
            __x > 0, ATAN(__y/__x),
            __x < 0 && __y >= 0, ATAN(__y/__x) + PI(),
            __x < 0 && __y < 0, ATAN(__y/__x) - PI(),
            __x = 0 && __y > 0, PI()/2,
            __x = 0 && __y < 0, PI()/2 * (0-1),
            BLANK()
        )
    VAR __c = 2 * __atan2
    
    VAR earthRadius = 3958.8  -- Earth's radius in miles; use 6371 for kilometers
RETURN
    __c * earthRadius

来源:链接

3.将测量添加到表中并按小于或等于 50 英里进行筛选。

fixed


模拟数据:

地点 纬度 经度
纽约州纽约 40.7128 -74.0060
宾夕法尼亚州费城 39.9526 -75.1652
新泽西州纽瓦克 40.7357 -74.1724
康涅狄格州斯坦福 41.0534 -73.5387
新泽西州特伦顿 40.2171 -74.7429
宾夕法尼亚州阿伦敦 40.6084 -75.4902
新泽西州新不伦瑞克省 40.4862 -74.4518
纽约州扬克斯 40.9312 -73.8988
纽约州怀特普莱恩斯 41.0330 -73.7629
新泽西州普林斯顿 40.3573 -74.6672
© www.soinside.com 2019 - 2024. All rights reserved.