Forum Discussion
Calculate nearest points by geographical coordinates
- 9 years ago
It seems, I figured how to do it
I made the user function
(reg,x_cast,y_cast)=>
let
Source = Table.SelectRows(shop,each [region]=reg),
formula = Table.AddColumn(Sorce, "Distance", each
6371 * 2 *Number.Asin(Number.Sqrt(Number.Power(Number.Sin((y_cast-[y_shop])*Number.PI/180/2),2)+Number.Cos(y_cast*Number.PI/180)*Number.Cos([y_shop]*Number.PI/180)*Number.Power(Number.Sin((x_cast-[x_shop])*Number.PI/180/2),2)))),
minimum = List.Min(formula[Distance]),
fnl_tbl= Table.SelectRows(formula,each [Custom]=minimum)
in
fnl_tbl
Yes , of course thats the best way as you don't have to group (and the tables to operate on are shorter).
How many times faster does it make your query?
Input data
Customer_table = 13 mln rows
Shop_table = 540 rows
The 1st method (with Group) was endless. After 20 minutes of waiting I stopped id
The 2nd method (with user function) takes about 7 seconds