## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, error = FALSE, comment = "#>" ) ## ----setup, echo=FALSE-------------------------------------------------------- library(CohortIncidence) ## ----eval=FALSE--------------------------------------------------------------- # install.packages("remotes") # remotes::install_github("ohdsi/CohortIncidence") ## ----comment = ""------------------------------------------------------------- # Fetch DDL from package ddl <- CohortIncidence::getResultsDdl() cat(ddl) ## ----eval = FALSE------------------------------------------------------------- # connectionDetails <- DatabaseConnector::createConnectionDetails(dbms = "postgresql",server={Sys.getenv("server")}, port = Sys.getenv("port")) # # # to specify the target schema (the typical use case): # ddl <- SqlRender::render(CohortIncidence::getResultsDdl(), schemaName = "mySchema") # # # a work-around to provide a prefix to the result table, in case creating new schema is restricted # ddlPrefix <- SqlRender::render(CohortIncidence::getResultsDdl(), "schemaName.incidence_summary" = "mySchema.prefix_incidence_summary") # # con <- DatabaseConnector::connect(connectionDetails) # DatabaseConnector::executeSql(ddl) # DatabaseConnector::disconnect(con) # ## ----------------------------------------------------------------------------- t1 <- CohortIncidence::createCohortRef(id=1, name="Target cohort 1") o1 <- CohortIncidence::createOutcomeDef(id=1,name="Outcome 1, 30d Clean", cohortId =2, cleanWindow =30) tar1 <- CohortIncidence::createTimeAtRiskDef(id=1, startWith="start", endWith="end", endOffset=30) # Note: c() is used when dealing with an array of numbers, # later we use list() when dealing with an array of objects analysis1 <- CohortIncidence::createIncidenceAnalysis(targets = c(t1$id), outcomes = c(o1$id), tars = c(tar1$id)) subgroup1 <- CohortIncidence::createCohortSubgroup(id=1, name="Subgroup 1", cohortRef = createCohortRef(id=300)) # Create Design (note use of list() here): irDesign <- CohortIncidence::createIncidenceDesign(targetDefs = list(t1), outcomeDefs = list(o1), tars=list(tar1), analysisList = list(analysis1), subgroups = list(subgroup1)) # Render the design as JSON irDesign$asJSON(pretty = T) ## ----------------------------------------------------------------------------- irDesignWithStrata <- CohortIncidence::createIncidenceDesign( targetDefs = list(t1), outcomeDefs = list(o1), tars = list(tar1), analysisList = list(analysis1), subgroups = list(subgroup1), #add by age and by gender strata, but don't do by start year. strataSettings = CohortIncidence::createStrataSettings( byGender = T, byAge = T, ageBreaks = list(17, 34, 65), ageBreakList = list(list(25), list(65)) ) ) ## ----eval=FALSE--------------------------------------------------------------- # # buildOptions <- CohortIncidence::buildOptions(cohortTable = "demoCohortSchema.cohort", # cdmDatabaseSchema = "mycdm", # sourceName = "mysource", # refId = 1) # # # executeResults <- CohortIncidence::executeAnalysis(connectionDetails = connectionDetails, # incidenceDesign = irDesign, # buildOptions = buildOptions) ## ----------------------------------------------------------------------------- buildOptions <- CohortIncidence::buildOptions(cohortTable = "demoCohortSchema.cohort", cdmDatabaseSchema = "mycdm", resultsDatabaseSchema = "myresults", sourceName = "mysource", refId = 1) analysisSql <- CohortIncidence::buildQuery(incidenceDesign = as.character(irDesign$asJSON()), buildOptions = buildOptions) cat(analysisSql) ## ----eval=FALSE--------------------------------------------------------------- # # # if you didn't pass sourceName to buildOptions(), you can render it here # analysisSql <- SqlRender::render(analysisSql, "sourceName" = "OptumDOD") # analysisSql <- SqlRender::translate(analysisSql, "postgresql") # # cat(analysisSql) # # conn <- DatabaseConnector::connect(connectionDetails) # DatabaseConnector::executeSql(conn, paste0("DELETE FROM myresults.incidence_summary WHERE ref_id = ", buildOptions$refId$intValue())) # DatabaseConnector::executeSql(conn, analysisSql) # DatabaseConnector::disconnect(conn) # ## ----eval=FALSE--------------------------------------------------------------- # # # given the prior irDesign constructed from the previous example # buildOptions <- CohortIncidence::buildOptions(cohortTable = "demoCohortSchema.cohort", # cdmDatabaseSchema = "mycdm", # sourceName = "mysource" # useTempTables = T, # refId = 2) # # analysisSql <- CohortIncidence::buildQuery(incidenceDesign = as.character(jsonlite::toJSON(irDesign)), # buildOptions = buildOptions) # analysisSql <- SqlRender::translate(analysisSql, "postgresql") # # # if we are using temp tables, the steps to execute the analysis are # # 1) create result temp tables # # 2) execute the analysis query, placing the results into the temp table incidence_summary # # 3) Extract/copy the results from the temp tables # # 4) clean up temp tables # # conn <- DatabaseConnector::connect(connectionDetails) # # tempDDL <- SqlRender::translate(CohortIncidence::getResultsDdl(useTempTables=T), "postgresql") # DatabaseConnector::executeSql(conn, tempDDL) # DatabaseConnector::executeSql(conn, analysisSql) # # # In this example, copy to a permanent table from the temp table, but the results could be downloaded to CSV # exportSql <- SqlRender::translate("insert into mySchema.prefix_incidence_summary select * from #incidence_summary", "postgresql"); # DatabaseConnector::executeSql(conn, exportSql) # # or download the results to a dataframe # results <- DatabaseConnector::querySql(conn, SqlRender::translate("select * from #incidence_summary", "postgresql")) # # # use the getCleanupSql to fetch the DROP TABLE expressions for the tables that were created in tempDDL. # cleanupSql <- SqlRender::translate(CohortIncidence::getCleanupSql(useTempTables=T), "postgresql") # DatabaseConnector::executeSql(conn, cleanupSql) # # DatabaseConnector::dbDisconnect(conn) #