如何基于“时间维度”在每日计算视图中创建“历史记录”表

时间:2019-06-24 14:02:38

标签: hana hana-sql-script

我有非常HANA / SQLScript指定的问题。我需要基于带日期间隔的表格以脚本计算视图的形式为每天创建一个历史视图吗?

我尝试了使用“ _SYS_BI”和“ M_TIME_DIMENSION”的每个交叉连接,并且仅使用函数。

根据我的经验,交叉连接是累积总和的理想选择,但不适用于显示单个值。

HANA不允许将列用作表函数的输入参数。

标量函数也不能在计算视图中使用。我可以激活该视图,但是无法从中读取数据。即使函数独立工作正常:

业务合作伙伴折扣表:

 CREATE COLUMN TABLE "BP_DISCOUNT" ("BP_CODE" VARCHAR(50) NOT NULL ,
         "DATE" DATE L ,
         "DISCOUNT" DECIMAL(21,6);


insert into "BP_DISCOUNT" values('abc','20190101','0');
insert into "BP_DISCOUNT" values('abc','20190105','5');
insert into "BP_DISCOUNT" values('abc','20190110','10');

我想代替的功能:

CREATE FUNCTION bp_discountF (BP_Code varchar(50), Date_D date)
 RETURNS discount decimal(21,6)
 LANGUAGE SQLSCRIPT 
 SQL SECURITY INVOKER 
 AS
 BEGIN

 select  "DISCOUNT" into DISCOUNT
from "BP_DISCOUNT" d
where 
:BP_CODE = d."BP_CODE" and d."DATE"<= :DATE_D order by d."DATE" desc limit 1;
 END;

我的目标是创建一个视图,该视图根据最新值显示每一天的折扣值。 它必须采用脚本化计算视图的形式,才能将其加入更复杂的销售报告视图。

预期结果是将其加入BP和凭证日期:

...
'abc', '20190101', 0;
'abc', '20190102', 0;
'abc', '20190103', 0;
'abc', '20190104', 0;
'abc', '20190105', 5;
'abc', '20190106', 5;
'abc', '20190107', 5;
'abc', '20190108', 5;
'abc', '20190109', 5;
'abc', '20190110', 10;
'abc', '20190111', 10;
..

1 个答案:

答案 0 :(得分:0)

您可以这样尝试:

//MARK: UIGestureRecognizerDelegate
extension RangeSlider: UIGestureRecognizerDelegate {
    public override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return !(gestureRecognizer is UIPanGestureRecognizer)
    }
}

时间只是您需要的日期,为了方便起见,我选择了需要的日期。

在日期中,您可以从折扣表中获得每个日期的表,而从时间维度表中获得的日期则大于该表。

现在,您每次都希望使用最大日期,因为06.01.2019当然也大于01.01.2019,但是您希望在此日期引用05.01.2019。因此,您选择Max(DATE)并在pb_discount列表中的第二天05.01.2019之前的每一天获得01.01.2019。

由于您无法按折扣分组,因此您需要加入折扣,并应有所需的表。