首页 > 解决方案 > 访问组内的文本框

问题描述

我知道这必须在以前被问过,但我甚至缺乏形成查询的词汇。如果有人可以指导我正确的方向,将不胜感激。

我有一个相对简单的 SSRS 矩阵。

我正在返回十年的数据,在 RowGroup 中按 Location 分组,在 ColumnGroup 中分组

-----------------------
|      |      |  YEAR |
-----------------------
| TYPE | NAME |  Count|  <<==  ReportItems!Textbox1
-----------------------

这将是提供我报告的示例数据:

------------------------------
|Type|Name    |Year   |Count |
------------------------------
| 1  |Bob's   |2007   |4126  |
-----------------------------|
| 1  |Bob's   |2008   |4031  |
-----------------------------|
| 1  |Bob's   |2009   |4268  |
-----------------------------|
| 1  |Bob's   |2010   |4504  |
-----------------------------|
| 1  |Bob's   |2011   |4605  |
-----------------------------|
| 1  |Bob's   |2012   |4888  |
-----------------------------|
| 1  |Bob's   |2013   |4761  |
-----------------------------|
| 1  |Bob's   |2014   |4689  |
-----------------------------|
| 1  |Bob's   |2015   |4573  |
-----------------------------|
| 1  |Bob's   |2016   |4388  |
-----------------------------|
| 1  |Bob's   |2017   |4702  |
------------------------------

结果与此类似:

------------------------------------------------------------------------------------------- 
|    |       | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 1 year change| 3 year change| 5 year change| 10 year change|
------------------------------------------------------------------------------------------- 
| 1  | Bob's | 4126 | 4031 | 4268 | 4504 | 4605 | 4888 | 4761 | 4689 | 4573 | 4388 | 4702 |          -5% |        + 3 % |          + 5%|         + 9%  |
------------------------------------------------------------------------------------------- 
| 1  | Jim's | 5156 | 5031 | 5568 | 5505 | 5605 | 5888 | 5761 | 5689 | 5573 | 5388 | 5705 |  bla-bla-bla |  bla-bla-bla |  bla-bla-bla |  bla-bla-bla  |
------------------------------------------------------------------------------------------- 
| 2  | Sam's | 3126 | 3031 | 3268 | 3503 | 3605 | 3888 | 3761 | 3689 | 3573 | 3388 | 3702 |  bla-bla-bla |  bla-bla-bla |  bla-bla-bla |  bla-bla-bla  |
-------------------------------------------------------------------------------------------

如何引用特定年份的数据单元格?
一旦我这样做了,我就可以执行计算了。

感谢任何花时间回复的人。

标签: reporting-services

解决方案


首先,不要担心答案的长度!,我只是倾向于添加很多解释,过程很简单......

因此,我创建了一个与您的示例类似的数据集。我的样本数据只到 2016 年,所以样本报告只会从 2006 年到 2016 年。我的样本数据也是基于国家的。

下面的查询会产生你想要的数据,我会在下面解释..

SELECT 
       v.*
       , ([Count] - LAG([Count]) OVER(PARTITION By [Location] ORDER BY [Year]))/ LAG([Count]) OVER(PARTITION By [Location] ORDER BY [Year]) as Chg1
       , ([Count] - LAG([Count], 3) OVER(PARTITION By [Location] ORDER BY [Year]))/ LAG([Count], 3) OVER(PARTITION By [Location] ORDER BY [Year]) as Chg3
       , ([Count] - LAG([Count], 5) OVER(PARTITION By [Location] ORDER BY [Year]))/ LAG([Count], 5) OVER(PARTITION By [Location] ORDER BY [Year]) as Chg5
       , ([Count] - LAG([Count], 10) OVER(PARTITION By [Location] ORDER BY [Year]))/ LAG([Count], 10) OVER(PARTITION By [Location] ORDER BY [Year]) as Chg10
    FROM (
          SELECT [Location], [Year] , SUM([Count]) AS [Count]
             FROM soSampleData d
             WHERE [Year] BETWEEN 2006 and 2016
             GROUP BY [Location], [Year]
       ) v

所以子查询 (v) 只是按位置和年份对数据进行分组。如果您的基础数据已经是这样,那么您可以将整个子查询替换为FROM myTableName v.

在 SELECT 中,我们从 v 中获取所有列以及百分比变化值。举chg3个例子,这行写着..

([Count] - [Count from 3 years ago]) / [Count from 3 years ago]) 作为Chg3,显然可以根据您的计算要求进行更改!:)

[3年前的计数是通过使用LAG功能实现的。LAG([Count], 3) OVER(PARTITION By [Location] ORDER BY [Year])表示当按 [Year] 排序时,从 [Location] 中的前 3 行获取 [Count] 列。因此,对于 2015 年阿根廷,这将获得 2012 年阿根廷。

我建议您在报告中使用之前在 SSMS 中对此进行测试,以确保您获得正确的结果。

报告

创建一个新报告,使用上述查询添加一个新数据集。我在这里使用了默认名称“DataSet1”。

添加一个矩阵,将行组设置为 [Location] ,将列组设置为 [Year] ,将数据单元格设置为 [Count]。

接下来将 Chg1 到 chg10 字段拖到数据单元格的右侧,这将在组内添加新列。

设计应该是这样的...... 在此处输入图像描述

接下来我们要隐藏 %chg 列,除非它是列组的最后一个实例(在我的情况下是 2016 年,在你的情况下是 2017 年)

接下来,对于 4 %change 列中的每一个,右键单击灰色列标题,选择“列可见性”并将表达式设置为

=Fields![Year].Value <> MAX(Fields![Year].Value, "DataSet1")

当 [Year] 与名为“DataSet1”的整个数据集的最大 [year] 不同时,这基本上将“隐藏”属性设置为 True。注意这是区分大小写的

当我们运行报告时,我们得到以下输出。(我添加了一些单元格格式来清理内容,[count] 单元格设置为“n0”,百分比单元格格式设置为“p1”)

在此处输入图像描述

希望这足够接近给你你想要的。


推荐阅读