使用olapR在R中进行MDX查询,用户输入用于MDX查询

使用olapR在R中进行MDX查询,用户输入用于MDX查询,r,mdx,olap,microsoft-r,R,Mdx,Olap,Microsoft R,各位, 我试图在R中创建一个函数,该函数将为MDX查询提供用户输入,R可以使用olapR包读取该查询。有趣的是,有几个变量不是常数;R功能的输入。 长话短说。为用户创建一个R函数来输入某些字段。在MDX文件中具有R输入用户字段。R为MDX文件使用适当的格式,以便与olapR一起使用。 希望有帮助 让我在下面展示 一,。 在我的R功能中,我有4个用户输入: WTGName <- "A001 (Cameron)" StartDate <- "2020-08-

各位,

我试图在R中创建一个函数,该函数将为MDX查询提供用户输入,R可以使用olapR包读取该查询。有趣的是,有几个变量不是常数;R功能的输入。 长话短说。为用户创建一个R函数来输入某些字段。在MDX文件中具有R输入用户字段。R为MDX文件使用适当的格式,以便与olapR一起使用。 希望有帮助

让我在下面展示

一,。 在我的R功能中,我有4个用户输入:

WTGName <- "A001 (Cameron)"
StartDate <- "2020-08-01"
EndDate <- "2020-08-15"
Measures.Name = c("ActivePowerAvg", "ActivePowerMax","AmbientTempAvg","AmbientTempMax", "NacelleTemp Avg", "NacelleTemp Max")
WTGName
#Create Measures ---------------------------------------------
if(NROW(Measures.Name) > 1){
  #loop measures into data.frame
  Measures <- c()
  for(a in Measures.Name){
    Meas <- paste0("[Measures].[", a, "]")
  
    Measures <- rbind(Measures, Meas)
  }
  Measures.Name <- data.frame(Measures)

#Look for last rows of Measures and remove comma
MeasRowCount <- NROW(Measures)
lastMeasure <- as.character(Measures[MeasRowCount,])
lastMeasure <- gsub(",","",lastMeasure)
lastMeasure <- data.frame(Measures = lastMeasure)

#relpace last Row of Measures data.frame with last measure
Measures <- Measures[-MeasRowCount,]
Measures <- data.frame(Measures = Measures)
Measures.Name <- rbind(Measures,lastMeasure)
}else{
  Measures.Name <- paste0("[Measures].[", Measures.Name, "]")
}
mdxQuery1 <- paste0("SELECT
                {", toString(Measures.Name[,1]),
                "} ON COLUMNS,
                NON EMPTY {
                Crossjoin(
                  Crossjoin(
                            [WTGVersions].[FarmName].children
                            ,[WTGVersions].[WTG Versions].[WTG]
                            )
                            ,[LocalDate].[Date].children
                            )
                } ON ROWS
                FROM [SHARP]
                WHERE (
                [WTG].[WTG].[WTG].&[", WTGName,"]
                ,[LocalDate].[Day Date].&[", StartDate,"T00:00:00]:[LocalDate].[Day Date].&[", EndDate, "T00:00:00]" 

#my error
result1 <- execute2D(olapCnn, mdxQuery1)
Error number: 80004005  The end of the input was reached.Error
Code = 80004005
Code meaning = Unspecified error
Source = Microsoft OLE DB Provider for Analysis Services.
Description = The end of the input was reached.
slicer1 <- paste0("WTG].[WTG].[WTG].&[", WTGName,"]")
slicer2 <- paste0("[LocalDate].[Day Date].&[", StartDate, 
              "T00:00:00]:[LocalDate].[Day Date].&[", EndDate, "T00:00:00]")
qry <- Query()
cube(qry) <- "[SHARP]"
columns(qry) <- c(toString(Measures.Name[,1]))
rows(qry) <- c("Crossjoin(
            Crossjoin(
            [WTGVersions].[FarmName].children
            ,[WTGVersions].[WTG Versions].[WTG]
            )
            ,[LocalDate].[Date].children
            )")
slicers(qry) <- c(toString(slicer1), toString(slicer2))

result1 <- executeMD(olapCnn, qry)

#my error
Error number: 80004005  Query (7, 54) The following syntax error occurred during parsing: Invalid token, Line 7, Offset 54, ].Error
Code = 80004005
Code meaning = Unspecified error
Source = Microsoft OLE DB Provider for Analysis Services.
Description = Query (7, 54) The following syntax error occurred during parsing: Invalid token, Line 7, Offset 54, ].
File.Location <- "D:\\AWP\\get_DATA_Functions\\AWP_MDX_Queries\\USA_GEN_DATA.mdx"

## *** Define what file contains the MDX query (exported from MS management Studio). *** 
QueryParameters <- c(paste0("@FarmName:", FarmName)
                   , paste0("@StartDate:",StartDate) 
                   , paste0("@EndDate:", EndDate)
                   )

QueryFileName <- File.Location

## ***  Open,read and close the file. Note: strip the firtst 3 characters due to the encoding of the file. TODO: improve the encoding problem *** 
connection <- file(QueryFileName, open = "r")
Filesize <- file.size(QueryFileName)
mdxQuery <- readChar(connection, nchars = 3) ## Strip encoding header
mdxQuery <- readChar(connection, nchars = (file.size(QueryFileName) - 3))
close.connection(connection)

# *** Replace keywords. TODO: Use a for each and a dictionary to optimize code *** 
for (val in QueryParameters){ 
mdxQuery <- str_replace_all(mdxQuery, str_split(val, ":", simplify = TRUE)[1], str_split(val, ":", simplify = TRUE)[2])
 }

## ***  Clean unwanted characters from text (leave new lines "\n") *** 
mdxQuery <- str_replace_all(str_replace_all(mdxQuery, "\n", " "), "'", "''")
result1 <- execute2D(olapCnn, mdxQuery)