public class DataExporter
extends java.lang.Object
The format of the output data file, the delimiter, the date format to write the date values in can all be influenced by setting the appropriate options on this exporter.
If columns are specified, the data will contain the columns in the order in which they were specified. If a column is specified multiple times, only the first instance of the column will be inlcuded in the exported data.
If row filter criteria is provided, only rows that match the filter criteria will be returned. If there are multiple members from the same dimension specified, then the rows matching with any one of those members for that dimension will be returned. If the filter criteria specifies a member form the column dimension, then the row will be returned only if the member matches one of the selected column members.
Example call from Groovy to export data to a CSV file:
Cube cube = operation.application.getCube("Plan1") cube.createDataExporter().exportDataToFile("Level0DataWithDimHeader.csv")
Example call from Groovy to export data to a zip file:
Cube cube = operation.application.getCube("Plan1") cube.createDataExporter().exportDataToZipFile("Level0ZippedDataWithDimHeader.zip", "Level0DataWithDimHeader.csv")
Example call from Groovy to export filtered data to a CSV file in a particular file format using a specific date format and delimiter. In this example, only data for Employee 1 in year FY19 will be exported for the months of Jan, Feb and Mar:
Cube cube = operation.application.getCube("Plan1") cube.createDataExporter().setDateFormat("dd/MM/yyyy") .setDelimiter('|') .setColumnMemberNames(["Jan", "Feb", "Dec"]) .setRowFilterCriteria("Employee 1", "FY19") .setDataExportFormat(CELL_FORMAT) .setErrorFileName("Level0DataWithDimHeaderErrors.log") .exportDataToFile("Level0DataWithDimHeader.csv")
Example call from Groovy to export data based on metadata conditions. In this example, only data for Employees whose name starts with a J in year FY19 will be exported for the months of Jan, Feb and Dec:
Cube cube = operation.application.getCube("Plan1") cube.createDataExporter().setColumnMemberNames(["Jan", "Feb", "Dec"]).setRowFilterCriteria({RowData row -> (Member)row.rowTuple["Employee"]).name.startsWith("J") && row.rowTuple.year.name == "FY19"}).exportDataToFile("Level0DataWithDimHeader.csv")
Example call from Groovy to export data based on metadata and data conditions. In this example, only data for Employees whose Min Salary in the month of Jan > 10000 will be exported for the months of Q1:
Cube cube = operation.application.getCube("Plan1") List<Member> periods = app.getDimension("Period").getEvaluatedMembers("IDescendants(Q1)", cube) cube.createDataExporter().setColumnMemberNames(periods).setRowFilterCriteria({RowData row -> row.rowTuple.account.name == "Min Salary" && Double.parseDouble(row.getValue("Jan")) > 10000}).exportDataToFile("Level0DataWithDimHeader.csv")
Example call from Groovy to export and transform data using the rowDataTransformer. In this example, each Min Salary data row gets transformed into two rows in the exported file - one is the original Min Salary row and an additional row for Min Bonus (set to 5% of the Min Salary):
Cube cube = operation.application.getCube("Plan1") // Export Min Salary, assign Min Bonus to be 5% of Min Salary and write both rows to a zipped file. cube.createDataExporter().setColumnMemberNames(["Jan", "Nov", "Dec"]).setRowFilterCriteria("EUR", "FY19", "Min Salary", "Current").exportDataToZipFile("Level0ZippedData.zip", "Level0Data2.csv", { RowData rowData -> Tuple targetMembers = rowData.rowTuple + ["Account" : "Min Bonus"] Map<String, String> values = rowData.valuesMap.collectEntries { k, v -> [(k): (v && v != "#Mi" ? (Double.parseDouble(v) * 0.05) as String : v)] } as Map<String, String> [rowData, createRowData(targetMembers, rowData.columnMembers, values)] })
Example call from Groovy to iterate over exported data rows, calculate other data based on the current row data and import the calculated data back to the cube. In this example, Max Bonus is calculated based on the exported Min Salary and the calculated bonus data is imported back to the cube using the DataImporter:
Cube cube = operation.application.getCube("Plan1") List<Member> periods = operation.application.getDimension("Period").getEvaluatedMembers("ILvl0Descendants(YearTotal)", cube) cube.createDataExporter().setColumnMemberNames(periods).setRowFilterCriteria("EUR", "FY19", "Min Salary", "Current").exportData().withCloseable { exportIterator -> cube.createDataImportRequest().importData(periods).withCloseable { dataImporter -> exportIterator.each { Map<String, String> maxBonuses = it.valuesMap.collectEntries { k, v -> [(k): (v && v != "#Mi" ? (Double.parseDouble(v) * 0.1) as String : v)] } as Map<String, String> dataImporter.addRow(createRowData(it.rowTuple + ["Account" : "Max Bonus"], it.columnMembers, maxBonuses)) } } }
Modifier and Type | Method and Description |
---|---|
CloseableIterator<RowData> |
exportData()
Returns an iterator to iterate over exported data rows.
|
void |
exportDataToFile(java.lang.String fileName)
Exports and writes data to a file with the specified name.
|
void |
exportDataToFile(java.lang.String fileName,
org.apache.commons.collections.Transformer rowDataTransformer)
Exports data and writes the transformed rows to a file with the
specified name.
|
void |
exportDataToZipFile(java.lang.String zipFileName,
java.lang.String innerFileName)
Exports and writes data to a zip file with the specified name.
|
void |
exportDataToZipFile(java.lang.String zipFileName,
java.lang.String innerFileName,
org.apache.commons.collections.Transformer rowDataTransformer)
Exports data and writes the transformed rows to a zip file with the
specified name.
|
DataFileFormat |
getDataExportFormat()
Returns the exported data file format.
|
DataExportLevel |
getDataExportLevel()
Returns the exported data level.
|
java.lang.String |
getDateFormat()
Returns the date format.
|
java.lang.String |
getErrorFileName()
Returns the error file name.
|
DataExporter |
setAliasTable(java.lang.String aliasTable)
Returns this object after setting the alias table name.
|
DataExporter |
setColumnDimension(java.lang.Object dimensionRef)
Returns this object after setting the column dimension.
|
DataExporter |
setColumnDimensionName(java.lang.String dimensionName)
Returns this object after setting the column dimension name.
|
DataExporter |
setColumnMemberNames(java.util.List<?> selectedColumns)
Returns this object after setting the column selection criteria.
|
DataExporter |
setDataExportFormat(DataFileFormat fileFormat)
Returns this object after setting the data file format.
|
DataExporter |
setDataExportLevel(DataExportLevel exportLevel)
Returns this object after setting the data export level.
|
DataExporter |
setDateFormat(java.lang.String dateFormat)
Returns this object after setting the date format.
|
DataExporter |
setDelimiter(char delimiter)
Returns this object after setting the delimiter to use in the exported
data file.
|
DataExporter |
setDelimiter(java.lang.CharSequence delimiter)
Returns this object after setting the delimiter to use in the exported
data file.
|
DataExporter |
setErrorFileName(java.lang.String errorFileName)
Returns this object after setting the error file name.
|
DataExporter |
setIgnoreUnknownMembers(boolean ignoreUnknownMembers)
Returns this object after setting the ignoreUnknownMembers flag.
|
DataExporter |
setRowDimensions(java.util.List<?> dimensionRefs)
Returns this object after setting the row dimensions.
|
DataExporter |
setRowFilterCriteria(java.lang.Object... rowMemberRefs)
Returns this object after setting the row filter criteria.
|
DataExporter |
setRowFilterCriteria(org.apache.commons.collections.Predicate rowFilterCriteria)
Returns this object after setting the row filter criteria.
|
public CloseableIterator<RowData> exportData() throws java.lang.Exception
This is a privileged method, see section Privileged Method
java.lang.Exception
- if the export cannot be started or completedpublic void exportDataToFile(java.lang.String fileName) throws java.lang.Exception
Only simple file names should be provided. File names with paths or relative paths will be rejected.
This file will be uploaded to the Outbox on completion.
This is a privileged method, see section Privileged Method
fileName
- name of the data filejava.lang.Exception
- if the export cannot be started or completedpublic void exportDataToFile(java.lang.String fileName, org.apache.commons.collections.Transformer rowDataTransformer) throws java.lang.Exception
Only simple file names should be provided. File names with paths or relative paths will be rejected.
This file will be uploaded to the Outbox on completion.
The row transformer will be called on each exported row and the transformer is expected to return 0 or more transformed rows (RowData) for each row it gets called on. The transformed row(s) will then be written to the file.
This is a privileged method, see section Privileged Method
fileName
- name of the data filerowDataTransformer
- the row transformerjava.lang.Exception
- if the export cannot be started or completedpublic void exportDataToZipFile(java.lang.String zipFileName, java.lang.String innerFileName) throws java.lang.Exception
Only simple file names should be provided. File names with paths or relative paths will be rejected.
This zipped file will be uploaded to the Outbox on completion. If a file with the same name already exists in the Outbox, it will be replaced with the new one.
This is a privileged method, see section Privileged Method
zipFileName
- name of the zip fileinnerFileName
- name of the data file which will be zippedjava.lang.Exception
- if the export cannot be started or completedpublic void exportDataToZipFile(java.lang.String zipFileName, java.lang.String innerFileName, org.apache.commons.collections.Transformer rowDataTransformer) throws java.lang.Exception
Only simple file names should be provided. File names with paths or relative paths will be rejected.
This zipped file will be uploaded to the Outbox on completion. If a file with the same name already exists in the Outbox, it will be replaced with the new one.
The row transformer will be called on each exported row and the transformer is expected to return 0 or more transformed rows (RowData) for each row it gets called on. The transformed row(s) will then be written to the file.
This is a privileged method, see section Privileged Method
zipFileName
- name of the zip fileinnerFileName
- name of the data file which will be zippedrowDataTransformer
- the row transformerjava.lang.Exception
- if the export cannot be started or completedpublic DataFileFormat getDataExportFormat()
public DataExportLevel getDataExportLevel()
public java.lang.String getDateFormat()
public java.lang.String getErrorFileName()
public DataExporter setAliasTable(java.lang.String aliasTable)
If alias table name is provided, then the aliases for members from this table if available will be written to the data file.
aliasTable
- name of the alias tablepublic DataExporter setColumnDimension(java.lang.Object dimensionRef)
This method can be called to specify the dimension that is the column header (the focus) around which other data is referenced in the export file.
dimensionRef
- an object representing a reference to a dimensionjava.lang.Exception
- if the specified dimention is not a dense dimension in
case of a BSO cube or not a compression dimension in case of an ASO cube
or if a compression dimension in not present in case of an ASO cube.public DataExporter setColumnDimensionName(java.lang.String dimensionName)
This method can be called to specify the name of the dimension that is the column header (the focus) around which other data is referenced in the export file.
dimensionName
- name of the dimensionjava.lang.Exception
- if the specified dimention is not a dense dimension in
case of a BSO cube or not a compression dimension in case of an ASO cube
or if a compression dimension in not present in case of an ASO cube.public DataExporter setColumnMemberNames(java.util.List<?> selectedColumns)
Sets the selected columns for the export data.
The data will contain the columns in the order in which they were specified. If a column is specified multiple times, only the first instance of the column will be inlcuded in the exported data.
In case of an ASO cube, the column dimension is usually the compression dimension which is often the Account dimension for many of the application types.
In case of an BSO cube, it can be any dense dimension.
selectedColumns
- the subset of columns that should be exported.
A list of objects representing references to a member (see section
Member References)java.lang.Exception
- if a compression dimension in not present in case of
an ASO cube.public DataExporter setDataExportFormat(DataFileFormat fileFormat)
fileFormat
- format of the exported data filepublic DataExporter setDataExportLevel(DataExportLevel exportLevel)
Not all export levels are supported for all cubes types. The following are currently supported:
Cube | Level 0 | All Levels |
---|---|---|
BSO | Yes | Yes |
ASO | Yes | No |
exportLevel
- level of data to be exported, defaults to LEVEL0public DataExporter setDateFormat(java.lang.String dateFormat)
Following are examples of supported date formats:
Date | Format |
---|---|
10/21/2018 | MM/dd/yyyy |
10/21/2018 | MM-dd-yyyy |
21/10/2018 | dd/MM/yyyy |
21-10-2018 | dd-MM-yyyy |
2018/10/21 | yyyy/MM/dd |
2018-10-21 | yyyy-MM-dd |
dateFormat
- the format of the dates in the exported datapublic DataExporter setDelimiter(char delimiter)
delimiter
- delimiter to usepublic DataExporter setDelimiter(java.lang.CharSequence delimiter)
delimiter
- delimiter to usepublic DataExporter setErrorFileName(java.lang.String errorFileName)
A file with the specified name will be generated and uploaded to the outbox with errors that occur when processing rows in the source data.
errorFileName
- error file namepublic DataExporter setIgnoreUnknownMembers(boolean ignoreUnknownMembers)
ignoreUnknownMembers
- true to ignore unknown members when applying
the row filter criteria, false to throw an exception when applying row
filter criteria if it contains one or more unknown members.public DataExporter setRowDimensions(java.util.List<?> dimensionRefs)
The exported rows will contain only members from the specified dimensions and in the order in which they are specified here.
Example data file for Column Format With Dimenison Headers:
"Years" "Scenario" "Version" "Currency" "Entity" "Grades" "Employee" "Account" "Period"
"Jan" "Feb" "Dec"
"FY19" "Current" "BU Version_1" "EUR" "CA" "Grade 1" "Employee 1" "Name" "Coke" "Pepsi" "Sprint"
"FY19" "Current" "BU Version_1" "EUR" "CA" "Grade 1" "Employee 1" "Price" 5 5 4
"FY19" "Current" "BU Version_1" "EUR" "CA" "Grade 1" "Employee 1" "Discount Percentage" 0.1 0.5 0.15
"FY19" "Current" "BU Version_1" "EUR" "CA" "Grade 1" "Employee 1" "Sale Date" 10/28/2019 10/8/2018 1/30/2020
"FY19" "Current" "BU Version_1" "EUR" "CA" "Grade 1" "Employee 1" "Condition" Good Average Poor
If you call setRowDimensions(["Scenario", "Employee", "Years", "Account"]), then the following rows will be returned with only members from Scenario, Employee, Years and Account dimensions and in that order:
"Scenario" "Employee" "Years" "Account" "Period"
"Jan" "Feb" "Dec"
"Current" "Employee 1" "FY19" "Name" "Coke" "Pepsi" "Sprint"
"Current" "Employee 1" "FY19" "Price" 5 5 4
"Current" "Employee 1" "FY19" "Discount Percentage" 0.1 0.5 0.15
"Current" "Employee 1" "FY19" "Sale Date" 10/28/2019 10/8/2018 1/30/2020
"Current" "Employee 1" "FY19" "Condition" Good Average Poor
If you specify a subset of the dimensions, the output may contain duplicate rows as the distinguishing members may be be removed from the output. For example, if you call setRowDimensions(["Scenario"]), then the following rows will be returned:
"Scenario" "Period"
"Jan" "Feb" "Dec"
"Current" "Coke" "Pepsi" "Sprint"
"Current" 5 5 4
"Current" 0.1 0.5 0.15
"Current" 10/28/2019 10/8/2018 1/30/2020
"Current" Good Average Poor
dimensionRefs
- a list of objects representing references to row
dimensions that should be exported.java.lang.Exception
- if an invalid dimension name or the column dimension
name is specified in dimensionRefs.public DataExporter setRowFilterCriteria(java.lang.Object... rowMemberRefs)
Rows that match the filter criteria will be returned. If there are multiple members from the same dimension specified, then the rows matching with any one of those members for that dimension will be returned. Unknown members in the filter criteria will be ignored or an exception will be thrown depending on the ignoreUnknownMembers property value which defaults to true.
If the filter criteria specifies a member from the column dimension, then the row will be returned only if the member matches one of the selected column members.
The rows are not guaranteed to return in any particular order.
This will replace any other row filter criteria previously set by this method or any other signatures of this method.
rowMemberRefs
- members to filter on. An array of objects representing
references to a member (see section
Member References)public DataExporter setRowFilterCriteria(org.apache.commons.collections.Predicate rowFilterCriteria)
Rows that matches the specified predicate conditions will be returned.
The rows are not guaranteed to return in any particular order.
This will replace any other row filter criteria previously set by this method or any other signatures of this method.
rowFilterCriteria
- the predicateCopyright © 2017, 2024, Oracle and/or its affiliates. All rights reserved.