Forum Discussion

akarasick1's avatar
akarasick1
Frequent Visitor
6 years ago
Solved

Calculating minimum distance between XY coordinates

I'm trying to determine the closest point to any given point on an XY scatterplot. For simplicity, data is plotted on a 10x10 XY axis. How can I calculate the minimum distance from each point to any other point on the scatterplot? I'm trying to use something as follows, but to return the minimum sqrt:

 

Distance =
var x1 = SELECTEDVALUE(Locations[X])
var x2 = values(Locations[X])
var y1 = SELECTEDVALUE(Locations[Y])
var y2 = values(Locations[Y])
var result =
sqrt(power((x2-x1),2)+power((y2-y1),2))
return
result

  • Probably something like:

     

    Distance =
      VAR x1 = SELECTEDVALUE(Locations[X])
      VAR y1 = SELECTEDVALUE(Locations[Y])
      VAR __Table = 
        ADDCOLUMNS(
          FILTER(ALL(Locations),[X] <> x1 && [Y] <> y1)
          "distance",SQRT(POWER(([X] - x1),2) + POWER(([Y] - y1),2))
    RETURN
      MINX(__Table,[distance])
  • Well, that's what I was trying to do with that filter. You would need some kind of ID or Index. So if you had that identifier, just grab the identifier with a SELECTEDVALUE and then filter on that identifier <> that.

4 Replies

  • Greg_Deckler's avatar
    Greg_Deckler
    Community Champion

    Probably something like:

     

    Distance =
      VAR x1 = SELECTEDVALUE(Locations[X])
      VAR y1 = SELECTEDVALUE(Locations[Y])
      VAR __Table = 
        ADDCOLUMNS(
          FILTER(ALL(Locations),[X] <> x1 && [Y] <> y1)
          "distance",SQRT(POWER(([X] - x1),2) + POWER(([Y] - y1),2))
    RETURN
      MINX(__Table,[distance])
    • akarasick1's avatar
      akarasick1
      Frequent Visitor

      Thank you, Greg. This definitely works!

       

      The only tweak I'd need is that I can't exclude points that match the selected X or Y. Any way to just remove the given point and not all related x/y values?

      • Greg_Deckler's avatar
        Greg_Deckler
        Community Champion
        Well, that's what I was trying to do with that filter. You would need some kind of ID or Index. So if you had that identifier, just grab the identifier with a SELECTEDVALUE and then filter on that identifier <> that.