如何从两种不同粒度的数量计算有效量?

时间:2014-08-26 12:43:40

标签: sql-server database-design ssas

我们在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:

  1. 将RAW_AMOUNT_SUM和CORRECTION_RATIO添加到DAILY_SRC

  2. SET DAILY_SRC.RAW_AMOUNT_SUM = Sum(RAW_SRC.RAW_AMOUNT)BY DAILY_SRC_ID

  3. 设置DAILY_SRC.CORRECTION_RATIO = DAILY_SRC.RAW_AMOUNT_SUM / DAILY_SRC.RAW_AMOUNT_SUM(没有零值)

  4. 将EFFECTIVE_AMOUNT添加到RAW_SRC

  5. 更新RAW_SRC.EFFECTIVE_AMOUNT = RAW_AMOUNT * CORRECTION_RATIO

  6. 现在,按DAILY_SRC_ID分组时,DAILY_AMOUNT等于Sum(EFFECTIVE_AMOUNT)。

    RAW_SRC是映射到多维数据集的事实表,DAILY_SRC是一个维度。

    这个EFFECTIVE_AMOUNT计算正在对数百万条记录(慢速)进行计算的问题,并且它阻止了多维数据集的增量处理,所以我们每次都需要加载一整天的记录。

    如何在SSAS中实施此EFFECTIVE_AMOUNT计算(作为公式,或计算或其他)?

0 个答案:

没有答案