我是Power BI的新手。我想在Power BI中制作Cashflow。到目前为止,我在Power BI - 矩阵报告中有一些费用和收入。它看起来像这样:
我只有一个表 - vmCashPaymentOrders 和两个重要字段: Due_Date 和 Flow_BGN 。我还有表日期,实际上是日历,日期[日期]列。
我已将日期放在行中的列和数据中。我想要以下内容:
每天查看前一天的总数(结束余额) Flow_BGN 作为第二天的期初余额。
我将尝试使用excel示例解释更简单:
提前致谢!
答案 0 :(得分:0)
可能有更好的方法,但也许这会有所帮助。
我从这张桌子开始:
以此表结束:
在 Modeling 标签中,从上面选择并显示的第一个表开始......
我创建了一个 New Measure 来存储1500的初始期初余额:InitialOpeningBalance = 1500
然后我添加了带有索引的新列:Index = COUNTROWS(FILTER(Table1, Table1[Due_Date]<=EARLIER(Table1[Due_Date])))
然后我为最终余额添加了新列:End Balance = [InitialOpeningBalance] + sumx(FILTER(Table1,Table1[Index]<=EARLIER(Table1[Index])),Table1[Revenue])+sumx(FILTER(Table1,Table1[Index]<=EARLIER(Table1[Index])),Table1[Expenses])
然后我为开放余额添加了新列:Opening Balance = if(Table1[Index]=1,[InitialOpeningBalance],sumx(FILTER(Table1,Table1[Index]=EARLIER(Table1[Index])-1),Table1[End Balance]))
无论如何......我希望它有所帮助。
答案 1 :(得分:0)
我还想出了一种方法来使用Power Query(Power BI&#39的查询编辑器)来实现这一目标并得到这个结果:
可能有一种更直接(因此更好)的方法,但这是我如何得到它...
我从这张桌子开始作为&#34;表1和#34;在查询编辑器中:
然后我添加了一列,总结了每行的收入和费用:
我通过点击&#34;添加列&#34添加了列;选项卡,然后是&#34;自定义列&#34;按钮。在&#34;添加自定义列&#34;单击&#34;自定义列&#34;弹出的对话框按钮,我输入了&#34; SumRevenueExpenses&#34;在&#34;新列名称&#34; &#34;自定义列公式中的文本框和[Revenue]+[Expenses]
:&#34;文本框。
然后我引用了 Table1 ......也就是说,我用它作为&#34; Table2&#34;的来源。这基本上是表1的副本。我把它命名为Table2。
要参考表1,右键单击&#34;表1和#34;在查询编辑器左窗格的顶部,然后单击“参考:
”然后我点击&#34;添加列&#34;添加索引列。选项卡和&#34;索引列&#34;下拉箭头和&#34;从1&#34;:
然后我添加了另一个自定义列:我将其命名为#34;结束余额&#34;并添加了公式Table.AddColumn(#"Added Index", "End balance", each 1500 + List.Accumulate(List.Range(Table1[SumRevenueExpenses],0,[Index]),0,(state,current)=> state + current))
。 注意:此公式中的1500是您的初始1500期余额。它在这里是硬编码的,但你可以把它放在它自己的专栏中,就像我之前使用DAX方法中的一个度量一样,然后引用该列(例如,&#34; ...每个[InitialOpeningBalance] ] + ...&#34;)
然后我添加了最后一个自定义列:我将其命名为#34;开放余额&#34;并添加了公式Table.AddColumn(#"Added Custom1", "Opening balance", each try #"Added Custom1"{[Index]-2}[End balance] otherwise 1500)
。 注意:此公式中的1500是您的初始1500期余额。 (与上面相同的评论,关于硬编码的数字......你可以改用一列。)
然后我删除了&#34; SumRevenueExpenses&#34;和&#34;索引&#34;列。
然后我拖了#34;开放平衡&#34;向左列,直到它在&#34; Due_Date&#34;之间。和&#34;收入&#34;列。
然后我点击&#34;转换&#34;降级标题。选项卡和&#34;使用第一行作为标题&#34;下拉箭头和&#34;使用标题作为第一行&#34;:
那时,我有这张桌子:
然后我通过单击&#34;转换&#34;转换表格。选项卡,然后&#34; Transpose&#34;,获取此表:
最后,我通过点击&#34;转换&#34;将第一行作为标题提升。选项卡和&#34;使用第一行作为标题&#34;下拉箭头和&#34;使用第一行作为标题&#34;。
最终结果如下:
这里是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"
答案 2 :(得分:0)
对于最简单的答案,重要的是要知道您使用的详细数字是否是余额(不能在时间维度上添加)或构成余额的交易(可在时间维度上添加)。
您还应该知道DAX不是Excel。使用DAX,总计是使用过滤器创建的(通常会删除它们),并且没有单元格依赖于另一个单元格来获取其结果。另一个因素是获得总数是过滤器上下文。
如果您每天都会有收入和支出(并且从不深入研究费用或仅收入,您可以定义DAX中的总数意味着什么,以及使用表达式作为详细信息行的意义HASONEVALUE或HASONEFILTER检查您是否在总线或细节线上。
如果您也是DAX的新手,我建议您从一个不使用余额或使用余额处理的示例开始,因为虽然通常情况下数据模型和关系会产生很大影响。你的生活比Excel更容易(没有VLOOKUP),初学者的其他任务在Excel中更容易。
也就是说,其他任何一种解决方案都可以为您提供答案,因为它们会将数据模型之外的源数据重新塑造成更适合在Power BI中应用的内容。
还有一位博主Imke Feldman在使用会计编号时因其DAX见解而受到广泛尊重,您可以连接到她的博客here。