Текущее время: Вт, июн 27 2017, 05:51

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: rlang в sap hana
СообщениеДобавлено: Вт, мар 04 2014, 16:07 
Начинающий
Начинающий

Зарегистрирован:
Пт, ноя 29 2013, 11:51
Сообщения: 13
пример использования языка rlang без библиотек на примере ABC анализа.


сначала создаем таблицу
Код:
CREATE COLUMN TABLE "R"."PRICE" ("CODE" NVARCHAR(20),
    "ART" NVARCHAR(20),
    "COLOR" NVARCHAR(20),
    "SIZE" NVARCHAR(20),
    "JAN" INTEGER CS_INT,
    "FAB" INTEGER CS_INT,
    "MAR" INTEGER CS_INT,
    "APR" INTEGER CS_INT,
    "MAY" INTEGER CS_INT,
    "JUN" INTEGER CS_INT,
    "JUL" INTEGER CS_INT,
    "AUG" INTEGER CS_INT,
    "SEN" INTEGER CS_INT,
    "OCT" INTEGER CS_INT,
    "NOV" INTEGER CS_INT,
    "DEC" INTEGER CS_INT) UNLOAD PRIORITY 5 AUTO MERGE ;

INSERT INTO"R"."PRICE"VALUES('Х0002748','LSS-114','черный','L',187583,199808,104646,236624,195156,133067,135994,202429,222394,273780,221541,394626);
INSERT INTO"R"."PRICE"VALUES('Х0002747','LSS-114','черный','M',148110,155382,194232,153623,136995,104904,94258,159147,170040,212846,129887,328977);
INSERT INTO"R"."PRICE"VALUES('Х0002749','LSS-114','черный','XL',134644,175216,116396,148735,175148,90440,77758,133213,171104,202742,186844,275007);
INSERT INTO"R"."PRICE"VALUES('Х0002750','LSS-114','черный','XXL',59099,84636,106513,54266,65838,60712,58999,53699,88121,80810,105075,122517);
INSERT INTO"R"."PRICE"VALUES('Х0002744','BS-224','бежевый','L',7657,48418,83989,72123,83414,45289,3798,93584,78591,82266,102831,100585);
INSERT INTO"R"."PRICE"VALUES('Х0002743','BS-224','бежевый','M',52435,48255,73551,52708,66523,47582,65748,77319,78594,72471,81089,85695);
INSERT INTO"R"."PRICE"VALUES('Х0002746','LSS-114','черный','S',46011,47511,41861,39329,48162,35224,55884,54381,63775,44435,63227,82022);
INSERT INTO"R"."PRICE"VALUES('Х0001306','AB–412','(пусто)','XXXL',9095,8940,null,60065,64289,53167,2178,56296,70890,79707,101258,112189);
INSERT INTO"R"."PRICE"VALUES('Х0002745','BS-224','бежевый','XL',2586,23450,60047,42130,51023,41297,43915,45157,49425,71593,63997,69660);
INSERT INTO"R"."PRICE"VALUES('Х0001395','HEB-999','(пусто)','L_II',10842,4608,19516,null,29816,20871,28114,47164,39465,69390,77794,70800);
INSERT INTO"R"."PRICE"VALUES('Х0002742','BS-224','бежевый','S',9739,28046,34001,24068,31123,20544,11207,46576,41561,37803,39008,48356);
INSERT INTO"R"."PRICE"VALUES('Х0001393','HEB-999','(пусто)','S_I',18431,null,38895,19516,20600,5150,24395,63156,40658,44453,51501,23582);
INSERT INTO"R"."PRICE"VALUES('Х0001390','AB–309','(пусто)','XXXL',23348,21391,null,23247,1266,null,null,16804,12374,14477,27713,55358);
INSERT INTO"R"."PRICE"VALUES('Х0000405','PO-303левый','левый','M',null,null,null,56548,16222,8995,19879,13660,10328,13771,27873,17498);
INSERT INTO"R"."PRICE"VALUES('Х0000408','PO-303правый','правый','M',null,null,null,54160,18832,10883,17769,19435,14592,10061,7439,19291);
INSERT INTO"R"."PRICE"VALUES('Х0000409','PO-303правый','правый','L',null,null,null,46109,22330,4220,13882,3776,5775,9773,27262,9729);
INSERT INTO"R"."PRICE"VALUES('Х0000406','PO-303левый','левый','L',null,null,null,41833,14501,10439,11661,3776,7996,13660,14935,14615);
INSERT INTO"R"."PRICE"VALUES('Х0000407','PO-303правый','правый','S',null,null,null,21233,7562,1999,13993,10328,5952,15992,13493,6219);
INSERT INTO"R"."PRICE"VALUES('Х0000404','PO-303левый','левый','S',null,null,null,27563,16446,4220,15881,14504,10283,5664,null,null);
INSERT INTO"R"."PRICE"VALUES('Х0000412','OA-303правый','(пусто)','ML',null,null,null,40445,3671,2222,5409,3477,5505,3864,3188,3767);
INSERT INTO"R"."PRICE"VALUES('Х0000411','OA-303левый','(пусто)','ML',null,null,null,35375,3671,4154,5409,3477,7340,1642,6955,1835);
INSERT INTO"R"."PRICE"VALUES('Х0000413','OA-303правый','(пусто)','SM',null,null,null,22722,10954,1932,3767,7147,5312,1835,1739,1835);
INSERT INTO"R"."PRICE"VALUES('Х0000410','OA-303левый','(пусто)','SM',null,null,null,22722,5506,1932,1835,3477,7147,7534,1739,2318);


далее пишем процедуру

Код:
SET SCHEMA R;

DROP TYPE T_ABC;
CREATE TYPE T_ABC AS TABLE (
      CODE NVARCHAR(20),
      DEC INTEGER,
      V3 INTEGER,
      V4 INTEGER,
      V5 NVARCHAR(20));

DROP PROCEDURE ABC;
CREATE PROCEDURE ABC(IN price "R"."PRICE",OUT result T_ABC)LANGUAGE RLANG AS
-- немного необычный синтаксис входящего параметра табличного типа
BEGIN
#в переменную абс записываем процентное значение категорий
   abc <-c(30,60)
#считываем колонку CODE и DEC из таблицы
   CODE=as.character(price$CODE)
   DEC= as.double(price$DEC)
#создаем структуру данных(матрица с разными типами)
   m1 =data.frame(CODE,DEC)
# сортировка в обратном порядке по декабрю
   k=with(m1, m1[order(-DEC), ])
#в новую третью по счету колонку записываем нарастающий итог
   k[,3]=cumsum(k$DEC)
#находим максимальное значение  параметр na.rm позволяет игнорировать null
   m= max(k$V3,na.rm = TRUE)
#расчет нарастающего итога в процентах
   k[,4]=k[,3]/m*100
# выбор категории
   k[,5]=ifelse((k[,4]<= abc[1]),'A',ifelse(  (k[,4]> abc[2]) ,'C','B'      ))
   result<-k
END;

DROP PROCEDURE Get_RESULT;
--процедура sql для вызова r
CREATE PROCEDURE Get_RESULT()LANGUAGE SQLSCRIPT AS
BEGIN
   PRICE= SELECT * FROM "R"."PRICE"  ;
   CALL ABC(:PRICE, T1);
   SELECT * FROM :T1;
END;
CALL Get_RESULT()


возможно кому- нибудь пригодится


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB