公众号:SAP Technical
本文作者:matinal
 

前言部分

大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

正文部分

先分析一下RANK的特点

1、此函数根据分区和排序子句计算数据集的排名。

2、当我们必须从源集中的多个记录或前N个或后N个记录中选择最新记录时,这将非常有用。

来自官网的介绍。

SQL的写法如下:

RANK() OVER (PARTITION BY <Colum Name> ORDER BY <Colum Name> ASC/DESC)

SAP HANA从初始版本支持RANK功能 - 如果我们要使用它作为SQL脚本的一部分

但是从SAP HANA SP9版本,我们在创建图形计算视图时将此功能作为一个附加节点。

使用举例及使用场景介绍

这里的情况是,我们有销售订单数据,其中,对于现有销售订单的每次更改,表中都将有一个新记录。

当我们在此表上构建报表时,我们必须选择最近的销售订单,即根据订购时间最近更改的销售订单。

1、首先创建表


CREATE COLUMN TABLE SAP_STUDENT.ORDERS_DATA_RANK (ORDER_NO INTEGER, CUST_NO NVARCHAR(10), PROD_NO NVARCHAR(10), QUANTITY INTEGER, PRICE INTEGER, ORDERED_TIME SECONDDATE) ​

2、然后给表里添加数据


INSERT INTO SAP_STUDENT.ORDERS_DATA_RANK VALUES(1234,’C01′,’P012′,10,5,’2015-09-10 08:03:12′); INSERT INTO SAP_STUDENT.ORDERS_DATA_RANK VALUES(1235,’C02′,’P023′,100,10,’2015-09-10 14:45:36′); INSERT INTO SAP_STUDENT.ORDERS_DATA_RANK VALUES(1236,’C03′,’P067′,80,20,’2015-09-15 21:23:56′); INSERT INTO SAP_STUDENT.ORDERS_DATA_RANK VALUES(1234,’C01′,’P012′,30,5,’2015-09-10 11:03:12′); INSERT INTO SAP_STUDENT.ORDERS_DATA_RANK VALUES(1234,’C01′,’P012′,50,5,’2015-09-12 08:03:12′); INSERT INTO SAP_STUDENT.ORDERS_DATA_RANK VALUES(1236,’C03′,’P067′,120,20,’2015-09-17 11:23:12′); ​

运行上述insert语句后,请运行以下select语句,以确保数据以正确的方式插入,如下所示。


SELECT * FROM SAP_STUDENT.ORDERS_DATA_RANK; ​

rank在sqlscript中使用场景

基于我们的场景,我们必须通过ORDER_NO分区我们的数据集,然后基于ORDERED_TIME列以降序排列,以获得排在最近更改的销售订单的top(first)。

我们可以通过编写以下SQL语句来实现这一点,SQL语句根据PARTITION和ORDER BY子句计算RANK,并将秩分配为1,2,3等。

一旦我们在RANK函数的帮助下排列数据集,我们可以将RANK值过滤为“1”,以将最近的记录获取到输出。

RANK()使用图形计算视图:

现在让我们看看如何在创建图形计算视图时使用rank节点实现同样的事情。

注意:此节点仅在SAP HANA SP9版本的图形计算视图中可用。

请按照以下步骤使用计算视图构建排名功能。

第一步:

确保我们在SAP HANA系统中创建了上述表并提供了数据。

注意:个人也可以使用自己的数据集来检查功能。

第二步:

让我们继续创建一个类型为'graphical'的新计算视图,并指定技术名称和标签等细节,如下所示。

请参阅“SAP HANA中的图形计算视图”获取计算视图的完整信息。

第三步:

我们可以在屏幕的左侧看到“Rank”节点。 单击该节点,再次在设计区域上单击,以将节点添加到我们的设计区域,如下所示。

第四步:

一旦节点添加到设计区域,让我们将所需的表添加到节点,并查看可用于排名节点的设置。

可用的设置有:

1、SORT DIRECTION

2、THRESHOLD

3、ORDER BY

4、PARTITION

5、Dynamic Partition Elements

6、Generate Rank Column

Sort Direction:

此选项用于根据我们定义的阈值获取顶部记录或底部记录。

我们在这里有两个选择,他们是

降序(前N):这从源集合中检索前N个记录,其中N是我们定义的阈值。

升序(底部N):这从源数据中检索底部N个记录,其中N是我们定义的阈值。

在我们需要最近更改的记录的情况下,我们将选择“降序(前N个)”选项。

Threshold:

该值由系统用于在计算RANK之后过滤结果数据集。 如果我们将它定义为“1”,系统只给出基于分区和顺序的第一个记录。

该阈值可以是“固定”值或用户输入参数。 在我们的例子中,我们将这个定义为“fixed”并赋值5。

ORDER BY:

此列用于在系统执行分区子句后执行Order By。

在我们的示例中,我们需要根据ORDERED_TIME列以降序排列销售订单,因此我们将在Order By列中添加ORDERED_TIME。

Partition:

此列用于根据我们定义的列对源数据集进行分区。

这与我们在SQL脚本中编写RANK函数相同。 对于我们的场景,分区列将是“ORDER_NO”。

我们可以添加分区列与右侧的“添加”按钮的帮助。

Dynamic Partition Elements:

如果要在此模型上运行查询时,基于我们选择的列执行分区操作,则需要选中此选项。

Generate Rank Column:

如果我们需要在输出中将rank作为附加列,那么应该选择此选项。

完成Rank节点所需的所有设置后,屏幕将如下所示。

注意:在我们将列添加到“按订单排序”和“分区”部分之前,应该选择列到输出,如下所示。

第五步:

如果我们看看秩节点的输出,我们可以看到,秩已经完全计算,但除了1之外,还有其他记录。

这是因为我们选择了阈值为“5”,这意味着对于每个分区和顺序,我们得到前5个记录到输出。

现在我们可以添加另一个projection,并对'排名列'应用过滤器为'1',这样我们只有前1条记录。

我们将阈值保持为“5”,只是为了向您展示等级列在输出中的外观。

如果我们不需要多于一个记录到输出,建议对排序节点本身的数据进行过滤。

所以在我们的场景中,我们可以将阈值保持为'1'。

第六步:

让我们继续向设计区域添加投影,选择输出所需的列,并将'Rank_Column'的过滤器应用于'1',如下所示。

第七步:

让我们将列添加到输出并定义属性和度量,如下所示。

第八步:

成功激活计算视图后,数据预览应生成以下数据集,其中每个销售订单都有单个记录(最近修改)。

因此,我们已成功地实现了使用作为SAP HANA中图形计算视图的一部分的排名节点的排名函数。

结束。

【HANA系列】SAP HANA计算视图中的RANK使用方法的更多相关文章

  1. 【HANA系列】SAP HANA跟我学HANA系列之创建计算视图一

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA跟我学HANA系 ...

  2. 【HANA系列】SAP HANA跟我学HANA系列之创建属性视图一

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA跟我学HANA系 ...

  3. 【HANA系列】SAP HANA跟我学HANA系列之创建分析视图一

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA跟我学HANA系 ...

  4. mvc的视图中显示DataTable的方法

    mvc的视图中显示DataTable的方法: 不断的循环画出table @{ ViewBag.Title = "ShowDataTable"; } @using System.Da ...

  5. 【SAP HANA】SAP HANA开篇(1)

    有幸当前工作能够接触到SAP S/4,能够接触到史上无敌的HANA内存数据库.HANA的技术我就不多讲了,感兴趣的人可以去百度一下.当然,有人想在本机安装HANA来学习,但前提是你得有128G内存以上 ...

  6. MVC视图中Html.DropDownList()辅助方法的使用

    我们先在控制器中准备好一个SelectList类型,然后通过ViewBag.List传入视图中.SelectList类型是ASP.NET MVC专门为列表有关的HTML辅助方法提供选项的,例如,Htm ...

  7. MFC中 在SDI模式下的视图中添加按钮的方法

    在单文档视图(SDI)结构中,视图一般用来显示数据.但是,有时也希望在视图中显示按钮或其他的控件,以满足用户的需要.下面是手动添加按钮并使按钮具有响应事件的功能的方法. 第一步:添加一个按钮      ...

  8. PyQt学习随笔:Model/View设计中支持视图中数据修改的方法及步骤

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 要支持视图中的数据可以修改,需要两个步骤: 1. 在视图中设置editTriggers属性支持在视图 ...

  9. SAP HANA 中的决策表(Decision Table)

    http://scn.sap.com/community/developer-center/hana/blog/2013/01/11/what-can-you-do-with-decision-tab ...

随机推荐

  1. CentOS系统下使用docker安装pinpoint

    准备:安装docker与docker-compose docker安装参考:https://www.cnblogs.com/zhi-leaf/p/10561501.html docker-compos ...

  2. 手摸手带你实现 小游戏<别踩白块儿 -- 内有游戏链接>

    别踩白块儿 使用(白鹭引擎)Egret编写的游戏 游戏地址 准备工作 了解白鹭引擎 并安装编写工具 安装游戏引擎 安装Egret Wing3 创建项目 创建项目可以选择不同版本的引擎,创建成功之后还可 ...

  3. golang之 Array(数组)

    目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...

  4. mysqli在php7中的使用

    mysqli这个库还是比较繁杂的,这其中又分mysqli ,mysqli_stmt,mysqli_result......一堆类,特别乱 这里奉上thinkphp5.1中使用mysqli扩展的查询用法 ...

  5. 如何让一个sprite绕一个点旋转,同时又可以实现指定旋转角度并慢慢停下的效果

    如何让一个sprite绕一个点旋转,同时又可以实现指定旋转角度并慢慢停下的效果 首先列出sprite围绕一个点旋转的公式,这个可以自己推导,假设sprite的起始位置为(x1,y1),围绕旋转的中心点 ...

  6. MySQL8.0.18通用版本安装

    环境说明: 系统版本:CentOS release 6.8 (Final) MySQL版本:mysql-8.0.18 内存:63G 空间:8T 1 配置本地yum仓库 这个只需要拷贝一个镜像,然后挂载 ...

  7. 查看服务的cpu gpu各类内存 cpu频率等等信息

    Linux版本cat /etc/redhat-releasecat /etc/lsb-release内核版本号cat /proc/version查看CPU信息(型号)cat /proc/cpuinfo ...

  8. Linux培训教程lgzip命令详解和使用实例

    gzip不仅可以用来压缩大的.较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式.据统计,gzip命令对文本文件有60%-70%的压缩率. 1.命令格式 ...

  9. 数据库范式以及ER图

    数据库范式包括第一.第二.第三以及BCNF范式,关于范式的探讨,博主在知乎上看见了一篇很不错的文章,分享文中,这边就不再做阐述.地址:https://www.zhihu.com/question/24 ...

  10. List集合遍历的三种方法

    测试数据: List<String> list = new ArrayList<String>(); list.add("java"); list.add( ...