Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

原作者:alvaro.tejadagalindo3

几天前,我开始思考亚马逊网页服务中的SAP HANA和R...据我所知,使用此类的结合可以在服务器上生成图形,而不用在HANA studio中进行...所以我对自己说,是否可以使用一条Linux的命令在email中发送在服务器上生成的图形?... 我要尝试一下...

我花了一些天想在我的SUSE中装X11...直到我发现这个服务器并不支持X11...这很令人沮丧但是没有人能阻止我实现这想法...我想过使用PDF构造器,因为它不需要X11...但是...进过一些研究...我发现Cairo library可以支持不使用用X11去创建图形...

如果你没有在亚马逊网页服务中安装过SAP HANA和R,看这篇文章When SAP HANA met R - First kiss.

接下来让我们来看一看我们需要做什么

安装 Cairo

zypper install cairo-devel

在R上安装Cairo library

>R

>install.packages("Cairo")

运行Rserver 服务器

R CMD Rserve --RS-port 6311 --no-save --RS-encoding "utf8"

使用那个启动Rserver的用户区创建一个文件夹并修改它的权限...

>chmod 777 Blag

现在我们去HANA studio

我们首先创建一个表TICKETS_BY_YEAR_MONTH.

然后我们创建一些SQL和R命令...

Create_and_Send_Graphics

drop procedure GetTicketsByYearMonth;

drop procedure Generate_Graphic;

drop procedure Get_Tickets;

 

CREATE PROCEDURE GetTicketsByYearMonth(IN var_year NVARCHAR(4),IN var_month NVARCHAR(2))

LANGUAGE SQLSCRIPT AS BEGIN

select count(bookid), carrid from sflight.snvoice

where year(fldate) = VAR_YEAR

  and month(fldate) = VAR_MONTH

group by carrid

into TICKETS_BY_YEAR_MONTH;

END;

 

CREATE PROCEDURE Generate_Graphic(IN tickets_year TICKETS_BY_YEAR_MONTH, OUT result TICKETS_BY_YEAR_MONTH)

LANGUAGE RLANG AS

BEGIN

setwd("/Blag")

library("Cairo")

tickets=as.integer(tickets_year$TICKETS)

carriers=as.character(tickets_year$CARRIERS)

Cairo(600,600,file="Tickets.png",type="png",bg="white")

barplot(tickets,names.arg=carriers,main="Tickets for December 2011")

dev.off()

command<-"uuencode Tickets.png Tickets.png | mail -s 'Tickets December Report' atejada@gmail.com"

system(command,intern=TRUE)

result<-data.frame(TICKETS=tickets,CARRIERS=carriers)

END;

CREATE PROCEDURE Get_Tickets()

LANGUAGE SQLSCRIPT AS

BEGIN

CALL GetTicketsByYearMonth('2011','12');

Tickets = SELECT * FROM TICKETS_BY_YEAR_MONTH;

CALL Generate_Graphic(:Tickets,TICKETS_BY_YEAR_MONTH);

END;

 

CALL Get_Tickets();

然后我们执行上面那段脚本,脚本所做的事是:

我们获得每年每月每架飞机票数的总和,我们把这个数据存到表中

我们读取这个数据创建出一个图表然后把它保存为an.png

我们把这个图表通过Email发送给自己