Demo entry 3328793

Prova

   

Submitted by anonymous on Dec 15, 2015 at 11:24
Language: S. Code size: 20.5 kB.

library(sqldf)
library(RH2)  ## serve per avere le istruzioni in sqldf tipo la to_char, rownum, min..
library(stringr)
library(ROracle)
library(xlsx)
library(data.table)

##DWP03  connessione al DB
drv_DWP03 <- dbDriver("Oracle")
host="hp10.seat.it"
port=1521
serv="DEDICATED"
sid_DWP03="DWP03"
connect.string_DWP03 <- paste("(DESCRIPTION=","(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=", host, ")(PORT=", port, ")))","(CONNECT_DATA=(SID=", sid_DWP03,")(SERVER=", serv, ")))", sep = "")
con_DWP03 <- dbConnect(drv_DWP03, username = "SAS_RO_USER", password = "SAS_RO_USER",dbname=connect.string_DWP03)

# estraggo contratti e moduli B per costruire il consegnato di TUTTI i prodotti-famiglie 
qry_cntr_xteggi=paste0("select t1.dwxu_opec_cod, 
                       t1.dwy8_cntr_cod, 
                       decode(b.DWXF_SERV_COD,'G','GT',b.DWXP_CANL_COD) as canale,
                       t1.dwy7_camp_cicl_cod,
                       t1.dwy8_cntr_stat_cod, 
                       t1.dwxg_prod_cod, 
                       t1.dwy8_cnsg_val, 
                       t1.dwy8_acqs_val
                       from tdwy8_cntr_comm t1, tdwy3_asgn_comm b
                       where t1.dwy7_camp_cicl_cod in ('2013', '2014', '2015', '2016', '2017') and
					         t1.dwxu_opec_cod in ('A15T0AA0', 'H01AFA65', 'FWF9FAAF')
                             t1.dwy8_asgn_cod=b.dwy3_asgn_cod")
cntr_xteggi<-dbGetQuery(con_DWP03, qry_cntr_xteggi)
save(cntr_xteggi, file="~/report_solare/prove/cntr_xteggi.RData")

# dalla tabella dei contratti invece genero il consegnato dei prodotti AIR, SDM e GPM (prendendo l'acquisito nel ciclo precedente)
# comincio da AIR
qry_cntr_air=paste0("select dwxu_opec_cod,
                    dwy8_cntr_cod,
                    dwxp_canl_cod,
                    dwy7_camp_cicl_cod,
                    dwy8_cntr_stat_cod,
                    dwxg_prod_cod,
                    dwy8_cnsg_val,
                    dwy8_acqs_val
                    from cntr_xteggi
                    where dwxg_prod_cod in ('AIR', 'MSP')
                    order by dwxu_opec_cod, dwy7_camp_cicl_cod")
cntr_air <- sqldf(qry_cntr_air)

# altro modo (visto che sqldf è lentissimo!)
cntr_air<-cntr_xteggi[cntr_xteggi$DWXG_PROD_COD %in% c('AIR', 'MSP'),]
#sorto per opec-ciclo
cntr_air<-cntr_air[order(cntr_air$DWXU_OPEC_COD, cntr_air$DWY7_CAMP_CICL_COD),]
# prendo l'acquisito del contratto nel ciclo precedente come consegnato (in SAS con la funzione LAG)
cntr_air$acqs_lag<-c(NA, cntr_air$DWY8_ACQS_VAL[1:(length(cntr_air$DWY8_ACQS_VAL)-1)])
# se poi è il primo opec azzero il valore di consegnato appena costruito
FIRST<-!duplicated(cntr_air$DWXU_OPEC_COD)
cntr_air$cnsg<-ifelse(FIRST==TRUE, 0, cntr_air$acqs_lag)
cntr_air$acqs_lag<-NULL
cntr_air$DWY8_CNSG_VAL<-NULL

# stessa cosa su GPM
cntr_gpm<-cntr_xteggi[cntr_xteggi$DWXG_PROD_COD=='GPM',]
#sorto per opec-ciclo
cntr_gpm<-cntr_gpm[order(cntr_gpm$DWXU_OPEC_COD, cntr_gpm$DWY7_CAMP_CICL_COD),]
# prendo l'acquisito del contratto nel ciclo precedente come consegnato (in SAS con la funzione LAG)
cntr_gpm$acqs_lag<-c(NA, cntr_gpm$DWY8_ACQS_VAL[1:(length(cntr_gpm$DWY8_ACQS_VAL)-1)])
# se poi è il primo opec azzero il valore di consegnato appena costruito
FIRST<-!duplicated(cntr_gpm$DWXU_OPEC_COD)
cntr_gpm$cnsg<-ifelse(FIRST==TRUE, 0, cntr_gpm$acqs_lag)
cntr_gpm$acqs_lag<-NULL
cntr_gpm$DWY8_CNSG_VAL<-NULL

# infine su SDM
cntr_sdm<-cntr_xteggi[cntr_xteggi$DWXG_PROD_COD=='SDM',]
#sorto per opec-ciclo
cntr_sdm<-cntr_sdm[order(cntr_sdm$DWXU_OPEC_COD, cntr_sdm$DWY7_CAMP_CICL_COD),]
# prendo l'acquisito del contratto nel ciclo precedente come consegnato (in SAS con la funzione LAG)
cntr_sdm$acqs_lag<-c(NA, cntr_sdm$DWY8_ACQS_VAL[1:(length(cntr_sdm$DWY8_ACQS_VAL)-1)])
# se poi è il primo opec azzero il valore di consegnato appena costruito
FIRST<-!duplicated(cntr_sdm$DWXU_OPEC_COD)
cntr_sdm$cnsg<-ifelse(FIRST==TRUE, 0, cntr_sdm$acqs_lag)
cntr_sdm$acqs_lag<-NULL
cntr_sdm$DWY8_CNSG_VAL<-NULL

# unisco assieme i 3 dataset: insieme dei prodotti senza consegnato (hanno le stesse colonne)
prod_senza_cnsg<-rbind(cntr_air, cntr_gpm, cntr_sdm)

rm(cntr_air, cntr_gpm, cntr_sdm, cntr_xteggi)

# estraggo dati dalla tabella dei moduli B
qry_modb_xteggi=paste0("select t1.dwxu_opec_cod, 
                       t1.dwy8_cntr_cod, 
                       t1.dwyc_modb_numr_cod, 
                       decode(b.DWXF_SERV_COD,'G','GT',b.DWXP_CANL_COD) as canale,
                       t1.dwxg_prod_cod, 
                       t1.dwxl_prmk_cod, 
                       t1.dwxi_tpbl_cod, 
                       t1.dwxk_udac_cod,
                       t1.dwyc_cnsg_val as cnsg
                       from tdwyc_modb_comm t1, tdwy3_asgn_comm b
                       where t1.dwy7_camp_cicl_cod in ('2013', '2014', '2015', '2016', '2017') and
					         t1.dwxu_opec_cod in ('A15T0AA0', 'H01AFA65', 'FWF9FAAF') and
                             t1.dwy3_asgn_cod=b.dwy3_asgn_cod")
modb_xteggi<-dbGetQuery(con_DWP03, qry_modb_xteggi)
save(modb_xteggi, file="~/report_solare/prove/modb_xteggi.RData")

# dai modb genero il consegnato di tutti i contratti differenziato per ogni famiglia di prodotto
# creo raggruppamenti per famiglie prodotto
f_print<-c('ELN', 'TUT')
f_digital<-c('WEB', 'PCS', 'SFP', 'EUR', 'EBK', 'COU')
f_voice<-c('PPG', 'PPB')
f_terzi<-c('AIR', 'GPM', 'SDM')
f_others<-c('GPM', 'SDM')

f_dir<-c('BOL', 'SLF', 'PBI', 'PGO', 'PSP', 'PRI', 'PRB', 'MOP', 'PRG')
f_age<-c('LOG', 'T02', 'IEC', 'T03', 'TOL', 'VBO', 'WFI', 'PSL', 'GOO', 'SMM', 'MOB', 'PCW')
f_adv<-c('T04', 'T05', 'T06', 'T07', 'T08', 'RS1', 'SMA')
f_advf<-c('RS1', 'SMA')
f_advg<-c('T04', 'T05', 'T06')
f_advs<-c('T07', 'T08')

print<-ifelse(modb_xteggi$DWXL_PRMK_COD %in% f_print, 1, 0)
digital<-ifelse(modb_xteggi$DWXL_PRMK_COD %in% f_digital, 1, 0)
voice<-ifelse(modb_xteggi$DWXL_PRMK_COD %in% f_voice, 1, 0)
terzi<-ifelse(modb_xteggi$DWXL_PRMK_COD %in% f_terzi, 1, 0)
partn<-ifelse(modb_xteggi$DWXL_PRMK_COD=='AIR', 1, 0)
others<-ifelse(modb_xteggi$DWXL_PRMK_COD %in% f_others, 1, 0)

dir<-ifelse(modb_xteggi$DWXI_TPBL_COD %in% f_dir | modb_xteggi$DWXL_PRMK_COD=='EBK', 1, 0)
age<-ifelse(modb_xteggi$DWXI_TPBL_COD %in% f_age | modb_xteggi$DWXL_PRMK_COD %in% c('PCS', 'SFP', 'COU'), 1, 0)
adv<-ifelse(modb_xteggi$DWXI_TPBL_COD %in% f_adv, 1, 0)
advf<-ifelse(modb_xteggi$DWXI_TPBL_COD %in% f_advf, 1, 0)
advg<-ifelse(modb_xteggi$DWXI_TPBL_COD %in% f_advg, 1, 0)
advs<-ifelse(modb_xteggi$DWXI_TPBL_COD %in% f_advs, 1, 0)

modb_xteggi$cnsg_print<-modb_xteggi$CNSG*print
modb_xteggi$cnsg_digital<-modb_xteggi$CNSG*digital
modb_xteggi$cnsg_voice<-modb_xteggi$CNSG*voice
modb_xteggi$cnsg_terzi<-modb_xteggi$CNSG*terzi
modb_xteggi$cnsg_partn<-modb_xteggi$CNSG*partn
modb_xteggi$cnsg_others<-modb_xteggi$CNSG*others

modb_xteggi$cnsg_dir<-modb_xteggi$CNSG*dir
modb_xteggi$cnsg_age<-modb_xteggi$CNSG*age
modb_xteggi$cnsg_adv<-modb_xteggi$CNSG*adv
modb_xteggi$cnsg_advf<-modb_xteggi$CNSG*advf
modb_xteggi$cnsg_advg<-modb_xteggi$CNSG*advg
modb_xteggi$cnsg_advs<-modb_xteggi$CNSG*advs

modb_xteggi$cnsg_eln<-ifelse(modb_xteggi$DWXL_PRMK_COD=='ELN', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_web<-ifelse(modb_xteggi$DWXL_PRMK_COD=='WEB', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_ppg<-ifelse(modb_xteggi$DWXL_PRMK_COD=='PPG', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_air<-ifelse(modb_xteggi$DWXL_PRMK_COD=='AIR', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_eur<-ifelse(modb_xteggi$DWXL_PRMK_COD=='EUR', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_gpm<-ifelse(modb_xteggi$DWXL_PRMK_COD=='GPM', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_sdm<-ifelse(modb_xteggi$DWXL_PRMK_COD=='SDM', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_ppb<-ifelse(modb_xteggi$DWXL_PRMK_COD=='PPB', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_tut<-ifelse(modb_xteggi$DWXL_PRMK_COD=='TUT', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_ebk<-ifelse(modb_xteggi$DWXL_PRMK_COD=='EBK', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_cou<-ifelse(modb_xteggi$DWXL_PRMK_COD=='COU', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_pcs<-ifelse(modb_xteggi$DWXL_PRMK_COD=='PCS', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_spc<-ifelse(modb_xteggi$DWXL_PRMK_COD=='SPC', modb_xteggi$CNSG, 0)
modb_xteggi$cnsg_sfp<-ifelse(modb_xteggi$DWXL_PRMK_COD=='SFP', modb_xteggi$CNSG, 0)

# raggruppo per contratto 
totali<-aggregate(cbind(CNSG, cnsg_eln, cnsg_web, cnsg_ppg, cnsg_air, cnsg_eur, cnsg_gpm, cnsg_sdm, cnsg_ppb, cnsg_tut, cnsg_ebk, cnsg_cou, cnsg_pcs, cnsg_spc, cnsg_sfp,
                        cnsg_print, cnsg_digital, cnsg_voice, cnsg_terzi, cnsg_partn, cnsg_others,
                        cnsg_dir, cnsg_age, cnsg_adv, cnsg_advf, cnsg_advg, cnsg_advs) ~ DWXU_OPEC_COD + DWY8_CNTR_COD, data = modb_xteggi, FUN = sum)
save(totali, file="~/report_solare/prove/totali.RData")

rm(modb_xteggi, print, digital, voice, terzi, partn, others, dir, age, adv, advf, advg, advs)

# aggancio ai moduli B il consegnato ai contratti di AIR, GPM ed SDM dalla tabella fatta sopra
# dai prodotti senza consegnato prendo solo alcuni campi
prod_senza_cnsg_temp<-prod_senza_cnsg
prod_senza_cnsg_temp<-subset(prod_senza_cnsg_temp, select = c(DWY8_CNTR_COD, cnsg, DWXG_PROD_COD))
da_modb<-merge(totali, prod_senza_cnsg_temp, by.x=c("DWY8_CNTR_COD"),by.y=c("DWY8_CNTR_COD"), all.x=TRUE)

rm(prod_senza_cnsg_temp, prod_senza_cnsg, totali)

# ora posso ripristinare il consegnato per famiglia anche per GPM, SDM e AIR
da_modb$cnsg_air<-ifelse(da_modb$DWXG_PROD_COD=='AIR', da_modb$cnsg, 0)
da_modb$cnsg_gpm<-ifelse(da_modb$DWXG_PROD_COD=='GPM', da_modb$cnsg, 0)
da_modb$cnsg_sdm<-ifelse(da_modb$DWXG_PROD_COD=='SDM', da_modb$cnsg, 0)
da_modb$cnsg_terzi<-ifelse(da_modb$DWXG_PROD_COD %in% f_terzi, da_modb$cnsg, 0)
da_modb$cnsg_partn<-ifelse(da_modb$DWXG_PROD_COD=='AIR', da_modb$cnsg, 0)
da_modb$cnsg_others<-ifelse(da_modb$DWXG_PROD_COD %in% f_others, da_modb$cnsg, 0)
da_modb$CNSG<-ifelse(da_modb$DWXG_PROD_COD %in% f_terzi, da_modb$cnsg, da_modb$CNSG)
  
da_modb$DWXG_PROD_COD<-NULL
da_modb$cnsg<-NULL

# tolgo i valori missing (NA)
da_modb[is.na(da_modb$cnsg_air)==TRUE,"cnsg_air"]<-0
da_modb[is.na(da_modb$cnsg_gpm)==TRUE,"cnsg_gpm"]<-0
da_modb[is.na(da_modb$cnsg_sdm)==TRUE,"cnsg_sdm"]<-0
da_modb[is.na(da_modb$cnsg_terzi)==TRUE,"cnsg_terzi"]<-0
da_modb[is.na(da_modb$cnsg_partn)==TRUE,"cnsg_partn"]<-0
da_modb[is.na(da_modb$cnsg_others)==TRUE,"cnsg_others"]<-0

save(da_modb, file="~/report_solare/prove/da_modb.RData")

# Estraggo tutti i contratti dal 2013 (ciclo 2013 in avanti) fino alla data limite
limite='09-DEC-2015'

qry_tutti_cntr=paste0("select to_char(t1.dwy5_insr_dta, 'YYYYMMDD') as insr_dta,
                        t1.dwy8_cntr_cod,
                        t1.dwy4_modb_numr_cod,
                        t1.dwxu_opec_cod,
                        t1.dwxg_prod_cod,
                        t1.dwxl_prmk_cod,
                        t1.dwxi_tpbl_cod,
                        t1.dwxk_udac_cod,
                        b.dwxp_canl_cod,
                        b.dwxf_serv_cod,
                        t1.dwy7_camp_cicl_cod,
                        t1.dwy4_cntr_stat_cod,
                        t1.dwy4_modb_nvst_cod,
                        t1.dwy8_scor_cod,
                        t1.dwy4_cnsg_val,
                        t1.dwy4_cnsg_vap,
                        t1.dwy4_acqs_val, 
                        t1.dwy4_acqs_vap
                from tdwy4_fact_comm t1, tdwy3_asgn_comm b
                where to_char(t1.dwy5_insr_dta, 'yyyy')> '2012' and
                      t1.dwy7_camp_cicl_cod in ('2013', '2014', '2015', '2016', '2017') and
                      t1.dwxi_tpbl_cod not in ('LF1', 'SSD') and
                      t1.dwy3_asgn_cod=b.dwy3_asgn_cod and
                      t1.dwy5_insr_dta < TO_DATE(:1, 'DD-MON-YYYY') and
					  t1.dwxu_opec_cod in ('A15T0AA0', 'H01AFA65', 'FWF9FAAF')
                order by t1.dwxu_opec_cod, t1.dwy8_cntr_cod, t1.dwy5_insr_dta")

df_cntr<-dbGetQuery(con_DWP03, qry_tutti_cntr, data.frame(limite))

# trasformo la data inserimento da carattere a data
df_cntr$insr_dta<-as.Date(df_cntr$INSR_DTA, format="%Y%m%d")
df_cntr$INSR_DTA<-NULL

# metto a posto il canale GT
df_cntr$DWXP_CANL_COD<-ifelse(df_cntr$DWXF_SERV_COD=='G','GT',df_cntr$DWXP_CANL_COD)
table(df_cntr$DWXP_CANL_COD, df_cntr$DWXF_SERV_COD)
df_cntr$DWXF_SERV_COD<-NULL

# semplifico gli stati contratto
# cerco di costruire l'ultimo stato del contratto alla fine di ogni anno
df_cntr$ult_stato_cntr<-ifelse(df_cntr$DWY4_CNTR_STAT_COD %in% c('A', 'P', 'Y', 'V', 'W', 'ZO'),'A',
                            ifelse(df_cntr$DWY4_CNTR_STAT_COD=='Y' & df_cntr$DWY4_MODB_NVST_COD=='C','C',
                                   ifelse(df_cntr$DWY4_CNTR_STAT_COD %in% c('C', 'K', 'B', 'F', 'L', 'ZZ'),'C',
                                          ifelse(df_cntr$DWY4_CNTR_STAT_COD %in% c('R', 'O', 'U', 'T', 'ZR', 'ZU'),'R',NA))))
df_cntr$DWY4_MODB_NVST_COD<-NULL
df_cntr$DWY4_CNTR_STAT_COD<-NULL

## metodo per costruire FIRST e LAST sulla chiave opec-contratto
chiave=paste0(df_cntr$DWXU_OPEC_COD, df_cntr$DWY8_CNTR_COD)
df<-data.frame(chiave, FIRST=!duplicated(chiave), LAST=rev(!duplicated(rev(chiave))))
campi<-names(df_cntr)
df_cntr<-data.frame(df_cntr[,campi], first=df$FIRST, last=df$LAST) 

# elaborazioni sugli anni
df_cntr$acqs_2013 <- ifelse(format(df_cntr$insr_dta,"%Y")=="2013", df_cntr$DWY4_ACQS_VAL-df_cntr$DWY4_ACQS_VAP, 0)
df_cntr$acqs_2014 <- ifelse(format(df_cntr$insr_dta,"%Y")=="2014", df_cntr$DWY4_ACQS_VAL-df_cntr$DWY4_ACQS_VAP, 0)
df_cntr$acqs_2015 <- ifelse(format(df_cntr$insr_dta,"%Y")=="2015", df_cntr$DWY4_ACQS_VAL-df_cntr$DWY4_ACQS_VAP, 0)

ultimi<-df_cntr$last[TRUE] 
statoA<-ifelse(df_cntr$ult_stato_cntr=='A', 1,0)
df_cntr$ultimoA<-ultimi*statoA
statoR<-ifelse(df_cntr$ult_stato_cntr=='R', 1,0)
df_cntr$ultimoR<-ultimi*statoR
statoC<-ifelse(df_cntr$ult_stato_cntr=='C', 1,0)
df_cntr$ultimoC<-ultimi*statoC

# altre semplificazioni (da non fare nel programma definitivo - da valutare)
df_cntr$DWY4_MODB_NUMR_COD<-NULL
df_cntr$DWXH_SPRD_COD<-NULL
df_cntr$DWXF_SERV_COD<-NULL
df_cntr$DWY4_CNSG_VAL<-NULL
df_cntr$DWY4_CNSG_VAP<-NULL
#df_cntr$DWY4_ACQS_VAL<-NULL
#df_cntr$DWY4_ACQS_VAP<-NULL

#creo una chiave per opec-contratto-anno finalizzata all'ultimo stato contratto per anno
chiave2=paste0(df_cntr$DWXU_OPEC_COD, df_cntr$DWY8_CNTR_COD, ifelse(format(df_cntr$insr_dta,"%Y")=="2013",'2013',
                                                             ifelse(format(df_cntr$insr_dta,"%Y")=="2014",'2014', 
                                                             ifelse(format(df_cntr$insr_dta,"%Y")=="2015",'2015','altro'))))
df<-data.frame(chiave2, FIRST=!duplicated(chiave2), LAST=rev(!duplicated(rev(chiave2))))
campi<-names(df_cntr)
df_cntr<-data.frame(df_cntr[,campi], primo=df$FIRST, ultimo=df$LAST) 
rm(df)

# totali<-aggregate(cbind(acqs_2013, acqs_2014, acqs_2015) ~ DWXU_OPEC_COD + DWY8_CNTR_COD, data = df_cntr, FUN = sum)

# ora anche per anno (notare l'uso del campo ultimo)
ultimi<-df_cntr$ultimo[TRUE] 
statoA_13<-ifelse(df_cntr$ult_stato_cntr=='A' & format(df_cntr$insr_dta,"%Y")=="2013", 1,0)
df_cntr$ultimoA_13<-ultimi*statoA_13
statoR_13<-ifelse(df_cntr$ult_stato_cntr=='R' & format(df_cntr$insr_dta,"%Y")=="2013", 1,0)
df_cntr$ultimoR_13<-ultimi*statoR_13
statoC_13<-ifelse(df_cntr$ult_stato_cntr=='C' & format(as.Date(as.character(df_cntr$insr_dta)),"%Y")=="2013", 1,0)
df_cntr$ultimoC_13<-ultimi*statoC_13

statoA_14<-ifelse(df_cntr$ult_stato_cntr=='A' & format(df_cntr$insr_dta,"%Y")=="2014", 1,0)
df_cntr$ultimoA_14<-ultimi*statoA_14
statoR_14<-ifelse(df_cntr$ult_stato_cntr=='R' & format(df_cntr$insr_dta,"%Y")=="2014", 1,0)
df_cntr$ultimoR_14<-ultimi*statoR_14
statoC_14<-ifelse(df_cntr$ult_stato_cntr=='C' & format(as.Date(as.character(df_cntr$insr_dta)),"%Y")=="2014", 1,0)
df_cntr$ultimoC_14<-ultimi*statoC_14

statoA_15<-ifelse(df_cntr$ult_stato_cntr=='A' & format(df_cntr$insr_dta,"%Y")=="2015", 1,0)
df_cntr$ultimoA_15<-ultimi*statoA_15
statoR_15<-ifelse(df_cntr$ult_stato_cntr=='R' & format(df_cntr$insr_dta,"%Y")=="2015", 1,0)
df_cntr$ultimoR_15<-ultimi*statoR_15
statoC_15<-ifelse(df_cntr$ult_stato_cntr=='C' & format(as.Date(as.character(df_cntr$insr_dta)),"%Y")=="2015", 1,0)
df_cntr$ultimoC_15<-ultimi*statoC_15

# flaggo i contratti annullati nell'ultimo trimestre
# anzitutto flaggo quando le date inserimento sono comprese nel 4° trimestre
ult_trim_13<-ifelse((as.Date(as.character(df_cntr$insr_dta)) <= '2013-12-31') & (as.Date(as.character(df_cntr$insr_dta)) > '2013-09-30'), 1, 0)
ult_trim_14<-ifelse((as.Date(as.character(df_cntr$insr_dta)) <= '2014-12-31') & (as.Date(as.character(df_cntr$insr_dta)) > '2014-09-30'), 1, 0)
ult_trim_15<-ifelse((as.Date(as.character(df_cntr$insr_dta)) <= '2015-12-31') & (as.Date(as.character(df_cntr$insr_dta)) > '2015-09-30'), 1, 0)

# poi devo segnare quando il contratto è andato per la prima volta in stato C (in assoluto, non all'interno dell'anno)
chiave3<-paste0(df_cntr$DWY8_CNTR_COD, df_cntr$ult_stato_cntr)
dup<-!duplicated(chiave3)
df_cntr$canc_ult_trim_13<-dup*ult_trim_13*statoC_13
df_cntr$canc_ult_trim_14<-dup*ult_trim_14*statoC_14
df_cntr$canc_ult_trim_15<-dup*ult_trim_15*statoC_15

rm(ultimi, statoC_13, statoC_14, statoC_15, dup, statoA_13, statoA_14, statoA_15, statoR_13, statoR_14, statoR_15, 
   statoA, statoC, statoR, ult_trim_13, ult_trim_14, ult_trim_15, chiave, chiave2, chiave3)

# creo raggruppamenti per famiglie prodotto
df_cntr$print<-ifelse(df_cntr$DWXL_PRMK_COD %in% f_print, 1, 0)
df_cntr$digital<-ifelse(df_cntr$DWXL_PRMK_COD %in% f_digital, 1, 0)
df_cntr$voice<-ifelse(df_cntr$DWXL_PRMK_COD %in% f_voice, 1, 0)
df_cntr$terzi<-ifelse(df_cntr$DWXL_PRMK_COD %in% f_terzi, 1, 0)
df_cntr$partn<-ifelse(df_cntr$DWXL_PRMK_COD=='AIR', 1, 0)
df_cntr$others<-ifelse(df_cntr$DWXL_PRMK_COD %in% f_others, 1, 0)

df_cntr$dir<-ifelse(df_cntr$DWXI_TPBL_COD %in% f_dir | df_cntr$DWXL_PRMK_COD=='EBK', 1, 0)
df_cntr$age<-ifelse(df_cntr$DWXI_TPBL_COD %in% f_age | df_cntr$DWXL_PRMK_COD %in% c('PCS', 'SFP', 'COU'), 1, 0)
df_cntr$adv<-ifelse(df_cntr$DWXI_TPBL_COD %in% f_adv, 1, 0)
df_cntr$advf<-ifelse(df_cntr$DWXI_TPBL_COD %in% f_advf, 1, 0)
df_cntr$advg<-ifelse(df_cntr$DWXI_TPBL_COD %in% f_advg, 1, 0)
df_cntr$advs<-ifelse(df_cntr$DWXI_TPBL_COD %in% f_advs, 1, 0)

# metto a posto il MOB
df_cntr[df_cntr$DWXI_TPBL_COD=='MOB' & df_cntr$DWXK_UDAC_COD %in% c('PGMOB', 'PRM2'), 'age']<-0
df_cntr[df_cntr$DWXI_TPBL_COD=='MOB' & df_cntr$DWXK_UDAC_COD %in% c('PGMOB', 'PRM2'), 'dir']<-1

#salvo una copia
save(df_cntr, file="~/report_solare/prove/df_cntr.RData")

# ora valorizzo l'acquisito di ogni anno per famiglia prodotto


# raggruppo i dati a livello opec-contratto
totali<-aggregate(cbind(ultimoA, ultimoR, ultimoC, 
                        ultimoA_13, ultimoR_13, ultimoC_13,
                        ultimoA_14, ultimoR_14, ultimoC_14,
                        ultimoA_15, ultimoR_15, ultimoC_15, 
                        canc_ult_trim_13, canc_ult_trim_14, canc_ult_trim_15,
                        acqs_2013, acqs_2014, acqs_2015) ~ DWXU_OPEC_COD + DWY8_CNTR_COD, data = df_cntr, FUN = sum)

# aggiungo il canale associato al contratto (l'ultimo) e anche il ciclo
opec<-df_cntr[df_cntr$last==TRUE, "DWXU_OPEC_COD"]
contratto<-df_cntr[df_cntr$last==TRUE, "DWY8_CNTR_COD"]
canale<-df_cntr[df_cntr$last==TRUE, "DWXP_CANL_COD"]
ciclo<-df_cntr[df_cntr$last==TRUE, "DWY7_CAMP_CICL_COD"]
campi_t<-names(totali)
totali<-data.frame(totali[,campi_t], opec, contratto, canale, ciclo)





save(cntr, file="~/cntr.RData")
load("~/cntr.RData")
write.table(cntr,"~/report_solare/prove/cntr.txt",sep = ";", quote = FALSE)
# oppure

write.csv2(cntr, file="c:/Users/d5215/Downloads/cntr.txt", row.names = FALSE, quote=FALSE)







#esempi estrazione multicondizioni
cntr_tmp2<-df_cntr[which(df_cntr$DWXL_PRMK_COD=='WEB' & df_cntr$DWXI_TPBL_COD=='MOB'), c("DWXU_OPEC_COD", "DWY8_CNTR_COD", "DWXI_TPBL_COD", "DWXK_UDAC_COD") ]
#ora prendo gli opec con quel tipo di contratti
opec<-levels(as.factor(cntr_tmp2$DWXU_OPEC_COD))
cntr_tmp3<-df_cntr[which(df_cntr$DWXU_OPEC_COD %in% opec),]
cntr_tmp3$dir<-ifelse(cntr_tmp3$DWXI_TPBL_COD %in% dir | cntr_tmp3$DWXL_PRMK_COD=='EBK', 1, 0)
cntr_tmp3$age<-ifelse(cntr_tmp3$DWXI_TPBL_COD %in% age | cntr_tmp3$DWXL_PRMK_COD %in% c('PCS', 'SFP', 'COU'), 1, 0)
cntr_tmp3[cntr_tmp3$DWXI_TPBL_COD=='MOB' & cntr_tmp3$DWXK_UDAC_COD %in% c('PGMOB', 'PRM2'), "age"]<-0
cntr_tmp3[cntr_tmp3$DWXI_TPBL_COD=='MOB' & cntr_tmp3$DWXK_UDAC_COD %in% c('PGMOB', 'PRM2'), "dir"]<-1
cntr_tmp3[order(cntr_tmp3$DWXU_OPEC_COD, cntr_tmp3$DWY8_CNTR_COD, cntr_tmp3$INSR_DTA),]

un_opec<-cntr_tmp3[cntr_tmp3$DWXU_OPEC_COD=='BWR4GAAG',]


dbCommit(con_DWP03)
dbDisconnect(con_DWP03)

This snippet took 0.03 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).