MDX 解决方案:每个组提取 1 条记录并添加到主结果集



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

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

请考虑以下维度和措施:

尺寸:


暗房号码

门牌号


暗淡估值日期

估值日期


暗日日期

销售日期

措施:

销售量
当前价值
伯爵府

  1. [暗屋号码]。[门牌号] 属性层次结构表示门牌号
  2. [暗淡销售日期]。[售出日期] 属性层次结构表示房屋的售出日期。
  3. [DimValuationDate]。估价日期属性层次结构表示房屋出售后的估价日期。
  4. [成交量]衡量标准代表房屋原始售价。
  5. [
  6. 当前价值]衡量标准表示根据[DimValuationDate]出售房屋后的当前价值。有问题的评估日期属性层次结构成员。

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


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

 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 个结果集的

区别在于,上面的第二个结果集包括房屋的出售日期以及作为"估值"期的一部分出售的价格。 上面的第一个结果集仅包括房屋出售后的日期。

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

遗憾的是,我无法在 OLTP 端或 SSAS 多维数据集本身上修改源数据,因此需要仅针对 MDX 的解决方案。

如果有人能根据我上面概述的维度和度量向我展示完成此操作所需的 MDX 语句,我将不胜感激。

非常感谢您的帮助!

假设您有 [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]

这似乎是一个简单的 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

此查询将销售数据与评估数据合并。

相关内容

  • 没有找到相关文章

最新更新