我正在使用SSRS 2008 R2。
这个很难描述。我的报告中有一份主要报告,下面有10份子报告。主要报告按收入排名前十大行业。子报告是排名行业内的详细报告。但他们需要充满活力。因此,对于8月,如果#1行业是AUTO,则AUTO的子报告显示在位置1.然后在9月,如果#1行业是零售,则零售的子报告需要出现在位置1中。例如...
August -->
MAIN REPORT: 1. AUTO
2. RETAIL
3. FOOD
SUB REPORTS: POS 1=AUTO, POS 2=RETAIL, POS 3=FOOD
September -->
MAIN REPORT: 1. RETAIL
2. FOOD
3. CONSUMER
SUB REPORTS: POS 1=RETAIL, POS 2=FOOD, POS 3=CONSUMER
请注意,子报表会根据主报表更改订单。子报告接受行业名称参数,但我不知道如何动态更改参数。
我尝试使用CHOOSE函数作为Industry参数的值,如果我传递一个显式的值字符串,它就可以工作。我希望能够将它传递给阵列。我尝试传递一个数据集名称,但它只是认为它是另一个字符串值。
=CHOOSE(1,"AUTO","TRAVEL","FINANCIAL",...)
LOOKUP
失败,因为我无法在参数语句中使用Field。
任何帮助表示赞赏!谢谢,全部!
- 由于我无法上传图片,因此我将尝试构建一个图表,向您展示其外观。想象一下SSRS的工作区域。有一份主要报告和几份子报告。我用点来模拟空间。请注意,子报告的顺序会更改为与主报告中的排名顺序相匹配。所以我需要做的是动态地将行业参数从主报告传递给子报告。
主要报告 - 8月
排名......行业......收入
1个........ ......... AUTO 333个$
2个........零售...... $ 222个
3 ........ FOOD ........ $ 111
子报告 - 八月
......... AUTO
排名......公司......收入
1个........ TOYOTA ........ $ 555个
2个........ ......... HONDA 111个$
3 ........雷克萨斯.......... $ 99
......... RETAIL
排名......公司......收入
1个........ WALMART ........ $ 45个
2 ........ .........目标35 $
3 ........ COSTCO .......... $ 25
......... FOOD
排名......公司......收入
1个........ KROGER ........ $ 888个
2个........微光............ $ 277个
3 ........食品城.... $ 150
主要报告 - 9月
排名......行业......收入
1个........ .........零售333个$
2个........ .........食品222个$
3 ........ CONSUMER ........ $ 111
子报告 - 9月
......... RETAIL
排名......公司......收入
1个........目标........ $ 555个
2 ........ JC PENNY ......... $ 111
3 ........ DILLARDS .......... $ 99
......... FOOD
排名......公司......收入
1 ........食品城........ $ 45
2个........ ......... KROGER 35个$
3 ........拉尔夫斯.......... $ 25
......... CONSUMER
排名......公司......收入
1 ........ P&安培克........... $ 888个
2个........金佰利............ $ 277个
3 ........ J&安培;Ĵ.......... $ 150
答案 0 :(得分:0)
创建2个报告 1)主要报告 2)子报告
注意:附上样本图像 - 输出 子报告的参数
主报表布局
子报表布局
2为子报告创建的参数
数据源
---------- Data Source for Main Report
IF NOT EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#Main'))
BEGIN
CREATE TABLE #Main
(
[Rank] INT,
Indusry VARCHAR(500),
Revenue INT,
[MONTH] int
)
INSERT INTO #Main VALUES(1,'AUTO',333,8)
INSERT INTO #Main VALUES(2,'RETAIL',222,8)
END
SELECT * FROM #Main
------------------ Data source for Sub Report
DECLARE @Industry VARCHAR(50)
SET @Industry ='Auto'
DECLARE @Month Int
SET @Month =8
IF NOT EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#AUTO'))
BEGIN
CREATE TABLE #AUTO
(
[Rank] INT,
Indusry VARCHAR(500),
Revenue INT,
[MONTH] int
)
INSERT INTO #AUTO VALUES(1,'TOYOTA',34,8)
INSERT INTO #AUTO VALUES(2,'HONDA',44,8)
END
IF NOT EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#RETAIL'))
BEGIN
CREATE TABLE #RETAIL
(
[Rank] INT,
Indusry VARCHAR(500),
Revenue INT,
[MONTH] int
)
INSERT INTO #RETAIL VALUES(1,'WALMART',55,8)
INSERT INTO #RETAIL VALUES(2,'TARGET',44,8)
END
IF @Industry ='Auto'
BEGIN
SELECT * FROM #AUTO WHERE [MONTH] = @Month
END
ELSE IF @Industry ='Auto'
BEGIN
SELECT * FROM #RETAIL WHERE [MONTH] = @Month
END
注意:基于条件数据将显示为从父报告传递的子报告..参数
答案 1 :(得分:0)
我认为,既然您希望它具有动态性并且您拥有所有部件 - 最简单的方法是:右键点击“行业”。主表中的字段,转到属性,选择"操作",单击单选按钮"转到报告" - 单击表达式按钮并添加IIF或Switch语句..
=IIF(Fields!Industry.Value = "Retail", Retailsubreportname, IIF(Fields!Industry.Value = "Auto", Autosubreportname, IIF(Fields!Industry.Value = "Food", Foodsubreportname, (this is the else- so anohter sr or a default reportname???)
or
=Switch(Fields!Industry.Value = "Retail","Retailsubreportname",Fields!Industry.Value = "Auto", "Autosubreportname") etc...
答案 2 :(得分:0)
解决了。 RandomShelly和Sanjay都给了我解决它的想法。基本上,我使用了Sanjay创建的数据集的想法,该数据集仅包含每个排名行业的数据。他使用了临时表,但我在报告中创建了永久数据集定义。因此,我知道排名第一的行业将始终位于第1位,我创建了一个名为REPORT_POSITION_1的数据集,其定义如下:
SELECT *
FROM TOP10_COMPANIES
WHERE NET = :Network
AND INDUSTRY = (SELECT DISTINCT INDUSTRY FROM TOP10_INDUSTRIES WHERE CURR_RANK=1 AND NET=:Network)
ORDER BY CURR_RANK

此数据集仅由第一个行业的数据组成,因此我根本不需要使用Industry参数。
创建各种数据集和报告后,我使用了RandomShelly创建动态链接的想法,通过超链接调用特定的行业报告。当我在仪表板中部署到SharePoint以供用户导航到他们正在寻找的信息时,这将是完美的。
感谢你们两位的帮助!