zoukankan      html  css  js  c++  java
  • 【HANA系列】SAP HANA计算视图中的RANK使用方法

    公众号:matinal
    本文作者: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中图形计算视图的一部分的排名节点的排名函数。

    结束。

  • 相关阅读:
    在HTML中使用css3实现雪人动画效果
    不一样的函数防抖和节流
    2020全球C++及系统软件技术大会成功落下帷幕
    详解flex布局做骰子案例
    LeetCode-环形链表|+环形链表||
    03:成绩排序
    02:奇数单增序列
    谁考了第k名
    【23.59%】【hdu 5883】The Best Path
    【30.53%】【hdu 5878】I Count Two Three
  • 原文地址:https://www.cnblogs.com/SAPmatinal/p/11183624.html
Copyright © 2011-2022 走看看