How can I retrieve the name of the form template using a finance business rule?
Hello everyone, Thanks to this discussion: https://community.onestreamsoftware.com/discussions/WorkflowDI/forms-by-entity/13417 I can now show or hide the input cube views based on whether or not the group entity has been released, as stored in Entity Text6. However, by doing this, I lose the ability to display cube views only for the quarter, half-year or full year. Currently, I display the cube views every month if the entity is present in the group, so this does not apply to cube views that should be displayed quarterly. I would therefore like to retrieve the name of the form displaying each data entry cube view, so that I can define in the Business Rules whether each form should be displayed monthly, quarterly, half-yearly or only in December. This would allow me to use the settings provided natively by OneStream, which I have previously bypassed. But I am unable to do so. Is this feasible? The ultimate aim is to prevent accidental data entry into workflows that should no longer be populated. I have already removed accountants’ access to the workflow for entities that have left the group, but the central team still has access, and I would like to prevent them from accidentally entering data for periods when the entity has left the group. Thank you for your help48Views0likes3CommentsDynamicCalc - Return FX of Current Parent
Good morning OneStream folks. I was looking for an example of how to dynamically pull the FX rate for an entity based on its current parent. We currently have a DynamicCalc account that assumes that all parents are USD and therefore the rate returned by the account is the USD translation rate. For example, the child is GBP and has a CAD parent, but the formula returns GBP-->USD. I was able to get a DynamicCalc formula that works, but I have to make some additions in my QuickView or CubeView to get it work completely. The account I created in this case is called ParentFX and the logic is below: In order to get the ParentFX account to return the correct value, I have to write my quickview logic as: A#ParentFX:C#Translated:Name(Parent FX). Which is fine, but I would also like to use that combo in a getdatacell calculation, and OneStream doesn't seem to like that. I'd like to be able to pull the A#ParentFX account with it using the Entity hierarchy as its guide for the parent FX instead of having to use the Cons hierarchy. Any ideas are appreciated.54Views0likes0CommentsAutomatically Flag Cells for Spreading in Cubeview
Hello, Currently we are working on a forecasting model, and we would like to be able to use the spreading process inherent in OS. Is there away to use conditional formatting or an XFBR to set a column of values to be flagged automatically based on the comparison between a parameter and the column member? Specifically, I am looking to have the first or first two periods of the quarter set as flagged so they can be excluded from the proportional distribution based on when the users are completing this forecast. Thanks,64Views0likes2CommentsPass-thru Formatting on Cube Views
Good afternoon, I'm trying to pass through formatting from one cube view to another. The 2nd cube view is a dialog pop-up in a dashboard triggered by a selection changed event. So far I've been able to determine destination formatting based on Cell POV dimension members of the cell "clicked" but I'm hitting a snag on dynamically calculated cells (column is Actual versus Budget % for example). The Cell POV dimension members are the same with the only difference being a "GetDataCell" at the end. I haven't figured out a way to retrieve what, if anything, is in the "calculation script" for a cell intersection. Or if there's a way to retrieve the row and column names for a cell intersection at the time of a click? Looking for any guidance possible. Thanks, Brandon38Views0likes0CommentsTime always returns 0001-01-01 in BR when using XFBR in Cube View
Hi, I am calling a Business Rule (BR) in a Cube View using XFBR as follows: XFBR( BR_ParamHelper, FunctionName, WFname = |WFText2|, SelectEntity = |!WF_AssignedEntity!|, Time = |!Time!| ) Inside the BR, I parse the year from Time to control flows: Dim wfYear As Integer = 0 If args.NameValuePairs.ContainsKey("Time") Then Dim POVTime As String = args.NameValuePairs("Time") wfYear = CInt(Left(POVTime, 4)) End If If wfYear >= 2026 Then ' Remove flows for specified entities Else ' Keep historical flows End If Problem: When I log POVTime or wfYear, it always shows 0001-01-01, so my logic for removing ENT/EXIT based on the year never triggers. What I have tried: Verified the Cube View POV is correctly set. Passed Time = |!Time!| from the Cube View XFBR call. Logged args.NameValuePairs("Time") — still returns 0001-01-01. Question: Is Time = |!Time!| the correct way to pass the POV period to a BR? Is there a difference between |!Time!| and |!POV!| or T#POV in Cube Views for BRs? How can I get the actual workflow year in the BR so I can apply logic like wfYear >= 2026? Any guidance or examples on how to correctly get the year of the workflow/POV in a BR would be greatly appreciated.Solved93Views0likes5CommentsVary description vy user culture in XFBR
Hello, We are facing the following issue, we use the following xfbr to generate accounts in a cubeview rows and retrieve descriptions : XFBR(CCF_XFBR, GetCCFDrillDownWithDescription2,memberExp=[A#CashFlow_Gestion.TreeDescendantsInclusive], Time=|CVTime|). However, the Cube View where this XFBR is applied always displays the descriptions in the default format. The description does not adapt based on the user’s culture settings. How can we make the XFBR return descriptions that vary according to the user culture? For reference, here is the XFBR code : Public Function GetCCFDrillDownWithDescription2(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardStringFunctionArgs) As String Try 'Get the Dim PK for Entity Dimension Dim accountDimPk As DimPk = BRApi.Finance.Dim.GetDimPk(si,args.SubstVarSourceInfo.WFAccountDim) Dim flowDimPk As DimPk = BRApi.Finance.Dim.GetDimPk(si,args.SubstVarSourceInfo.WFFlowDim) 'Dim memberListClass As New OneStream.BusinessRule.Finance.CCF_FinanceLogics.MainClass Dim memFilterAccounts As List(Of MemberInfo) = BRAPi.Finance.Members.GetMembersUsingFilter(si, accountDimPk, args.NameValuePairs("memberExp"), True) If memFilterAccounts.Count = 0 Then ' brapi.ErrorLog.LogMessage(si,"Cash flow Account Member Not found in CubeView member filter. Check XFBR syntax (GetCCFDrillDown) in Cube view") Return "A#None:F#None:Name(Please check memberfilter in cubeview. Cashflow Account not found)" End If 'Use a text builder to build a string Dim resultString As New Text.Stringbuilder() Dim isfirstItem As Boolean = True ' Dim accountFlowComb As String ' Dim flowBaseMembers As List(Of Member) Dim objDataCellInfoUsingMemberScript As New DataCellInfoUsingMemberScript Dim tftEntityID As Integer = Brapi.Finance.Members.GetMemberId(si,dimTypeId.Entity, "CF") Dim objScenarioType As ScenarioType = BRApi.Finance.Scenario.GetScenarioType(si, args.SubstVarSourceInfo.WFScenario.MemberId) Dim timeReference As String = BRApi.Finance.Entity.Text(si, tftEntityID, 1, objScenarioType.Id, args.SubstVarSourceInfo.WFTime.MemberId) Dim MatrixTime As String = args.NameValuePairs("Time") Dim scenarioReference As String = BRApi.Finance.Entity.Text(si, tftEntityID, 2, objScenarioType.Id, args.SubstVarSourceInfo.WFTime.MemberId) If scenarioReference = String.Empty Then scenarioReference = args.SubstVarSourceInfo.WFScenario.Name Dim cashFlowSettings As DataTable = BRApi.Import.Data.FdxExecuteDataUnit(si, "PARAM_CF", "E#CF", "Local", objScenarioType.Id,"S#" & scenarioReference, "T#" & MatrixTime, "YTD", True, "Amount <> 0", 4, False) 'Dim cashFlowAdj As DataTable = BRApi.Import.Data.FdxExecuteDataUnit(si, "CONSO", "E#CF", "Local", objScenarioType.Id,"S#REEL","T#" & timeReference , "YTD", True, "Amount <> 0", 4, False) 'Exit Function Dim CFSiN As Boolean = cashFlowSettings Is Nothing If cashFlowSettings Is Nothing Then Brapi.ErrorLog.LogMessage(si,"No CashFlow setting found") Return "" 'Exit Function ElseIf cashFlowSettings.Rows.Count = 0 Then Brapi.ErrorLog.LogMessage(si,"No CashFlow setting found") Return "" 'Exit Function End If Dim space As String = String.Empty Dim sign As String = String.Empty Dim AccountDescription As String ' Dim AccountDescription2 As String For Each account As MemberInfo In memFilterAccounts ' brapi.ErrorLog.LogMessage(si,"account " & account.NameAndDescription) space = " " For i = 0 To account.IndentLevel space = space & " " Next 'Exit Function resultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None,") 'resultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None:U7#MT_RETTFT,") ' Cb#CONSO:E#EIMER:P#?:C#Local:S#REEL:T#2022M12:V#YTD:A#RD_T110:F#None:O#Top:I#Top:U1#None:U2#None:U3#Top:U4#None:U5#None:U6#None:U7#MT_RETTFT:U8#CF_CalcAmount 'Ajout des ecritures Dim memberFilter As String = "MT_RETTFT" Dim UD7Desc As String = BRApi.Finance.Metadata.GetMember(si, dimTypeId.UD7,memberFilter).Description 'ResultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None:U7#MT_RETTFT:Name(" & UD7Desc & "),") If Not BRApi.Finance.Members.HasChildren(si, accountDimPk, account.Member.MemberId) Then Dim cashFlowSettingRows() As DataRow = cashFlowSettings.Select("UD7 = '" & account.Member.Name & "' AND UD8 = 'None'") For Each row As DataRow In cashFlowSettingRows AccountDescription = BRApi.Finance.Metadata.GetMember(si, dimTypeId.Account,row("Account")).NameAndDescription If row("Amount") = -1 Then sign = "(-)" 'ResultString.Append("A#" & row("Account") & ":Name( "& space & " " & AccountDescription & "):F#" & row("Flow") & ":U7#" & account.Member.Name &",") 'ResultString.Append("A#" & row("Account") & ":Name( "& space & " " & AccountDescription & "):F#" & row("Flow") & ":U7#" & row("UD7") &",") ResultString.Append("A#" & row("Account") & ":Name( "& sign & space & AccountDescription & "):F#" & row("Flow") & ":U7#" & row("UD7") &",") Next ResultString.Append("A#" & account.Member.Name & ":Name( " & space & account.Member.Name & space & UD7Desc & "):F#None:U7#MT_RETTFT:U8#None" &",") 'ResultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None:U7#MT_RETTFT:Name(" & UD7Desc & "),") End If Next Return resultString.ToString Catch ex As Exception Throw ErrorHandler.LogWrite(si, New XFException(si, ex)) End Try End FunctionSolved253Views0likes4CommentsRetrieve the culture in a BR and display the name & description of this culture
Hello everyone, We currently have a business rule that allows us to display a certain number of accounts for our cash flow cube view. The problem is that when returning account.Member.NameAndDescription, it does not take into account the user's culture. resultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None,") So I think I need to retrieve the culture of the user displaying the cube view in my BR in order to return the correct name and description. However, I don't know how to retrieve the user's culture, nor what parameter to return instead of account.Member.NameAndDescription to get the one in US English, as the default is in French. Do you have any ideas?Solved56Views0likes1CommentDynamic calc
Dynamic calc formula for an account Dim RATE As DataCell = api.Data.GetDataCell("A#RATE:F#99:U7#Top") Dim CALC As DataCell = api.Data.GetDataCell("A#CALC:F#F99:U7#Top") If api.Pov.Entity.Name <> "None" And api.Entity.HasChildren() Then If RATE.CellAmount < 0.15 api.Data.Calculate("RATE = 0.15 * RemoveZeros(CALC)") Return RATE Else Return 0 End If End If i'm calling A#RATE from the cube view. i have error unable to execute the formula for member RATE, error in processing script. when i compile the formula no issueSolved99Views0likes1CommentReal-time "Unsaved" status, Intercepting Workflow Navigation
I have a requirement to implement data integrity guardrails on several budgeting forms (Dashboards containing Cube Views/SQL Table Editor). I am looking for guidance on whether the following two features are technically feasible within OneStream: 1. Real-Time "Unsaved Changes" Indicator The goal is to display a status label at the top of the Dashboard that updates to "Data Hasn't Been Saved" the moment a user modifies a cell value (Cubeview/SQL Table Editor), before they actually click the Save button. Question: Is there a way to detect a "dirty" cell state or user input in real-time to update a dashboard component immediately, or are we limited to updating status only after a Save action is triggered? 2. Navigation Warning (Popup on Exit) The goal is to trigger a popup warning if a user attempts to navigate away from the current Workflow Unit or close the Dashboard tab without having Saved or Run Calculations. Question: Is there an event handler available that allows us to intercept a navigation event, and potentially block the user from leaving the screen until they complete the required actions? If anyone has implemented a similar solution or knows which Business Rule events controls these interactions, I would appreciate the insight. Thanks!24Views0likes0CommentsFilterMembers syntax (: vs ,) and base clearing when using GetDataBufferUsingFormula
I’m working on a custom clear process that clears cube data using GetDataBufferUsingFormula() The goal is to dynamically clear data for all base members under the current POV (Entity, UD1-UD4) by expanding any parent members with the .Base suffix. In other words, I want to make sure every dimension in the POV (Entity and UDs alike) is ultimately resolved down to base members before the clear runs. Here’s a simplified idea of what I’m doing: Dim filterString As String = String.Join(":", intersectionParts) Dim fullFilter As String = $"FilterMembers({filterString})" Dim sourceBuffer As DataBuffer = api.Data.GetDataBufferUsingFormula(fullFilter, DataApiScriptMethodType.Calculate, False, destinationInfo) The process builds a FilterMembers() expression dynamically, retrieves the buffer, and sets all cell amounts to zero to perform a clear. However, I’m facing two issues: Some child members aren’t being cleared, even when I use .Base on their parent. I’m not fully sure about the correct syntax for FilterMembers, should the dimensions be separated by colon (:) or by comma (,)? What’s the real difference between the two, especially when dealing with multiple parent members or nested intersections? For example, if I have three parent members in my intersection, I might build something like: FilterMembers(E#MyEntity.Base:U1#ProfitCenter.Base:U2#Location.Base) But it’s unclear whether that colon syntax is correct, or if it should be comma-separated, or another thing is, the use of square bracket...since some base-level data doesn’t seem to clear. Could this be a syntax issue with FilterMembers, or could the problem come from how I’m constructing or passing the intersection into GetDataBufferUsingFormula()? Any clarification or working example for multi-parent .Base expansions with FilterMembers() would be a huge help. Thanks in advance!Solved168Views0likes2Comments