2008-11-10 20 views
3

我正在使用Reporting Services 2005中的XML数据源功能,但在丢失数据时遇到了一些问题。当一行中的第一列没有值时,SSRS忽略整列!为什么SSRS会忽略Web方法返回的某些列的数据?

Web方法请求是非常简单的:

<Query> 
    <Method Name="GetIssues" 
Namespace="http://www.mycompany.com/App/"> 
    </Method> 
    <SoapAction>http://www.mycompany.com/App/GetIssues</SoapAction> 
    <ElementPath IgnoreNamespaces="true">*</ElementPath> 
</Query> 

同样,响应很简单:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <GetIssuesResponse xmlns="http://www.mycompany.com/App/"> 
     <GetIssuesResult> 
     <Issue> 
      <Title>ABC</Title> 
      <RaisedBy /> 
      <Action>Do something</Action> 
     </Issue> 
     <Issue> 
      <Title>ABC</Title> 
      <RaisedBy>Jeff Smith</RaisedBy> 
      <Action>Do something</Action> 
     </Issue> 
     </GetIssuesResult> 
    </GetIssuesResponse> 
    </soap:Body> 
</soap:Envelope> 

在这个例子中RaisedBy列将是完全空的。如果'问题'被颠倒过来,所引发的首先是有价值的,那么没有问题。有任何想法吗?

+0

你有可能发布RDL吗? – 2008-11-10 17:49:05

回答

7

在查询本身中,请尝试明确定义您的列,而不是让SSRS为您确定它们。

换句话说,那就是你有:

<ElementPath IgnoreNamespaces="true">*</ElementPath> 

更换*的东西,如:

<ElementPath IgnoreNamespaces="true">GetIssues/GetIssuesItemsResult/listitems/data/row{@Title,@RaisedBy,@Action}</ElementPath> 

当然,这确切的XPath可能不适合你的正确的例子。

+0

谢谢!正确的XPath是:GetIssuesResponse/GetIssuesResult/Issue {Title,RaisedBy,Action} – 2008-11-10 18:18:41

0

是否可以消除XML中的NULL?将它们替换为空字符串?那么你将不必与SSRS搏斗。

如果XML是从数据库调用生成的,那很容易做到(SQL Server中的ISNULL)。

相关问题