Wednesday, February 13, 2013

Un ejemplo brillante - SAP HANA, R y Shiny


Como ya deben saberlo...amo R...un impresionante y open souce lenguaje de programacion estadistico. Asi que hoy dia, decidi aprender algo nuevo utilizando R.

No hay muchos servidores web para R, pero hay uno que realmente me gusta, llamado Rook, el cual ya cubri en mi blog RSAP, Rook y ERP.

Hoy dia, comence a aprender uno que esta causando conmocion en la comunidad de R, llamado Shiny. Debo decirlo...me enamore de el a primera vista...

Asi que se preguntaran...que es tan bueno acerca de Shiny? Bueno...ademas del hecho de que te permite crear aplicacion web utilizando R...es completamente dinamico...lo cual significa que una vez que cambiar el valor de un parametro, el grafico y no toda la pagina web completa es recargada automaticamente...impresionante, no?

Asi que...cuando escribi sobre Ruby y SAP en mi blog Ruby se une a la fiesta de SAP HANA, intente emular la SE16 para ver las tablas del paquete SFLIGHT...esta vez...voy a hacer lo mismo pero con un pequenho cambio...la aplicacion va a permitirte escoger una tabla, pero tambien elegir cuantos registros quieres mostrar...

Asi que, que necesitamos? Simplemente...si no lo has hecho ya...instalar estos dos paquetes..."shiny" y "RODBC"...


Luego de esto, debemos crear una carpeta llamada Shiny y luego de esto crear una nueva llamada SAP_HANA_R (Esto es solo para estar mas organizados).

Ahora, debemos crear dos archivos R, llamados ui.R y server.R


ui.R
library("shiny")
library("RODBC")
 
ch<-odbcConnect("HANA_TK",uid="SYSTEM",pwd="manager")
odbcQuery(ch,"SELECT table_name from SYS.CS_TABLES_ where schema_name = 'SFLIGHT'")
tables<-sqlGetResults(ch)
odbcClose(ch)
 
shinyUI(pageWithSidebar(
 
  headerPanel("SAP HANA and R using Shiny"),
 
  sidebarPanel(
    selectInput("Table", "Choose a table:",
                choices = tables$TABLE_NAME),
    numericInput("Records", "Number of Records to view:", 10)
  ),
 
  mainPanel(
    tableOutput("view")
  )
))

server.R
library("shiny")
library("RODBC")
 
shinyServer(function(input, output) {
 
  output$view <- reactiveTable(function() {
    ch<-odbcConnect("HANA_TK",uid="SYSTEM",pwd="manager")
    schema_table<-paste("SFLIGHT.",input$Table,sep="")
    query<-paste("SELECT TOP",input$Records,"* FROM",schema_table)
    odbcQuery(ch,query)
    result<-sqlGetResults(ch)
    odbcClose(ch)
 
    head(result, n = input$Records)
  })
})

Cuando hemos terminado con estos dos archivos...podemos crear uno nuevo, solo para llamar a nuestra aplicacion.

Shiny_HANA.R
library(shiny)
setwd("C:/Blag/R_Scripts")
runApp("Shiny/SAP_HANA_R")

Tengan en cuenta que el setwd("C:/Blag/R_Scripts") es mi carpeta principal para scripts de R Script, puesto que setwd significa "Set Working Directory" (Establecer el directorio de trabajo)...

Cuando ejecutamos Shiny_HANA.R, el browser sera llamado mostrandonos los parametros y la tabla por defecto.


Como pueden ver, podemos escoger una nueva tabla si queremos.


Tambien podemos escoger cuantos registros queremos mostrar...



Espero que les guste... -:)

Saludos,

Blag.

No comments: