使用olapR在R中进行MDX查询,用户输入用于MDX查询
各位, 我试图在R中创建一个函数,该函数将为MDX查询提供用户输入,R可以使用olapR包读取该查询。有趣的是,有几个变量不是常数;R功能的输入。 长话短说。为用户创建一个R函数来输入某些字段。在MDX文件中具有R输入用户字段。R为MDX文件使用适当的格式,以便与olapR一起使用。 希望有帮助 让我在下面展示 一,。 在我的R功能中,我有4个用户输入:使用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-
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)