Exportar datos de OneStream a un archivo CSV
Hay casos en los que desea darle al usuario la capacidad de exportar datos a un archivo CSV. Sí, muchos componentes ya traen esa capacidad incorporada, pero algunos, como el SQL Table Editor, no la tienen. O tal vez quiera un control más detallado sobre exactamente qué datos se exportan y dónde se escribe el archivo. En este ejemplo mostraré una forma de hacerlo en OneStream.
Para lograrlo usaré la función BRApi.FileSystem.InsertOrUpdateFile.
BRApi.FileSystem.InsertOrUpdateFile(si, XFfileData)
Esta función requiere un par de parámetros que, a su vez, requerirán otras funciones con varios parámetros cada una.
Para la Business Rule de tipo Dashboard Extender.
Paso 1 – Defina la ruta y el nombre del archivo donde se exportará. En este ejemplo lo exportaré a la carpeta Application Database File, dentro del directorio Users.
‘Ruta y nombre del archivo de exportación
Dim fileName As String = “CorpAccounts.csv”
Dim filePath As String = $”Documents/Users/{StringHelper.RemoveWhiteSpace(si.UserName, False)}”
Dim fileName As String = “CorpAccounts.csv”
Dim filePath As String = $”Documents/Users/{StringHelper.RemoveWhiteSpace(si.UserName, False)}”
Paso 2 – Defina la dimensión que se exportará. Para fines de demostración la he dejado codificada directamente en la Business Rule.
‘Dimensión que se exportará
Dim accountDimPk as DimPk = BRApi.Finance.Dim.GetDimPk(si, “CorpAccounts”)
Dim accountDimPk as DimPk = BRApi.Finance.Dim.GetDimPk(si, “CorpAccounts”)
Paso 3 – Obtenga todos los descendientes de la dimensión y cárguelos en una lista.
‘Obtener los descendientes de la dimensión en una lista
Dim listOfParents As List(Of MemberInfo) = BRApi.Finance.Members.GetMembersUsingFilter(si, accountDimPk, “A#Root.TreeDescendantsInclusive”)
Dim listOfParents As List(Of MemberInfo) = BRApi.Finance.Members.GetMembersUsingFilter(si, accountDimPk, “A#Root.TreeDescendantsInclusive”)
Paso 4 – Recorra la lista y agregue sus miembros a un objeto StringBuilder.
‘Recorrer la lista y anexar los miembros a un objeto StringBuilder
Dim csv As New Text.StringBuilder
For Each parent As MemberInfo In listOfParents
Dim csv As New Text.StringBuilder
For Each parent As MemberInfo In listOfParents
Paso 5 – Convierta el objeto StringBuilder en un arreglo de bytes.
‘Convertir cadena a arreglo de bytes
Dim fileBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(csv.ToString)
Dim fileBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(csv.ToString)
Paso 6 – Guarde el archivo CSV en el File System.
‘Guardar CSV en archivo
Dim XFfileDataInfo As New XFFileInfo(FileSystemLocation.ApplicationDatabase, fileName, filePath)
Dim XFfileData As New XFFile(XFfileDataInfo, fileBytes)
BRApi.FileSystem.InsertOrUpdateFile(si, XFfileData)
Dim XFfileDataInfo As New XFFileInfo(FileSystemLocation.ApplicationDatabase, fileName, filePath)
Dim XFfileData As New XFFile(XFfileDataInfo, fileBytes)
BRApi.FileSystem.InsertOrUpdateFile(si, XFfileData)
El código completo.
Ahora, para ejecutar la Business Rule.
Para esta demostración la ejecutaré desde un botón en un dashboard.
Llamando a la Business Rule desde el botón.
Lo que en este ejemplo exportará los miembros de dimensión de la dimensión CorpAccounts dentro de mi aplicación.
Esto exportará los hijos de la dimensión CorpAccounts a un archivo CSV y escribirá el archivo en la carpeta Application Database/Users/vanderms. vanderms es mi nombre de usuario en la aplicación OneStream.
El archivo CSV ahora contiene los miembros de la dimensión.
Funcionalidad útil que, aunque en este ejemplo se usa para exportar miembros de dimensión, también la he utilizado para exportar Cube Data, datos de tablas relacionales personalizadas, así como cualquier otro conjunto de datos al que pueda acceder desde una regla.
