跨数据集或子报表重用Web服务响应

时间:2012-12-28 10:29:22

标签: reporting-services ssrs-2008

我正在使用Web服务作为我的XML数据源,它返回包含多个分层数据的实体,如下所示(为项目隐私而修改的代码);

public class UserData {
    // some scalar properties
    public string Id ...
    public string Name ...
    public string Surname ...

    // some navigational properties
    public Address address ...
    public CourseInfo[] courses ...
    public AwardInfo[] awards ...
}

显示同一报告中的所有实体信息,我可以在报告中创建不同的数据集来调用我的Web服务并过滤返回的服务响应的首选部分。

仅获取UserData属性:

<Query>
    <Method Name="GetUserData" Namespace="UserApp.ReportingServices"/>
    <SoapAction>UserApp.ReportingServices/IReportingService/GetUserData</SoapAction>
    <ElementPath IgnoreNamespaces="true">GetUserDataResponse{}/UserData</ElementPath>
</Query>

与UserData属性一起获取地址信息:

<Query>
    <Method Name="GetUserData" Namespace="UserApp.ReportingServices"/>
    <SoapAction>UserApp.ReportingServices/IReportingService/GetUserData</SoapAction>
    <ElementPath IgnoreNamespaces="true">GetUserDataResponse{}/UserData/Address</ElementPath>
</Query>

与UserData属性一起获取课程信息:

<Query>
    <Method Name="GetUserData" Namespace="UserApp.ReportingServices"/>
    <SoapAction>UserApp.ReportingServices/IReportingService/GetUserData</SoapAction>
    <ElementPath IgnoreNamespaces="true">GetUserDataResponse{}/UserData/Courses/CourseInfo</ElementPath>
</Query>

我的问题就在这里提出:如果我使用上面的多个数据集查询,我的报告将为每个数据集进行一个Web服务调用,尽管我的服务总是返回相同的XML响应,包括所有上述三个数据集所需的数据。

有没有办法重新使用其他数据集的查询返回的XML响应?如果可能的话,我的报告只会调用一次Web服务,数据集会过滤掉该XML响应的不同部分而不会一次又一次地调用Web服务。

如果无法做到这一点,那么在同一报告中显示多个分层数据的最佳做法是什么?我是否必须创建不同的Web服务来返回数据的不同层次结构部分?

1 个答案:

答案 0 :(得分:1)

Reporting Services数据集仅限于一个简单的行和列表 - 它们无法处理具有多个层次结构的数据,如您所述。

我会重新设计您的网络服务以反映这一点,可能会将其分为您描述的三组数据。然后将有三个Web服务调用,但没有重复的内容。它们也将并行执行,这可能比您当前的设计更有效。