Using Cell detail in cube view ,forms and reports
Hello Few of questions on using cell details 1. How can we add different classifications for data entry via cell details ? I have created dashboard parameter for same , however its not reflecting in respective cube view or form. 2. Is there any existing report for displaying cell details ? 3. Correct syntax for function - BRApi.Dashboards.Parameters.GetLiteralParameterValue , unfortunately sample code is not working Thanks JA8.4KViews0likes12CommentsHow To Trigger Dashboard Refresh from SQLTableEditor Save Data Server Task (Save button)
The SQLTableEditor in question is used for user interactive CRUD pertaining to Rates used in a calculation. Use Case: I have a SQLTableEditor that holds rates. When the table Save button is clicked, A BR saves the rates and runs a calculation. The results of the calculation are displayed in an adjacent dashboard containing a DataGrid. The DataGrid needs to be refreshed after the Save button is clicked. Question: How do I configure the SQLTableEditor to refresh the adjacent dashboard on clicking the Save Button, in a way similar to configuring the "Save Action" of other components?Solved7.3KViews3likes12CommentsWindows shortcut on OneStream application
Hello Team, We have IE and Edge browser on the system. Once opened the OneStream application when we do Windows shortcut as per below screenshot it is creating the Windows short cut on the desktop. And, then when we open the OneStream application using the shortcut , it is opening on IE browser. How to create a shortcut for Edge and the application should open on Edge Browser when we use the shortcut. Thank you, PraveenSolved6KViews0likes5CommentsBuild a cube view for KPI accounts
Hi community 🙂 We have created a new scenario (not actual or forecast) for manual KPI accounts ( no formula on them), e.g Market share. We would like to create a input form where the submitter should populate e.g. market share for the specific month, for the specific QTD and YTD. I asked a question earlier regarding the account setup for this and I got the answer that they should be Account type Balance. From my understanding you need to say Periodic or YTD on the Scenario settings (default view, input view for adj etc). But what to put when it´s regarding these kind of accounts? Also, regarding the input form. Now we have built YTD and monthly in the same form. For QTD in a separate form. But when populating an amount in monthly, the YTD is automatically updated with the same amount. Any suggestion on setup in the CV to not make them "talk" to each other?Solved3.4KViews0likes4CommentsDefault Home Page for Users & OS Logo is an Actionable Event
Thought this was cool and wanted to share so others have the recipe. If you build a default landing Home Page for users upon login, this is where the XML sits for that Dashboard. Then, (I was thrilled) to discover this) once you have a default Dashboard set for users, the OneStream logo is now a clickable button! It returns you to your Home Page Dashboard.3KViews12likes5CommentsPLP register field not displaying values
We have two 8.2 environments with PLP SV 101. In one environment, all of the parameters for the register field lists display as expected. In the other, the same fields are blank. However, we know there is indeed a value there as the plan calculates correctly and we can see the resulting entities in the export to the cube. For troubleshooting purposes, we’ve been using the entity field (aliased as Department in our solution.) The Register Field List setup is entirely conventional: The parameter is configured the same in both environments: The function in the business rule that it’s calling is the same in both environments. I’ve tested the resulting SQL in SSMS and it returns valid values. I temporarily added some logging to make sure the method was actually hiring and returning a data table as expected; it is. The fact that it does populate the entities when calculating the plan data suggests all of this is fine and it’s just a display bug but nothing I can find seems to allow it to display properly. What can we do to address this? I know the parameter is custom but the issue doesn’t appear to be with the parameter as it works fine in every other environment we have except this one. What we need help explaining specifically is the display issue, which seems like a bug.Solved2.8KViews1like12CommentsHow To Sort Dashboard Parameters AlphaNumerically Without Specifying Sort Order - Example Code
In developing applications, I prefer to group objects intuitively using standardized naming, alphanumeric sorting, and hierarchical grouping. Dashboard parameters use the "Sort Order" property to sort, which for me adds unwanted cognitive load to a development process. I developed the code below to automatically sort and group parameters the way you would expect them to be sorted to get around the need to specify Sort Order. Implement as an extensibility rule and run it from the editor. After the rule is run, copy, paste an existing parameter, then delete the pasted parameter to force a refresh of the list from the server. Be sure to remove this code from your production applications. C# using System; using System.Data; using OneStream.Shared.Common; using OneStream.Shared.Database; using OneStream.Shared.Wcf; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Collections.Generic; namespace OneStream.BusinessRule.Extender.MSA_ParamSorter { //------------------------------------------------------------------------------------------------------------ // Reference Code: MSA Parameter Sorter [MSA_ParamSorter] // // Description: This class sorts the Dashboard Parameters for a given Workspace and Maintenance Unit // The sort is standard lexical (Lexigraphical, Dictionary) order // After running the rule, refresh the application and the workspace. // // Note: This will change all sortorder settings on your parameters for the given Maintenance Unit // (most people want this) // // Usage: Update the Workspace and Maintenance Unit strings then run from the BR Editor. // // Created By: Robb Salzmann, Mindstream Analytics // // Date Created: 6-7-2023 //------------------------------------------------------------------------------------------------------------ public class MainClass { public object Main(SessionInfo si, BRGlobals globals, object api, ExtenderArgs args) { try { var paramSort = new ParamSort(); paramSort.SortParams(si, args); } catch (Exception ex) { throw new XFException($" {ex.Message}", ex); } return null; } } // Replace the string assignments for strWorkspace and strMaintUnit as appropriate public class ParamSort { private string strWorkspace = "<YourWorkspaceName>"; // Workspace containing the Maintenance Unit below private string strMaintUnit = "<YourMaintenanceUnitName>"; // Maintenance Unit where the Parameters will be sorted public void SortParams(SessionInfo si, ExtenderArgs args) { DataTable results; string strSql = null; int intSortOrder = 10; try { Guid wsGuid = BRApi.Dashboards.Workspaces.GetWorkspaceIDFromName(si, false, strWorkspace); Guid muGuid = BRApi.Dashboards.MaintUnits.GetMaintUnit(si, false, wsGuid, strMaintUnit).UniqueID; strSql = $@"SELECT dp.name as name FROM DashboardMaintUnit dmu, DashboardParameter dp WHERE dmu.UniqueID = '{muGuid}' And dp.MaintUnitID = dmu.UniqueID"; using (DbConnInfo dbConn = BRApi.Database.CreateApplicationDbConnInfo(si)) { results = BRApi.Database.ExecuteSql(dbConn, strSql, true); List<DataRow> parameters = results.AsEnumerable().ToList(); // Sorting the parameters based on the custom logic var comparer = new AlphaNumericComparator(); var sortedParameters = parameters .OrderBy(row => row.Field<string>("name"), comparer) .ToList(); // Updating the sort order in the database foreach (var row in sortedParameters) { strSql = $"UPDATE DashboardParameter SET SortOrder={intSortOrder} WHERE name='{row["name"]}'"; BRApi.Database.ExecuteSql(dbConn, strSql, true); intSortOrder += 10; } } } catch (Exception ex) { throw new XFException($"{Environment.NewLine}{this.GetType().ToString()}.{System.Reflection.MethodBase.GetCurrentMethod().Name}(): {ex.Message}:{Environment.NewLine}{strSql}", ex); } } } public class AlphaNumericComparator : IComparer<string> { public int Compare(string x, string y) { if (x == y) return 0; string[] xParts = Regex.Split(x, @"(\d+)"); string[] yParts = Regex.Split(y, @"(\d+)"); for (int i = 0; i < Math.Min(xParts.Length, yParts.Length); i++) { if (xParts[i] != yParts[i]) { return PartCompare(xParts[i], yParts[i]); } } return xParts.Length - yParts.Length; } private static int PartCompare(string x, string y) { if (int.TryParse(x, out int a) && int.TryParse(y, out int b)) { return a.CompareTo(b); } return string.Compare(x, y, StringComparison.OrdinalIgnoreCase); } } } VB Imports System.Data Imports OneStream.Shared.Common Imports OneStream.Shared.Database Imports OneStream.Shared.Wcf Imports System.Threading.tasks Imports System.Text.RegularExpressions Namespace OneStream.BusinessRule.Extender.MSA_ParamSorter '------------------------------------------------------------------------------------------------------------ 'Reference Code: MSA Parameter Sorter [MSA_ParamSorter] ' 'Description: This class sorts the Dashboard Parameters for a given Workspace and Maintenance Unit ' The sort is standard lexical (Lexigraphical, Dictionary) order ' After running the rule, refresh the application and the workspace. ' 'Note: This will change all sortorder settings on your parameters for the given Maintenance Unit ' (most people want this) ' 'Usage: Update the Workspace and Maintenance Unit strings then run from the BR Editor. ' 'Created By: Robb Salzmann, Mindstream Analytics ' 'Date Created: 6-7-2023 '------------------------------------------------------------------------------------------------------------ Public Class MainClass Public Function Main(si As SessionInfo, globals As BRGlobals, api As Object, args As ExtenderArgs) As Object Try Dim paramSort As New ParamSort() paramSort.SortParams(si, args) Catch ex As Exception Throw New XFException($" {ex.Message}", ex) End Try Return Nothing End Function End Class ' Replace the string assignments for strWorkspace and strMaintUnit as appropriate Public Class ParamSort Private strWorkspace As String = "<YourWorkspaceName>" 'Workspace containing the Maintenance Unit below Private strMaintUnit As String = "<YourMaintenanceUnitName>" 'Maintenance Unit where the Parameters will be sorted Public Sub SortParams(si As SessionInfo, args As ExtenderArgs) Dim results As DataTable Dim strSql As String = Nothing Dim intSortOrder As Int32 = 10 Try Dim wsGuid As Guid = BRApi.Dashboards.Workspaces.GetWorkspaceIDFromName(si, False, strWorkspace) Dim muGuid As Guid = BRApi.Dashboards.MaintUnits.GetMaintUnit(si, False, wsGuid, strMaintUnit).UniqueID strSql = $"SELECT dp.name as name FROM DashboardMaintUnit dmu, DashboardParameter dp WHERE dmu.UniqueID = '{muGuid}' And dp.MaintUnitID = dmu.UniqueID" Using dbConn As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si) results = BRApi.Database.ExecuteSql(dbConn, strSql, True) Dim parameters As List(Of DataRow) = results.AsEnumerable().ToList() ' Sorting the parameters based on the custom logic Dim comparer As New AlphaNumericComparator() Dim sortedParameters = parameters _ .OrderBy(Function(row) row.Field(Of String)("name"), comparer) _ .ToList() ' Updating the sort order in the database Dim s As New List(Of String) For Each row In sortedParameters strSql = $"UPDATE DashboardParameter SET SortOrder={intSortOrder} WHERE name='{row("name")}'" BRApi.Database.ExecuteSql(dbConn, strSql, True) intSortOrder += 10 Next End Using Catch ex As Exception Throw New XFException($"{Environment.NewLine}{Me.GetType().ToString()}.{System.Reflection.MethodBase.GetCurrentMethod().Name}(): {ex.Message}:{Environment.NewLine}{strSql}", ex) End Try End Sub End Class Public Class AlphaNumericComparator Implements IComparer(Of String) Public Function Compare(x As String, y As String) As Integer Implements IComparer(Of String).Compare If x = y Then Return 0 Dim xParts As String() = Regex.Split(x, "(\d+)") Dim yParts As String() = Regex.Split(y, "(\d+)") For i As Integer = 0 To Math.Min(xParts.Length, yParts.Length) - 1 If xParts(i) <> yParts(i) Then Return PartCompare(xParts(i), yParts(i)) End If Next Return xParts.Length - yParts.Length End Function Private Shared Function PartCompare(x As String, y As String) As Integer Dim a, b As Integer Dim isNumericX As Boolean = Integer.TryParse(x, a) Dim isNumericY As Boolean = Integer.TryParse(y, b) If isNumericX AndAlso isNumericY Then Return a.CompareTo(b) Return String.Compare(x, y, StringComparison.OrdinalIgnoreCase) End Function End Class End Namespace2.7KViews6likes8CommentsCustom Coloring in Dashboards
Creating a post for custom coloring in dashboards. For example, Onestream's dashboard selections give the option for custom color, however, it does not let you select it in the formatting. It only shows the option for #FF00000 (at least from what I have seen). The above format is HTML coloring codes that can be manually updated in the display format Typically when matching client colors I am given RGB color codes, So I use the below converter to get the HTML code and add #FF to the beginning of the provided hex code. https://www.w3schools.com/colors/colors_converter.aspSolved2.7KViews2likes2CommentsCan an Excel Journal template be modified to allow upload to multiple periods at once?
Does anyone know whether it's possible to modify the Excel journal upload template to force upload to multiple individual periods from that one file? If it's possible, can anyone provide a brief how-to for setting something like this up? The request is to be able to upload this to a forecast scenario so it's really outside the normal parameters of a typical journal. I know one easier alternative is to create an _ADJ member and just load the data to that but that's not the ask from the team. Would be grateful for any advice. ThanksSolved2.7KViews0likes3Comments