Forum Discussion
Measuring Distance to find closest point between points from a single table
- 7 years ago
OK, I took AlBs code and Anonymouss last post and turned it into a measure. First, I recreated 'Route Information' to have 5 dates' worth of data, one date of which is missing 3 of the locations (Dt is literally just a list of 5 dates 1/14 - 1/18):
Route Information = UNION ( CROSSJOIN ( SUMMARIZE ( 'Table2 (2)', 'Table2 (2)'[MEMNO], 'Table2 (2)'[Post Code], 'Table2 (2)'[Lattitude], 'Table2 (2)'[Longitude] ), FILTER ( Dt, Dt[Date] < "1/18/18" ) ), CROSSJOIN ( SUMMARIZE ( FILTER ( 'Table2 (2)', NOT ( 'Table2 (2)'[MEMNO] IN { "A21200", "A22701", "B10500" } ) ), 'Table2 (2)'[MEMNO], 'Table2 (2)'[Post Code], 'Table2 (2)'[Lattitude], 'Table2 (2)'[Longitude] ), FILTER ( Dt, Dt[Date] = "1/18/18" ) ) )Then taking the working code, transformed it into a measure, keeping the Date filter (I'm probably not doing it the most efficient way using variables - I still have trouble getting ALLEXCEPT and KEEPFILTER working without trial and error):
DCH (Miles) = VAR HouseLatitude = MIN ( 'Route Information'[Lattitude] ) VAR HouseLongitude = MIN ( 'Route Information'[Longitude] ) VAR EarthCircumference = 3959 VAR P = DIVIDE ( PI (), 180 ) VAR House = SELECTEDVALUE ( 'Route Information'[MEMNO] ) VAR __Dt = SELECTEDVALUE ( 'Route Information'[Date] ) RETURN MINX ( FILTER ( ALL ( 'Route Information' ), 'Route Information'[MEMNO] <> House && 'Route Information'[Date] = __Dt ), VAR CinemaLatitude = 'Route Information'[Lattitude] VAR CinemaLongitude = 'Route Information'[Longitude] VAR _DistanceFromCurrentRough = 80 * SQRT ( POWER ( ( HouseLatitude - CinemaLatitude ), 2 ) + POWER ( ( HouseLongitude - CinemaLongitude ), 2 ) ) RETURN IF ( _DistanceFromCurrentRough <> 0, _DistanceFromCurrentRough ) )As you can see, on 1/18/18, the distance is different for M49418
Hi AlB - welcome to the conversation. I was about to light up the bat signal as I had reached the end of my skills.
My code was actually Anonymous's code, just cleaned up with DAX formatter, and putting FILTER in the proper places. I've been trying to break the code down myself to help with the second issue but having no luck. I assumed it was for a measure, but yes I suppose he could be looking for a calculated column (no offense to Anonymous, but many times on these forums people are looking for "columns" when they really mean a measure to be placed in a table/matrix so I default to measure instinctively).
David
I see, but the initial code had only one MINX( ). That's why I was asking, in case I was missing something
the bat signal? :smileyvery-happy:
- dedelman_clng7 years ago
Community Champion
AlB- sorry, by "original" I meant in the 5th post :smileyhappy:. It was at that point I started playing with the code.
Bat signal - I was going to @ some of the heavy hitters on these boards to come to the rescue :smileyvery-happy:
- AlB7 years ago
Community Champion
Ah ok, Then the question is for Anonymous: why the two MINXs( ) as opposed to only one MINX() you used initially?
If you have just a sample of the table with the important columns and a few rows including Latitude and Longitude I can probably give it a go with that.