Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
Hola
Necesito calcular el rodamiento en grados entre dos conjuntos de puntos de latitud/longitud en una fórmula DAX. Puedo hacer esto en Power Query, pero lo necesito en DAX.
Gracias.
Paul
No estoy seguro de rodamientos en dergee. Pero para la distancia se puede referir : https://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-h...
Gracias, de hecho esto es para la distancia, y funciona. Bearing parece otro asunto, sorprendentemente poco mencionado al respecto en DAX.
@Paulus - ¿Cómo es esto? PBIX está unido. Confirme que obtiene las respuestas correctas para sus datos.
b =
VAR __FromCity = SELECTEDVALUE('From City'[City])
VAR __ToCity = SELECTEDVALUE('To City'[City])
VAR __FromLat = LOOKUPVALUE('Table'[Latitude],'Table'[City],__FromCity)
VAR __ToLat = LOOKUPVALUE('Table'[Latitude],'Table'[City],__ToCity)
VAR __FromLong = LOOKUPVALUE('Table'[Longitude],'Table'[City],__FromCity)
VAR __ToLong = LOOKUPVALUE('Table'[Longitude],'Table'[City],__ToCity)
VAR __distanceLong = RADIANS(ABS(__ToLong - __FromLong))
VAR __x = COS(RADIANS(__ToLat)) * SIN(__distanceLong)
VAR __y = COS(RADIANS(__FromLat)) * SIN(RADIANS(__ToLat)) - SIN(RADIANS(__FromLat)) * COS(RADIANS(__ToLat)) * COS(__distanceLong)
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()
)
RETURN
DEGREES(__atan2)
Hola Greg,
Gracias.
Aún no, el resultado entre Kansas y St.Louis devuelve -6.5126..... debe ser 97 grados.
Paul
Creo que esto es todo. El PBIX adjunto coincide con mi archivo de Excel, publicará ambos.
Bearing (Degrees) =
VAR __FromCity = SELECTEDVALUE('From City'[City])
VAR __ToCity = SELECTEDVALUE('To City'[City])
VAR __FromLat = RADIANS(LOOKUPVALUE('Table'[Latitude],'Table'[City],__FromCity))
VAR __ToLat = RADIANS(LOOKUPVALUE('Table'[Latitude],'Table'[City],__ToCity))
VAR __FromLong = RADIANS(LOOKUPVALUE('Table'[Longitude],'Table'[City],__FromCity))
VAR __ToLong = RADIANS(LOOKUPVALUE('Table'[Longitude],'Table'[City],__ToCity))
VAR __distanceLong = (__ToLong - __FromLong)
VAR __y = COS(__ToLat) * SIN(__distanceLong)
VAR __x = COS(__FromLat) * SIN(__ToLat) - SIN(__FromLat) * COS(__ToLat) * COS(__distanceLong)
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()
)
RETURN
DEGREES(__atan2)
Bearing 2 = MOD([Bearing (Degrees)]+360,360)
Genial!, Gracias. He estado luchando con esto durante bastante tiempo, cavando como un agujero para mí, no estando en mi zona de confort.
Brevemente por qué lo necesito; entregas a puntos de entrega, muchos de ellos disponibles, ingeniero de servicio en su camino al trabajo, en su área de trabajo asignada, necesita recoger piezas de repuesto de un punto de entrega. El punto de caída más cercano puede ser decir 25 millas pero en dirección sur, mientras que su área de trabajo asignada está en el norte. Convierto los grados en algo así como 0-22,5 a N 22,6-66,5o NE, etc.
Paul
Hola @Paulus
No estoy seguro de lo que quieres decir exactamente, pero pruebe una solución @Greg_Deckler https://community.powerbi.com/t5/Quick-Measures-Gallery/Going-the-Distance/td-p/963267
Claro, ¿cuál es la fórmula para eso? Debería ser factible. Tengo uno para la distancia. https://community.powerbi.com/t5/Quick-Measures-Gallery/Going-the-Distance/td-p/963267
OK, modifiqué la fórmula de esta manera (abajo). Ya que tiene esto en Power Query, ¿hay alguna posibilidad de que pueda compartir puntos lat/long y los rodamientos que espera? ATAN2 se incluye en la fórmula siguiente, no hay razón para evitarlo. https://community.powerbi.com/t5/Quick-Measures-Gallery/ATAN2/td-p/963263
Bearing (Degrees) =
VAR __FromCity = SELECTEDVALUE('From City'[City])
VAR __ToCity = SELECTEDVALUE('To City'[City])
VAR __FromLat = LOOKUPVALUE('Table'[Latitude],'Table'[City],__FromCity)
VAR __ToLat = LOOKUPVALUE('Table'[Latitude],'Table'[City],__ToCity)
VAR __FromLong = LOOKUPVALUE('Table'[Longitude],'Table'[City],__FromCity)
VAR __ToLong = LOOKUPVALUE('Table'[Longitude],'Table'[City],__ToCity)
VAR __distanceLong = RADIANS(__ToLong - __FromLong)
VAR __x = COS(RADIANS(__ToLat)) * SIN(__distanceLong)
VAR __y = COS(RADIANS(__FromLat)) * SIN(RADIANS(__ToLat)) - SIN(RADIANS(__FromLat)) * COS(RADIANS(__ToLat)) * COS(__distanceLong)
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()
)
RETURN
MOD(
DEGREES(__atan2) + 360,
360
)
¿Estás usando esto?
El rodamiento del punto A al B, se puede calcular como,
β = atan2(X,Y),
donde, X X e Y son dos cantidades y se pueden calcular como:
X es tan 'b' pecado'
Y - cos á * sin áb – siná * Cuerpo * cuerpo * Cuerpo - L