美文网首页BI学习笔记
BI技巧丨RANKX浮点运算

BI技巧丨RANKX浮点运算

作者: Fabric丨白茶 | 来源:发表于2022-12-09 10:42 被阅读0次

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

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

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

案例数据:

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

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

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

构建基础指标:

1.销售金额:

001.SalesAmount = 
SUMX ( 'Fact_Sales', 'Fact_Sales'[Quantity] * RELATED ( Dim_Product[Price] ) )

2.销售成本:

002.SalesCost = 
SUMX ( 'Fact_Sales', 'Fact_Sales'[Quantity] * RELATED ( Dim_Product[Cost] ) )

3.销售毛利:

003.SalesProfit = 
[001.SalesAmount] - [002.SalesCost]

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

004.ProfitRankx = 
IF (
    HASONEFILTER ( Dim_Store[City] ),
    RANKX ( ALLSELECTED ( 'Dim_Store' ), [003.SalesProfit] )
)

展示效果如下:

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

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

问题描述:

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

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

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

因此解决办法有两种:

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

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

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

修改RANKX度量值如下:

005.ProfitRankxAmend = 
IF (
    HASONEFILTER ( Dim_Store[City] ),
    RANKX ( ALLSELECTED ( 'Dim_Store' ), ROUND ( [003.SalesProfit], 2 ) )
)

展示效果如下:

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


相关文章

  • BI技巧丨RANKX浮点运算

    RANKX这个函数,白茶之前已经写过很多期了,本期是对RANKX函数一个细节问题的补充。 我们常见的数据类型有很多...

  • Lecture 5

    2.6 浮点运算方法和浮点运算器 2.6.1 浮点加法、减法运算 2.6.2 浮点乘法、除法运算规则 2.6.3 ...

  • Python的整数与浮点数

    整数和浮点数混合运算的结果是浮点数整数运算中

  • iOS开发浮点数计算精度问题

    1、浮点数运算带来的问题 在日常工作中涉及到浮点数(float、double)的运算 2、浮点数运算精度的解决方案...

  • BI技巧丨RankxYoY

    群友:PowerBI可以实现两年的排名差异么?白茶:可以!安排! 本期的问题,来自于群内小伙伴的一个实际应用场景。...

  • flops

    FLOPS(即“每秒浮点运算次数”,“每秒峰值速度”),是“每秒所执行的浮点运算次数”(floating-poin...

  • 有关FLOPS的定义与计算

    FLOPS(即“每秒浮点运算次数”,“每秒峰值速度”),是“每秒所执行的浮点运算次数”(floating-poin...

  • JavaScript 浮点运算精度问题

    JavaScript 浮点运算精度问题 JavaScript浮点运算存在精度问题,本文阐述问题的产生原因以及解决方...

  • 修复js浮点运算bug

    /** 修复js浮点运算bug*/

  • javascript基础2运算符和if else switch

    js运算符为加减乘除,取余,浮点运算,其中浮点运算注意并不相等。 前置递增递减和后置递增递减 比较运算符 if判断...

网友评论

    本文标题:BI技巧丨RANKX浮点运算

    本文链接:https://www.haomeiwen.com/subject/ucuyortx.html