SSRS参数动态传递给其他报告

时间:2014-11-06 17:47:22

标签: ssrs-2008

我正在使用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

3 个答案:

答案 0 :(得分:0)

创建2个报告 1)主要报告 2)子报告

注意:附上样本图像 - 输出 Output 子报告的参数

ParameterSelect for SubReport 主报表布局

MainReport Layout 子报表布局

SubReport Layout 2为子报告创建的参数

Create 2 Parameter in SubReport

数据源

---------- 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 



 注意:我的源数据库是Oracle所以":"参数的语法是正确的。自发布以来,我添加了网络参数。由于基础表只包含数据的快照,因此我不需要月份参数。

此数据集仅由第一个行业的数据组成,因此我根本不需要使用Industry参数。

创建各种数据集和报告后,我使用了RandomShelly创建动态链接的想法,通过超链接调用特定的行业报告。当我在仪表板中部署到SharePoint以供用户导航到他们正在寻找的信息时,这将是完美的。

感谢你们两位的帮助!