0

我有一个非常简单的事实/维度架构,可用于 SSAS 2008 R2 数据库中的房地产数据。

我想构建一个结果集,概述房屋首次出售的时间、售价以及房屋在每月增量出售后的价值。

请考虑以下维度和措施:

方面:


暗房号

门牌号码


估值日期

估值日期


销售日期

销售日期

措施:

SoldAmount
CurrentValue
CountofHouse

  1. [DimHouseNumber].[HouseNumber] 属性层次结构表示门牌号
  2. [DimSoldDate].[SoldDate] 属性层次结构表示房屋出售的日期。
  3. [DimValuationDate].ValuationDate 属性层次结构表示房屋在出售后评估的日期。
  4. [SoldAmount] 度量代表房屋的原始售价。
  5. [CurrentValue] 度量表示基于所讨论的 [DimValuationDate].ValuationDate 属性层次结构成员出售后房屋的当前价值。

话虽如此,请考虑以下结果集,其中包含基于上述维度和度量的所有可能的元组和度量:


门牌号 | 出售日期 | 售出金额 | 估值日期 | 当前值

 1                  1/3/2011        $100,000.00     1/31/2011           $100,000.00
 1                  1/3/2011        $100,000.00     2/28/2011           $110,000.00
 1                  1/3/2011        $100,000.00     3/31/2011           $112,000.00
 2                  1/20/2011       $50,000.00      1/31/2011           $51,000.00
 2                  1/20/2011       $50,000.00      2/28/2011           $53,000.00
 2                  1/20/2011       $50,000.00      3/31/2011           $75,000.00

可以在上面看到,每个月的销售日期和销售金额值都保持不变,所讨论的门牌号码是根据基础事实表的配置方式进行评估的。

插入相应事实表的记录代表房屋售出后的每月估值。

话虽这么说,我想将上面的结果集变成如下所示:


门牌号 | 估值日期 | 当前值

 1                    1/3/2011        $100,000.00 
 1                    1/31/2011       $100,000.00 
 1                    2/28/2011       $110,000.00 
 1                    3/31/2011       $112,000.00 
 2                    1/20/2011       $50,000.00 
 2                    1/31/2011       $51,000.00 
 2                    2/28/2011       $53,000.00 
 2                    3/31/2011       $75,000.00 

你可以在上面看到,我正在尝试创建一个按时间顺序排列的时间线,说明房子的价值,包括出售时的价值。

从本质上讲,对于每所售出的房屋,我想要 1 条记录来概述房屋的价值和估价日期。

您可以看到,上述 2 个结果集的不同之处在于,上述第 2 个结果集包括房屋的出售日期以及作为“估价”期间的一部分出售的价格。上面的第一个结果集仅包括房屋出售后的日期。

我需要根据上面概述的第一个结果集中包含的数据生成上面的第二个结果集。

不幸的是,我没有在 OLTP 端或 SSAS 多维数据集本身上修改源数据的奢侈,因此我需要一个仅 MDX 的解决方案。

如果有人可以根据我上面概述的维度和措施向我展示完成此任务所需的 MDX 声明,我将不胜感激。

非常感谢您的帮助!

4

2 回答 2

0

假设您在 [DimValuationDate] 中有可用的所有天数,您可以尝试以下计算度量:

with 
    member [Measures].[Value] as 
           iif( not isEmpty( ( [Measures].[Current Value], [DimValuationDate].currentMember )),
                ( [Measures].[Current Value], [DimValuationDate].currentMember ),
                iif( not isEmpty( ([Measures].[Sold Amount], LinkMember( [DimValuationDate].currentMember, [DimSoldDate] ))),
                     ([Measures].[Sold Amount], LinkMember( [DimValuationDate].currentMember, [DimSoldDate] )),
                     null
                )
            )

select 
    [Measures].[Value] on 0,
    non empty [DimHouseNumber].members * [DimValuationDate].members on 1

from 
    [my-cube]
于 2012-05-20T00:54:29.150 回答
0

这似乎是一个简单的 UNION 查询:

select *
from ((select distinct HouseNumber, SoldDate as ValuationDate, CurrentValue
       from fact
      ) union all
      (select HouseNumber, ValuationDate, CurrentValue
       from fact
      )
     ) f
order by HouseNumber, ValuationDate

此查询将销售数据与估值数据相结合。

于 2012-05-20T04:00:37.597 回答