我们在MSSQL2008R2数据库中有两个表源:
DAILY_SRC
DAILY_SRC_ID int, primary key
DATE datetime
DAILY_AMOUNT decimal (39,18)
RAW_SRC
RAW_SRC_ID int, primary key
DAILY_SRC_ID int, foreign key
DATE_AND_TIME datetime
RAW_AMOUNT decimal (39,18)
<other fields/dimensions are skipped>
按DAILY_SRC_ID分组时的金额总和应相等但略有不同。
DAILY _AMOUNT被认为是正确的,所以我们在SQL端做的是通过这个过程计算EFFECTIVE_RAW_AMOUNT:
将RAW_AMOUNT_SUM和CORRECTION_RATIO添加到DAILY_SRC
SET DAILY_SRC.RAW_AMOUNT_SUM = Sum(RAW_SRC.RAW_AMOUNT)BY DAILY_SRC_ID
设置DAILY_SRC.CORRECTION_RATIO = DAILY_SRC.RAW_AMOUNT_SUM / DAILY_SRC.RAW_AMOUNT_SUM(没有零值)
将EFFECTIVE_AMOUNT添加到RAW_SRC
更新RAW_SRC.EFFECTIVE_AMOUNT = RAW_AMOUNT * CORRECTION_RATIO
现在,按DAILY_SRC_ID分组时,DAILY_AMOUNT等于Sum(EFFECTIVE_AMOUNT)。
RAW_SRC是映射到多维数据集的事实表,DAILY_SRC是一个维度。
这个EFFECTIVE_AMOUNT计算正在对数百万条记录(慢速)进行计算的问题,并且它阻止了多维数据集的增量处理,所以我们每次都需要加载一整天的记录。
如何在SSAS中实施此EFFECTIVE_AMOUNT计算(作为公式,或计算或其他)?