【问题标题】:Matrix to show all months of the year显示一年中所有月份的矩阵
【发布时间】:2014-01-13 10:41:27
【问题描述】:

我有一个从中获取数据的 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 服务中返回的数据。

有什么想法吗?

问候 安迪

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      假设您的指标最终出现在包含以下列的 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-17
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 2015-08-17
        • 1970-01-01
        相关资源
        最近更新 更多