Power BI is turning 10! Tune in for a special live episode on July 24 with behind-the-scenes stories, product evolution highlights, and a sneak peek at what’s in store for the future.
Save the dateEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
基本场景:
当我们想要计算两个位置之间的距离时,我们需要知道这两个位置的坐标。
以下是示例数据:
我们现在拥有当前位置和目的地的坐标,使用以下的公式我们可以得到这些位置之间的距离。
距离 (千米) =
12742 -- 地球的直径 (千米).
* ASIN (
-- 返回一个数字的反正弦值.
SQRT (
--返回一个数字的平方根.
POWER (
-- 返回一个数字的幂.
SIN ( -- 返回给定角度的正弦值.
'表'[当前纬度] - '表'[目的地纬度] )
* PI () / 360,
2
) -- PI () 返回π的值, 3.14159265358979, 精确到15位.
+ COS ( -- 返回给定角度的余弦值.
'表'[当前纬度] * PI () / 180 )
* COS ( '表'[目的地纬度] * PI () / 180 )
* POWER ( SIN ( '表'[当前经度] - '表'[目的地经度] ) * PI () / 360, 2 )
)
)
结果如下:
参考文献:
https://learn.microsoft.com/zh-cn/dax/sqrt-function-dax
https://learn.microsoft.com/zh-cn/dax/asin-function-dax
https://learn.microsoft.com/zh-cn/dax/power-function-dax
https://learn.microsoft.com/zh-cn/dax/sin-function-dax
https://learn.microsoft.com/zh-cn/dax/cos-function-dax
https://learn.microsoft.com/zh-cn/dax/pi-function-dax
高级场景:
现在我们有两张表。
客户表包含一些客户的坐标。
商店表包含一些商店的坐标。
通过灵活使用上述计算距离的公式,我们可以得到每个用户最近的商店,也可以得到每个用户到最近商店的距离。
最近的商店 =
CALCULATE (
FIRSTNONBLANK ( '商店'[商店], 0 ),
TOPN (
1,
'商店',
12742
* ASIN (
SQRT (
POWER ( SIN ( '客户'[纬度] - '商店'[纬度] ) * PI () / 360, 2 )
+ COS ( '客户'[纬度] * PI () / 180 )
* COS ( '商店'[纬度] * PI () / 180 )
* POWER ( SIN ( '客户'[经度] - '商店'[经度] ) * PI () / 360, 2 )
)
), ASC
)
)
到最近商店的距离(千米) =
MINX (
'商店',
12742到最近商店的距离(千米) =
MINX (
'商店',
12742
* ASIN (
SQRT (
POWER ( SIN ( '客户'[纬度] - '商店'[纬度] ) * PI () / 360, 2 )
+ COS ( '客户'[纬度] * PI () / 180 )
* COS ( '商店'[纬度] * PI () / 180 )
* POWER ( SIN ( '客户'[经度] - '商店'[经度] ) * PI () / 360, 2 )
)
)
)
* ASIN (
SQRT (
POWER ( SIN ( '客户'[纬度] - '商店'[纬度] ) * PI () / 360, 2 )
+ COS ( '客户'[纬度] * PI () / 180 )
* COS ( '商店'[纬度] * PI () / 180 )
* POWER ( SIN ( '客户'[经度] - '商店'[经度] ) * PI () / 360, 2 )
)
)
)
结果如下:
作者:王杰
审核:Kerry Wang & Ula Huang
翻译:祝心如
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.