Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Paulus
Frequent Visitor

con 2 conjuntos de longitud de latitud

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

12 REPLIES 12
amitchandak
Super User
Super User

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)


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

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)


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

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

Cool @Paulus, me alegro de que lo tenemos, voy a publicar la solución a la galería de medidas rápidas para futuras referencias para todos.

@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...
az38
Community Champion
Community Champion

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


do not hesitate to give a kudo to useful posts and mark solutions as solution
LinkedIn
Greg_Deckler
Super User
Super User

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


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Hola Greg,
En Excel
ATAN2(COS(G5)*SIN(I5)-SIN(G5)*COS(I5)*COS(J5-H5); SIN (J5-H5)*COS(I5)), donde
G5-latitud 1, H5-longitude 1, I5-latitud 2, J5-longitud2, todo en radianes de la longitud de la latitud como número decimal.
El resultado utilizando DEGREES RETURNS un valor y, a continuación, utilice MOD(this value+360;360) para el rodamiento final.
Esto es lo que tengo en DAX, no está funcionando correctamente, básicamente debe evitar ATAN2.
Cojinetes de la parte de rodamiento
VAR lat1rad á RADIANS(PI()/180)*SELECTEDVALUE(Distance_Bearing[Latitude_1])
VAR lon1rad á RADIANS(PI()/180)*SELECTEDVALUE(Distance_Bearing[Longitude_1])
VAR lat2rad á RADIANS(PI()/180)*SELECTEDVALUE('To Locations'[Latitude_2])
VAR lon2rad á RADIANS(PI()/180)*SELECTEDVALUE('To Locations'[Longitude_2])
VAR lat2lat1 á RADIANS(PI()/180)*(lat2rad-lat1rad)
VAR lon2lon1 á RADIANS(PI()/180)*(lon2rad-lon1rad)
VAR var_a = SIN(lat2lat1/2)*SIN(lat2lat1/2)+
CUERPO (Lat1rad) * CUERPO (Lat2rad) *
SIN(lon2lon1/2)*SIN(lon2lon1/2)
VAR var_c = 2 * ASIN(MIN(1; SQRT(var_a)))
Cojinete VAR var_c*(180/PI())
devolución
rodamiento * 6371
**
Paul

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
    )


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

¿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


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.