Os SSRs não podem filtrar condicionalmente os valores “nil” da fonte de dados XML?
-
19-08-2019 - |
Pergunta
Eu tenho um relatório no SSRS 2008 que está usando um serviço da Web como uma de suas fontes de dados. A aparência básica do XML retornada é
<table>
<row>
<column1>data</column1>
<column2 xsi:nil="true" />
<column3>data</column3>
</row>
</table>
Quaisquer tags com o atributo "nil" estão aparecendo em branco no relatório. Eu gostaria de substituir os espaços em branco por um traço. Como é um campo numérico e zero tem significado no relatório, não posso simplesmente alterar o serviço da web para retornar zero ou uma string vazia. Eu tentei fazer vários tipos de comparação condicional para trocá -los, mas todos aparecem como "#error" no relatório:
=iff(Field!column2.Value Is Nothing, "-", Field!column2.Value)
=iff(IsNothing(Field!column2.Value), "-", Field!column2.Value)
=iff(Field!column2.Value = "", "-", Field!column2.Value)
=iff(CStr(Field!column2.Value) = "", "-", Field!column2.Value)
Alguma ideia?
Editar: Não era a verificação vazia que estava falhando, era um condicional aninhado dentro do primeiro IIF. Uma vez removido, pude fazê -lo funcionar.
Solução
Eu não tive problemas para usar:
=Iif(cstr(First(Fields!RegInceptionDate.Value, "spimRptPerfSummary")) = "", "-", First(Fields!RegInceptionDate.Value, "spimRptPerfSummary"))
É assim que meu conjunto de dados se parece:
<Query>
<Method Namespace="http://www.abc.com/" Name="TWRPerformanceSummary"/>
<SoapAction>http://www.abc.com/TWRPerformanceSummary </SoapAction>
<ElementPath IgnoreNamespaces="true">
TWRPerformanceSummaryResponse/TWRPerformanceSummaryResult/diffgram/NewDataSet/table{PkRegistration, InceptionDate(date),RegInceptionDate(string)}
</ElementPath>
</Query>
Minha expressão estava em uma caixa de texto, é por isso que a envolvi em um primeiro () no conjunto de dados. Eu lancei o ReginceptionDate no conjunto de dados como string (é realmente uma data, mas desde que volta a nulo não importava). Não tenho certeza se o cstr () na expressão é necessário, pois tenho o elenco no próprio conjunto de dados.