Power BI与SQL计算结果不一致:如何正确使用POWER()、EXP()、LOG()?
问题描述
我有一个计算函数,在SQL和Power BI(DAX)中返回不同结果。计算式如下:
1 - power(0.9240, exp((-0.2201*((71/10)-7.036))+(0.2467*(0-0.5642))-(0.5567*((60/5)-7.222))+(0.4510*(log(13.5)-5.137))))
SQL中的执行语句:
SELECT 1 - power(0.9240, exp((-0.2201*((71/10)-7.036))+(0.2467*(0-0.5642))-(0.5567*((60/5)-7.222))+(0.4510*(log(13.5)-5.137))))
SQL返回正确值 0.0015,但Power BI中DAX表达式返回 0.0007783428。需修改DAX表达式的哪些部分,让POWER()、EXP()和LOG()的计算结果与SQL一致?
解决方案
DAX与SQL在函数定义和运算规则上存在两处关键差异,修改后即可匹配SQL结果:
- 替换
LOG()为LN():SQL中的LOG()默认是自然对数(以e为底),而DAX的LOG()默认是以10为底的对数,若要计算自然对数必须使用LN()函数,因此将log(13.5)改为LN(13.5)。 - 修正整数除法逻辑:DAX中两个整数相除会执行整数除法(结果取整),而SQL中多数数据库会自动转为浮点除法。需将除法中的任意一个操作数改为浮点数,比如把
71/10改为71/10.0,60/5改为60/5.0,确保运算结果为浮点数。
修改后的DAX表达式:
1 - POWER(0.9240, EXP((-0.2201*((71/10.0)-7.036))+(0.2467*(0-0.5642))-(0.5567*((60/5.0)-7.222))+(0.4510*(LN(13.5)-5.137))))
内容的提问来源于stack exchange,提问作者Conner
相关产品推荐
相关产品推荐

