reporting-services - 访问组内的文本框
问题描述
我知道这必须在以前被问过,但我甚至缺乏形成查询的词汇。如果有人可以指导我正确的方向,将不胜感激。
我有一个相对简单的 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 |
-------------------------------------------------------------------------------------------
如何引用特定年份的数据单元格?
一旦我这样做了,我就可以执行计算了。
感谢任何花时间回复的人。
解决方案
首先,不要担心答案的长度!,我只是倾向于添加很多解释,过程很简单......
因此,我创建了一个与您的示例类似的数据集。我的样本数据只到 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”)
希望这足够接近给你你想要的。
推荐阅读
- haskell - 这个简单的 do notation desugar 是为了什么?
- python - 为什么我们需要'for循环'的变量?
- apache - 如何在 dotnet 命令运行的 ASP.NET Blazor WebAssembly 6 中使用子域、虚拟主机(没有显式端口 80、5000、5001)?
- sql - 按小时汇总记录 + 添加子查询
- python - Sublime Text 4:Tools>Build 什么都不做
- julia - 在 Julia 中推广 nlsolve 函数的输入
- python - Django - 获取切片后无法过滤查询
- linux - buildroot 我得到一个 xorg 黑屏
- vuejs3 - 由于插件未重新加载,Vue 3 本地组件库 (sfc) 开发无法正常工作
- next.js - 如何在 next.js 项目中从 url 导入模块