BI技巧丨利用Rank函数排名

news2024/7/6 19:27:27

实际业务场景中,除了各类条件计算、同环比计算以外,排名也是比较常见的问题,我们经常需要使用Rankx函数来进行某些TopN计算等。

微软新推出的开窗函数Rank,可以说是对排名问题的一次优化,也解决了一些之前Rankx函数的坑点。

Rank函数基本语法

RANK ( [<ties>][, <relation>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>] )

参数介绍:

ties:可选项,DENSE或SKIP,相同值的排名处理。

relation:可选项,排名依据的表或表表达式。

orderBy:可选项,排序依据,如果省略,第2参数需绑定。

blanks:可选项,处理空值排名位置使用。

partitionBy:可选项,分区定义,参照SQL的开窗分区即可。

matchby:可选项,定义匹配数据和标识当前行的列的语句。

PS:

看起来参数很多,实际上我们日常中用到第2参数和第3参数的频率较高,其他参数一般是为了处理某些特殊场景时使用。

先来看看本期的案例数据:



案例数据共计3张表,产品表、分店表以及事实表,将其导入到PowerBI中,模型关系如下:

添加基础度量值:

销售金额:

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

销售成本:

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

销售利润:

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

销售单价:

001.Price = 
SUM ( 'Dim_Product'[Price] )

销售单位成本:

002.Cost = 
SUM ( 'Dim_Product'[Cost] )

到这里,我们的准备工作完成,接下来我们来看看在不同的场景中,Rank函数的表现。

①.浮点运算

浮点运算指的是因为数值小数位过长,而导致排名发生错乱的情况,比如,我们添加如下代码:

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

其结果如下图:

可以看到有很多依据值不同的维度,排名却是相同的,之前我们的处理方式如下:

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

解决的思路是利用ROUND函数将依据值处理成固定位数,来避免浮点计算差。

而有了Rank函数之后,我们无需考虑这种情况。

006.ProfitRank = 
RANK ( ALLSELECTED ( 'Dim_Store' ), ORDERBY ( [003.SalesProfit], DESC ) )

结果如下:

②.并列排名

实际场景中,经常会出现并列排名的情况,一般情况的处理办法是发现并列排名,则进行加权处理。

例如,我们现在根据销售价格,对产品进行排序。

003.RankxPrice = 
RANKX ( ALLSELECTED ( 'Dim_Product' ), [001.Price],, ASC )

结果如下:

为了解决并列排名,我们选择将产品单位成本进行加权。

004.RankxPriceCost = 
RANKX (
    ALLSELECTED ( 'Dim_Product' ),
    [001.Price]
        + RANKX ( ALLSELECTED ( 'Dim_Product' ), [002.Cost],, ASC ) / 10000,
    ,
    ASC
)

结果如下:

写法上对性能是有损耗的,有了Rank函数后,我们可以换一种写法。

005.RankPriceCost = 
RANK (
    ALLSELECTED ( 'Dim_Product' ),
    ORDERBY ( [001.Price], ASC, [002.Cost], ASC )
)

结果如下:

写法上对比Rankx的处理方式,无疑是简洁了很多。

PS:

擅长SQL的小伙伴不难发现,微软就是将SQL中的Rank函数移植到了DAX中,写法上有差异,其内核基本相同。

③.性能方面

我们来分别比较一下两个场景中,Rankx函数和Rank函数的执行性能。

肉眼上可见,在处理浮点运算问题上,二者的差异并不大。

在处理并列排名的问题上,Rank函数的性能是高于Rankx函数的。

除了上述的3个问题之外,还有相关的绝对排名、相对排名以及组内排名等,白茶这里就不赘述了,感兴趣的小伙伴可以自己动手测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二分归并法将两个数组合并

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> main() {int a[5] {1,3,4,5,6};int b[4] {2,7,8,9};int c[9];int m0, n0,k0;while (m < 5 && n < 4){if (a[m] < b[n]){c[k] a[m];//谁小谁先进数组m; k;}else{c[k] b[n];k; n;}}while (m <…

flask 实践

flask框架研究&#xff1a; https://blog.csdn.net/shifengboy/article/details/114274271 https://blog.csdn.net/weixin_67531112/article/details/128256170 实现下载文件功能 vim test.py import io from flask import Flask, send_fileapp Flask(__name__) app.route(/…

【Acwing167】木棒(dfs+剪枝)超级详细题解!

题目描述 统一说明 本题思路来源于acwing算法提高课 木棍指题目输入数据所指的东西 木棒指最后由木棍拼接而成的最长的东西 看本文需要准备的知识 1.dfs基本思想 2.对“剪枝”这个词汇有一个基本的认识即可 整体分析 这个题目最终是求木棒的最短长度&#xff0c;所以我…

什么是合成数据?

合成数据是在计算机上生成的信息&#xff0c;用于增强或替换真实数据&#xff0c;以改进 AI 模型、保护敏感数据并减轻偏见。 将大量数据对准人类&#xff0c;你会得到信息过载。但是&#xff0c;如果你对计算机做同样的事情&#xff0c;你会得到机器学习模型&#xff0c;当你…

网络协议--TCP:传输控制协议

17.1 引言 本章将介绍TCP为应用层提供的服务&#xff0c;以及TCP首部中的各个字段。随后的几章我们在了解TCP的工作过程中将对这些字段作详细介绍。 对TCP的介绍将由本章开始&#xff0c;并一直包括随后的7章。第18章描述如何建立和终止一个TCP连接&#xff0c;第19和第20章将…

J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署

会议OA单体项目Windows部署spa前后端分离项目Windows部署 1.会议OA单体项目Windows部署&#xff08;以实施的角度&#xff09; 将项目放入webapp&#xff0c;项目能够访问: 首先拿到war包和数据库脚本&#xff0c;并检查是否有什么问题。 如何查看项目报错信息&#xff08;当你…

2015年亚太杯APMCM数学建模大赛B题城市公共交通服务水平动态评价模型求解全过程文档及程序

2015年亚太杯APMCM数学建模大赛 B题 城市公共交通服务水平动态评价模型 原题再现 城市公共交通服务评价是城市公共交通系统建设和提高公共交通运营效率的重要组成部分。对于公交企业&#xff0c;管理和规划部门&#xff0c;传统公交车站、线路和换乘枢纽的规划数据只是基于主…

切割后面积最大的蛋糕

切割后面积最大的蛋糕 题记&#xff1a; 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff0c;其中&#xff1a; horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j …

探秘Spring的设计精髓,深入解析架构原理

序员与平庸的程序员之间的区别&#xff0c;是在于认为自己的代码重要还是数据结构更加重要。平庸的程序员眼里只有代码&#xff0c;优秀的程序员则关注数据结构及之前的关系。” 1、spring的设计理念 spring提供了一个轻量级的开发框架&#xff0c;抽象了实际开发中的很多共…

解决大模型“裸”奔,恒生打通落地金融“最后一公里”

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化的21世纪&#xff0c;技术的每一次进步都能引发行业的巨大变革。进入2023年&#xff0c;大模型无疑是金融数智化升级的关键变革力量。无论是高频交易、风险管理&#xff0c;还是金融咨询和客户服务&#xff0c;大模型都…

【Linux】虚拟机项目部署与发布

目录 一、Linux部署单机项目 1.1 优缺点 1.2 将项目共享到虚拟机 1.3 解压后将war包放入tomcat 1.4 数据库导入脚本 1.5 Tomcat启动项目 二、部署前后端分离项目 2.1 准备工作 2.2 部署SPA项目 2.2.1 nginx反向代理 2.2.2 SPA项目宿主机访问 一、Linux部署单机项目…

【Unity精华一记】特殊文件夹

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

CMMI/ASPICE认证咨询及工具服务

服务概述 质量专家戴明博士的名言“如果你不能描述做事情的过程&#xff0c;那么你不知道你在做什么”。过程是连接有能力的工程师和先进技术的纽带&#xff0c;因此产品开发过程直接决定了产品的质量和研发的效率。 经纬恒润可结合多体系要求&#xff0c;如IATF16949\ISO26262…

S7-200 SMART与ABB ACS580变频器进行MODBUS RTU通信的具体方法示例

S7-200 SMART与ABB ACS580变频器进行MODBUS RTU通信的具体方法示例 1. ABB ACS580变频器一侧的设置:

[17]JAVAEE-HTTP协议

目录 一、什么是HTTP协议 什么时候会用到HTTP协议&#xff1f; HTTP协议的工作流程 二、HTTP的报文格式 抓包 HTTP请求报文格式 1.首行 2.header 常见键值对&#xff1a; 3.空行 4.正文&#xff08;body&#xff09;&#xff08;有的时候可以没有&#xff09; HTTP…

数据挖掘神器Orange初步使用

文章目录 安装示例项目展示鸢尾花数据 安装 可以在官网下载&#xff0c;地址为Orange&#xff0c;如果已经装了Anaconda&#xff0c;则可在Anaconda Navigator中找到一个非常猥琐的图标&#xff0c;下面写着Orange3&#xff0c;可以点击Install&#xff0c;装完之后点Launch就…

软考系统架构师知识点集锦六:项目管理

一、考情分析 二、考点精讲 2.1进度管理(时间管理) 进度管理:为了确保项目按期完成所需要的管理过程。 2.1.1过程 [WBS分解的基本要求] WBS的工作包是可控和可管理的&#xff0c;不能过于复杂。任务分解也不能过细&#xff0c;一般原则WBS的树形结构不超过6层。每个工作包要…

文件上传预览下载

文件上传的表单必须满足三个条件: 1.表单组件标签只能用:<input type"file" value"xxx">会自动弹框让用户选择文件 2.请求方式只能用post 3.表单编码格式只能用:mutipart/form-data 根据HTTP协议规定,浏览器每次向后台提交参数,都会对参数进行统一…

selenium工作原理和反爬分析

一、 Selenium Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一&#xff0c;支持并行测试执行。Selenium通过使用特定于每种语言的驱动程序支持各种编程语言。Selenium支持的语言包括C#&#xff0c;Java&#xff0c;Perl&#xff0c;PHP&#xff0c;Python和Ru…

编程实例:多人同时计时计费管理系统软件,可适用于钓场计时等管理

编程实例&#xff1a;多人同时计时计费管理系统软件&#xff0c;可适用于钓场计时等管理 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502 1、使用该编程工具开发的多人计时计…