Ssrs 2008 如何在ssrs单参数中创建父子层次结构

Ssrs 2008 如何在ssrs单参数中创建父子层次结构,ssrs-2008,ssrs-2012,Ssrs 2008,Ssrs 2012,我对ssrs有一个疑问。 如何使用sql server数据库表在ssrs中使用表报表在单个参数中创建父层次结构。 表:环境管理计划详情: CREATE TABLE [dbo].[empdetails]( [empid] [int] NULL, [country] [varchar](50) NULL, [state] [varchar](50) NULL, [empname] [varchar](50) NULL, [deptno] [int] NULL

我对ssrs有一个疑问。 如何使用sql server数据库表在ssrs中使用表报表在单个参数中创建父层次结构。 表:环境管理计划详情:

CREATE TABLE [dbo].[empdetails](
    [empid] [int] NULL,
    [country] [varchar](50) NULL,
    [state] [varchar](50) NULL,
    [empname] [varchar](50) NULL,
    [deptno] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (1, N'india', N'ap', N'abc', 10)
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (2, N'india', N'ka', N'def', 20)
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (3, N'india', N'tn', N'de', 30)
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (4, N'usa', N'TX', N'deet', 50)
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (5, N'usa', N'NJ', N'ion', 60)
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (6, N'usa', N'WV', N'xy', 70)
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (7, N'uk', N'Belfast', N'io', 40)
GO
INSERT [dbo].[empdetails] ([empid], [country], [state], [empname], [deptno]) VALUES (8, N'uk', N'Wycombe', N'un', 50)
GO
基于上表:我希望在ssrs表报告中的单个参数中创建父层次结构,如下所示: 国家….>State:下拉列表如下所示:

paramername:countryandstateparamer:
                       india
                        ap
                        ka
                        tn
                      usa
                       nj
                       wv
                       tx
                       uk
                     Belfast
                     Wycombe
这里,如果我选择印度,则显示相应的州数据(ap、ka、tn)。 如果选择ap状态,则仅显示ap相关数据(ap) 如果我选择ap和ka状态,则仅显示ap和ka数据(ap和ka) 与其他国家和州类似

我试过如下: 数据集:从empdetails中选择*,其中country在@country中,state在(@state)中

数据集1:从EMP详细信息中选择不同的国家/地区 数据集2:从empdetails中选择不同的州,其中county=@country

之后,我进行两个参数映射

这里是预览时间,我得到了两个参数,一个是国家参数,第二个是州参数。但我只想创建一个参数,类似于使用sql server表数据的CouncryandState层次结构


请告诉我如何在ssrs报告中解决此问题,在单个参数中使用多层次结构。

没有内置的方法以SQL Server作为源构建层次结构(尽管SSAS支持此)

我们可以使用一些代码,第一部分可以使用视图来完成,但这应该可以工作,即使它看起来像很多代码,但大部分代码都是重复的(因此视图会更好)

反正, 首先,我们需要一个数据集来向参数列表提供数据

第一个数据集 创建名为
dsRegions
将数据集查询设置为

/* This could be built as a view to simplfy things */
-- create a table for the results
DECLARE @regions TABLE(RegionDisplayName varchar(50), RegionType varchar(1), RegionOrder decimal (10,3), RegionName varchar(50))

-- first get the countries in order and assign a sort order
INSERT INTO @regions
    SELECT *
            , ROW_NUMBER() OVER(ORDER BY country) AS CountryOrder
            , country
    FROM
        (SELECT DISTINCT Country, 'C' AS RegionType FROM empdetails) e

-- now get the states and assign the sort order from the country plus a sort oder for the state (supports 999 states/country)
INSERT INTO @regions
SELECT 
    '  ' + state, 'S' -- indent the states so they look better in the parameter list
    , RegionOrder + CAST(ROW_NUMBER() OVER(PARTITION BY c.RegionName ORDER BY state) as decimal(10,3)) / 1000 AS StateOrder
    , state
 FROM @regions c
    JOIN empdetails e on c.RegionName = e.country

-- finally output the results
SELECT * FROM @regions order by regionorder
参数:我们称之为
@previon
因此,创建一个名为
pRegion
的参数,并将其可用值数据集设置为
dsRegions

重要将值设置为
RegionName
,将标签设置为
RegionDisplayName

这将为用户提供一个有序的缩进列表

主数据集查询 主数据集查询重复大部分参数数据集查询

唯一的区别是过滤国家和州的最终输出,如果其中任何一个匹配,它将返回记录。查询如下

-- create a table for the results
DECLARE @regions TABLE(RegionDisplayName varchar(50), RegionType varchar(1), RegionOrder decimal (10,3), RegionName varchar(50))

-- first get the countries in order and assign a sort order
INSERT INTO @regions
    SELECT *
            , ROW_NUMBER() OVER(ORDER BY country) AS CountryOrder
            , country
    FROM
        (SELECT DISTINCT Country, 'C' AS RegionType FROM empdetails) e

-- now get the states and assign the sort order from the country plus a sort oder for the state (supports 999 states/country)
INSERT INTO @regions
SELECT 
    '  ' + state, 'S' -- indent the states so they look better in the parameter list
    , RegionOrder + CAST(ROW_NUMBER() OVER(PARTITION BY c.RegionName ORDER BY state) as decimal(10,3)) / 1000 AS StateOrder
    , state
 FROM @regions c
    JOIN empdetails e on c.RegionName = e.country

-- output
SELECT 
        e.*
    FROM empdetails e
    WHERE country in (@pRegion)
            or state in (@pRegion)
我已经做了一个简单的测试,这是预期的工作,所以如果你选择英国和得克萨斯州,你会得到贝尔法斯特,威康比和得克萨斯州的记录

希望这有帮助