如何在SSAS里设计三栏式的流水账

0
我需要在SSAS里建一个表是三栏式的流水账记账,来源是另外2个表。
发票表INVOICE放在借方debit,为正数
收货表RECEIPTS放在贷方credit,为负数
年初期初余额beginning balance是固定的,每一次记账后的ending balance是计算出来的,ending balance=beginning balance+debit+credit。如下图。
我需要出来一个trial balance表来按日期排序记账,得到所选期间的ending balance显示在报表中,也要显示图中的流水账,和所选期间的发票总金额,收货总金额。
ACCOUNTING.jpg


事实表有3个,一个是beginning balance,一个是发票表,一个是收货表。
维度表是客户和时间,图中未体现。
不知道度量值ending balance该怎么设计?似乎没有办法得到上一行的ending balance。
请专家帮我解决,多谢啦。
已邀请:
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2015-02-12 回答

其实你这个问题 很好解决,你可以先按照你的思路把 数据仓库建立起来
维度表正如你说的 客户和时间,事实表“beginning balance,一个是发票表,一个是收货表”

建立好后,可以理解为已知当天的EndingBalance。所有数据你都看的到,现在问题是你的下一次的BeginningBanlance需要取到昨天的 EndingBalance,如果我没理解错的话。
可以使用计算成员来达到你的目的,比如下面的是取上个月的Balance。而你的可能是 上一次的Balance,其实大同小异。无非就是一个 同比环比的概念(以时间为准)。
WITH MEMBER [Measures].[BeginningBalance]
AS
(
PARALLELPERIOD
(
[Date].[Calendar].[Month],
1,
[Date].[Calendar].CurrentMember
),
[Measures].[Internet Sales Amount]
),FORMAT_STRING = "Currency"

SELECT
{
[Measures].[Internet Sales Amount],
[Measures].[BeginningBalance]
} ON 0,
{
[Date].[Calendar].[Month].MEMBERS
} ON 1
FROM [Adventure Works]
2.png


建立好后,它就会像一个度量值一样出现在你的计算成员里,这时候可以很方便的在设计界面拖放使用它。
1.png
0

sue_huangyong - BI新手 2015-02-24 回答

jxsrzheng,多谢详细的解释,我忘了说了,我只能用表格模式,不能用多维模式。
您写的计算成员是属于多维模式的吧。
0

sue_huangyong - BI新手 2015-02-24 回答

jxsrzheng,多谢您详细的解答。
我忘了说明我只能用表格模式而不能用多维模式了,您提到的计算成员是不是只能用于多维模式呢?
另外,您的例子是取上个月的,我必须是上一次的,还能用这个时间函数的PARALLELPERIOD吗?似乎不是同比环比的概念啊?就是取的上一行的数据。
顺祝新年快乐

要回复问题请先登录注册