DAX-期末余额计算

期末余额计算比较常见,比如,存货。DAX功能十分强大,丝毫不逊色MDX。

下面以一个实例说明,分别计算四种情况期末余额:

基本情况,地区表,商店表,数量表,日期表。

第一种情况,

2012

东城:5+3=8 (3/25/2012)

北城:0

南城:0

西城:8 (2/25/2012)

合计:5+3=8 (3/25/2012)

这种计算比较简单,

CALCULATE(SUM(Facts[Amount]),FILTER(DATE,'Date'[Date]=MAX(Facts[Date])))
CALCULATE(SUM(Facts[Amount]),LASTDATE(Facts[Date]))


类似MDX的LASTCHILD。

见下图,注意合计。

第二种情况,

2012

东城:5+3=8 (3/25/2012)

北城:0

南城:0

西城:21+8=29 (1/25/2012,2/25/2012)

合计:8+29=37

这种计算也不复杂,

SUMX(VALUES(Store[StoreId]),CALCULATE(SUM(Facts[Amount]),LASTDATE(Facts[Date])))


第三种情况,

2012

东城:5+3=8 (3/25/2012)

北城:14 (12/25/2012)

南城:11 (12/25/2012)

西城:8 (2/25/2012)

合计:8+14+11+8=41

这种计算很复杂,但是DAX足够强大,

SUMX(ADDCOLUMNS(ADDCOLUMNS(VALUES(Area[Name]),"LENEDate",CALCULATE(MAX(Facts[Date]),'Date'[Year]<=VALUES('Date'[Year]))),"Quantity",CALCULATE(SUM(Facts[Amount]),FILTER(ALL(DATE),'Date'[Date]=[LENEDate]))),[Quantity])


看下图,特别是合计和总计。

第四种情况,

2012

东城:5+3=8 (3/25/2012)

北城:14+7=21

南城:9+11=20

西城:21+8=29

合计:8+21+20+29=78

这种计算更加复杂,DAX表现非常出色。

SUMX(ADDCOLUMNS(ADDCOLUMNS(CROSSJOIN(VALUES(Store[Name]),VALUES(Area[Name])),"LENEDate",CALCULATE(MAX(Facts[Date]),'Date'[Year]<=VALUES('Date'[Year]))),"Quantity",CALCULATE(SUM(Facts[Amount]),FILTER(ALL(DATE),'Date'[Date]=[LENEDate]))),[Quantity])


最后,我们把这四种情况放在一起,作个比较,清晰明了,也可以体会DAX的强大和魅力。


你可能感兴趣的:(DAX-期末余额计算)