我是靠谱客的博主 自觉红牛,这篇文章主要介绍BI技巧丨RANKX浮点运算,现在分享给大家,希望可以做个参考。

RANKX这个函数,白茶之前已经写过很多期了,本期是对RANKX函数一个细节问题的补充。

我们常见的数据类型有很多,用来聚合的主要有三种数据类型:文本、整数、小数。

在大部分场合,小数是实际FACT数据中最为常见的数据类型,当小数与RANKX函数组合的时候,会产生意想不到的小问题。

案例数据:

案例数据比较简单,分别是产品表、分店表、销售事实表。

细心的小伙伴可能已经发现了,产品表中的价格和成本并不是整数,而是位数较多的小数。

将其导入到PowerBI中模型如下:

构建基础指标:

1.销售金额:

复制代码
1
2
3
001.SalesAmount = SUMX ( 'Fact_Sales', 'Fact_Sales'[Quantity] * RELATED ( Dim_Product[Price] ) )

2.销售成本:

复制代码
1
2
3
002.SalesCost = SUMX ( 'Fact_Sales', 'Fact_Sales'[Quantity] * RELATED ( Dim_Product[Cost] ) )

3.销售毛利:

复制代码
1
2
3
003.SalesProfit = [001.SalesAmount] - [002.SalesCost]

4.在分店表维度下,进行排名:

复制代码
1
2
3
4
5
6
004.ProfitRankx = IF ( HASONEFILTER ( Dim_Store[City] ), RANKX ( ALLSELECTED ( 'Dim_Store' ), [003.SalesProfit] ) )

展示效果如下:

看到这里小伙伴会说,这不是挺正常的嘛,没看出来哪里不对啊。

别急,我们添加一个切片器,来查看一下筛选的效果。

问题描述:

这里有一个很明显的问题,就是白茶RANKX函数内部使用的是ALLSELECTED函数,那么我们得到的排名结果应该是相对排名。

不添加切片器筛选的时候,总体排名和绝对排名是一样的,看起来没什么问题,但是一旦我们添加了切片器筛选,就会明显的看到,两个数值不同的度量值排名居然是一样的。

这个问题产生的原因在于,我们计算依据的物理列价格和成本是包含小数的,多组小数格式数据计算会产生浮点数据,因此在底层逻辑转化过程中会造成数据的精度丢失。

因此解决办法有两种:

1.数据进入到PowerQuery中时,我们进行数据截断;

2.在计算结果上进行数据截断。

白茶推荐大家使用第二种方式,毕竟在PowerQuery中修改数据格式再进行数据UAT测试的时候,是很容易造成上下游数据偏差的。

修改RANKX度量值如下:

复制代码
1
2
3
4
5
6
005.ProfitRankxAmend = IF ( HASONEFILTER ( Dim_Store[City] ), RANKX ( ALLSELECTED ( 'Dim_Store' ), ROUND ( [003.SalesProfit], 2 ) ) )

展示效果如下:

这里是白茶,一个PowerBI的初学者。

最后

以上就是自觉红牛最近收集整理的关于BI技巧丨RANKX浮点运算的全部内容,更多相关BI技巧丨RANKX浮点运算内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部