Power BI - поиск ближайшего местоположения на основе широты / долготы - PullRequest
0 голосов
/ 08 июня 2018

Я новичок в Power BI и DAX, поэтому надеюсь, что вы мне поможете.

У меня есть две таблицы без каких-либо взаимосвязей: Таблица A содержит широту / долготу и дату отслеживанияпозиции. Таблица B содержит значения широты / долготы и названия всех стадионов.

Я хочу найти ближайший стадион рядом с отслеживаемой позицией.Также, если возможно, я хочу проверить, была ли позиция в определенном радиусе этого стадиона.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 08 июня 2018

Вот один из возможных подходов:


Сначала вычислите минимальное расстояние с помощью функции Хаверсайна.

Добавьте это в качестве вычисляемого столбца в таблицу Tracked.

Nearest = 
    MINX(Stadiums,
    ROUND(2 * 3959 *
        ASIN(SQRT(
            SIN((Stadiums[Lat] - Tracked[Lat]) * PI()/360)^2 +
            COS(Tracked[Lat] * PI()/180) * COS(Stadiums[Lat] * PI()/180) *
                SIN((Stadiums[Lon] - Tracked[Lon]) * PI()/360)^2)), 1))

В этой формуле 3959 - радиус Земли в милях.

Теперь мы можем подбирать расстояния, чтобы найти ближайший стадион:

Stadium = CALCULATE(MAX(Stadiums[Stadium]),
              FILTER(Stadiums,
                  ROUND(2 * 3959 *
                      ASIN(SQRT(
                          SIN((Stadiums[Lat] - Tracked[Lat]) * PI()/360)^2 +
                          COS(Tracked[Lat] * PI()/180) * COS(Stadiums[Lat] * PI()/180) *
                          SIN((Stadiums[Lon] - Tracked[Lon]) * PI()/360)^2)), 1)
                  = Tracked[Nearest]))

Примечание : я округлил значения, чтобы избежать несоответствия из возможных ошибок с плавающей запятой.Это может или не может быть необходимым.

...