I also figured out a way to do it with Power Query (Power BI's Query Editor) and get this result:
There may be a more direct (and therefore, better) method, but here's how I got it...
I started with this table as "Table1" in the Query Editor:

Then I added a column which summed the Revenue and Expenses for each row:

I added the column by clicking the "Add Column" tab and then the "Custom Column" button. In the "Add Custom Column" dialog box that popped up when I clicked the "Custom Column" button, I entered "SumRevenueExpenses" in the "New column name" text box and [Revenue]+[Expenses]
in the "Custom column formula:" text box.
Then I referenced Table1...that is, I used it as a source for "Table2". That basically made a copy of Table1. I named it Table2.
To reference Table1, right-click on "Table1" at the top of the left pane of the Query Editor, and then click on Reference:

Then I added an index column by clicking the "Add Column" tab and the "Index Column" drop-down arrow and "From 1":

Then I added another custom column: I named it "End balance" and added the formula, Table.AddColumn(#"Added Index", "End balance", each 1500 + List.Accumulate(List.Range(Table1[SumRevenueExpenses],0,[Index]),0,(state,current)=> state + current))
. NOTE: the 1500 in this formula is your initial 1500 Opening balance. It's hard-coded here, but you could have it in its own column, like I did with a measure in my DAX approach earlier, and reference that column instead (e.g., "...each [InitialOpeningBalance] +...")
Then I added one last custom column: I named it "Opening balance" and added the formula, Table.AddColumn(#"Added Custom1", "Opening balance", each try #"Added Custom1"{[Index]-2}[End balance] otherwise 1500)
. NOTE: the 1500 in this formula is your initial 1500 Opening balance. (Same comment as above, regarding the hard-coded number...you could use a column instead.)
Then I removed the "SumRevenueExpenses" and "Index" columns.
Then I dragged the "Opening balance" column leftward, till it was between the "Due_Date" and "Revenue" columns.
Then I demoted the headers by clicking the "Transform" tab and the "Use First Row as Headers" drop-down arrow and "Use Headers as First Row":

At that point, I had this table:

Then I transposed the table by clicking the "Transform" tab and then "Transpose", to get this table:

And, finally, I promoted the first row as headers by clicking the "Transform" tab and the "Use First Row as Headers" drop-down arrow and "Use First Row as Headers".
The final result is this:

Here's the query code for Table2:
let
Source = Table1,
#"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1),
#"Added Custom1" = Table.AddColumn(#"Added Index", "End balance", each 1500 + List.Accumulate(List.Range(Table1[SumRevenueExpenses],0,[Index]),0,(state,current)=> state + current)),
#"Added Custom" = Table.AddColumn(#"Added Custom1", "Opening balance", each try #"Added Custom1"{[Index]-2}[End balance] otherwise 1500),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"SumRevenueExpenses", "Index"}),
#"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"Due_Date", "Opening balance", "Revenue", "Expenses", "End balance"}),
#"Demoted Headers" = Table.DemoteHeaders(#"Reordered Columns"),
#"Transposed Table" = Table.Transpose(#"Demoted Headers"),
#"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true])
in
#"Promoted Headers"