矩阵显示一年中的所有月份

时间:2014-01-13 10:41:28

标签: sql reporting-services ssrs-grouping ssrs-2008-r2

我有一个Web服务,我从中获取数据(不是我的,我无法更改)

数据采用以下格式

<DealMetrics>
  <DealId>1</DealId> 
  <DealName>ABC</DealName> 
  <FundAbbreviation>ABC</FundAbbreviation> 
  <NavYear>2012</NavYear> 
  <NavMonth>January</NavMonth> 
  <Nav>123</Nav>
.
.
.
</DealMetrics>

我有一个显示此性能数据的矩阵并且工作正常 - 我在该年有一个行组,在该月有一个列组。如果交易只运行了很短的时间,就会出现问题 - 我想显示所有月份而不管我们是否有任何数据 - 例如,如果交易在9月份开始,而我们在12月份我想要列标题显示为1月 - 8月以及Web服务中返回的数据。

有什么想法吗?

此致 安迪

2 个答案:

答案 0 :(得分:0)

可能不是最优雅的方式(我是SQL的相对新手!)但我会创建一个表,它实际上是您感兴趣的时期内所有月份的日历(使用递归CTE)然后只是将来自Web服务的查询结果加入到那个?

答案 1 :(得分:0)

假设您的指标最终出现在SQL Server表中,其中包含以下列:

-- Metrics table:
DealId
DealName
FullAbbreviation
NavYear
NavMonth
Nav

创建一个日历表,以保存您可能感兴趣的所有年份和月份。有关如何创建日历表的说明,请查看此帖子,例如:How to create a Calender table for 100 years in Sql

然后,当您拥有日历表时,请在您的指标表的外部联接中使用它,以便从日历表中获取所有年份和月份以及度量标准数据(如果有)。数据集中的查询可能如下所示:

SELECT DealId,
    DealName,
    FullAbbreviation,
    ISNULL(NavYear, Months.Year) AS NavYear,
    ISNULL(NavMonth, Months.Month) AS NavMonth,
    Nav
FROM
    (SELECT DISTINCT Year, Month, MonthNumber FROM Calendar) AS Months
LEFT JOIN Metrics ON Months.Year = Metrics.NavYear AND Months.Month = Metrics.NavMonth
ORDER BY NavYear, NavMonth