Текущее время: Чт, мар 28 2024, 12:33

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




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

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


сначала создаем таблицу
Code:
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);


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

Code:
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 + 3 часа


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

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


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

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