MDX条件求和度量

时间:2014-09-15 14:48:45

标签: sum conditional mdx iif

我有一个包含4列的库存移动表 - SKUID,productID,dateIn,dateOut和amount。我希望能够随时间跟踪库存水平,即在给定范围内的每个日期跟踪给定产品ID的库存水平 - 例如

(来源数据)

SKUID, productID, dateIn, dateOut, amount
100001, 5, 10/01/2014, 15/01/2014, 500
100002, 5, 10/01/2014, 15/01/2014, 1000
100003, 5, 20/01/2014, 31/12/2049, 500
100004, 5, 20/01/2014, 20/01/2014, 100

(报告数据)

productID, date, amount
5, 10/01/2014, 1500
5, 11/01/2014, 1500
5, 11/01/2014, 1500
...
5, 15/01/2014, 0
5, 15/01/2014, 0
...
5, 20/01/2014, 500
5, 21/01/2014, 500

对于最终报告中的每一天,我想查看dateIn为< = reportDate且dateOut为> = reportDate的每个产品的金额总和。

我认为这应该作为某种条件求和来完成 - 即创建一个计算量度如下: -

sum({null:[dateIn]。[Date] .CurrentMember},iif([StockMovement]。[dateOut]> = [dateIn]。[Date] .CurrentMember,[Measures]。[Amount],0 ))

这不起作用 - 它只是给我每个日期的金额总和

1 个答案:

答案 0 :(得分:1)

你不应该这样做。即使你可以,也不是一个好主意。

您描述的表格中可以或多或少地标识为“货件”,每批货物都是不可分割的。好的,这会给你一些措施,比如“每次发货的天数”,或“日期X上的金额”或“第X天的金额”。

如果您想跟踪库存,则应使用快照事实表,每天您为每个产品添加1条记录以及当前库存量。因此,对于每一天,您采用前一天的库存水平,添加所有金额,减去所有金额并将其存储在库存表中。

检查Ralph Kimball的数据仓库工具包,查看库存章节,其中描述了快照事实表以及我​​们需要它们的原因。他很好地解释了你的方法如何产生不良影响。