lib(reshape2)
if (getProjName() != "dbconcile" || !exists("DT.anal.monthly"))
  setScience(proj="dbconcile", create=TRUE, subl=FALSE, load=TRUE)

## SET THIS 
GroupsUsing <- c("Orchard", "RED", "OSC")
GroupsUsing <- c("MONTH_TOTAL")


# -------------------

{
  kCols.Grp <- c("Grouping", "transac_type_abbr")
  kCols.DateGrp <- c("date", "Grouping", "transac_type_abbr")

  ## leave value.name as default, for now
  DT.Spot_ASR_Revenue.molt <-  setkeyIfNot(melt(DT.Spot_ASR_Revenue, id=kCols.Grp, variable.name="date"), kCols.DateGrp, organize=TRUE, verbose=FALSE) [!is.na(value)]
  DT.Spot_ASR_Streams.molt <-  setkeyIfNot(melt(DT.Spot_ASR_Streams, id=kCols.Grp, variable.name="date"), kCols.DateGrp, organize=TRUE, verbose=FALSE) [!is.na(value)]
  DT.Spot_ASR_GPU.molt     <-  setkeyIfNot(melt(DT.Spot_ASR_GPU,     id=kCols.Grp, variable.name="date"), kCols.DateGrp, organize=TRUE, verbose=FALSE) [!is.na(value)]

  ## Confirm Total and Grand Total
  for (DT in list(DT.Spot_ASR_Revenue.molt, DT.Spot_ASR_Streams.molt, DT.Spot_ASR_GPU.molt)) {
    stopifnot(DT[Grouping != "MONTH_TOTAL", lapply(.SD, sum), by=list(date, Grouping=="Grand Total", transac_type_abbr=="TOTAL"), .SDcols="value"][, mean(value) == value, keyby=kCols.DateGrp][, V1])
    stopifnot(DT[Grouping != "Grand Total", lapply(.SD, sum), by=list(date, Grouping=="MONTH_TOTAL", transac_type_abbr=="TOTAL"), .SDcols="value"][, mean(value) == value, keyby=kCols.DateGrp][, V1])
  }

  setnames(DT.Spot_ASR_Revenue.molt, "value", "revenue" )
  setnames(DT.Spot_ASR_Streams.molt, "value", "streams" )
  setnames(DT.Spot_ASR_GPU.molt,     "value", "gpu"     )

  DT.molt <- Reduce(merge, list(DT.Spot_ASR_Revenue.molt, DT.Spot_ASR_Streams.molt, DT.Spot_ASR_GPU.molt))
  DT.molt <- DT.molt[Grouping %in% GroupsUsing]
  DT.molt[date == "2013-01-01"]

  if (all(DT.molt[, equals(gpu, revenue/streams)])) {
    DT.molt[, gpu := NULL]
  } else  {
    warning ("gpu is not correct for DT.molt")
  }
}
