I'm testing upgrading SQL/SSRS from SQL 2008 R2 SP2 to SQL 2012 SP1 (11.0.3349). Most of my reports' data source is a Dynamics NAV 2009R2 SQL DB where most of the number fields are decimal(38,20). I'm finding that when I have a zero value in a column on a report that the report loses formatting and throws xml exceptions when rendered to Excel. So a field formatted for currency would become 0.00000000000000000 and renders as text in Excel 2010, but if there's a value in the cell then the formatting is fine. I'm looking on the MS site and there is documentation that this is an Excel issue and was supposed to be fixed in a CU for Office 2010 Excel, but I didn't see it in the release notes for the CU. The error is "Excel found unreadable context.." There are no errors in the report itself only rendering to Excel. Rendering to other formats is fine.
I think I've found a workaround where I change the value in a report by using an if statement to make it equal to zero (IIF(value=0,0,value), but I've got several hundred reports in my library and I wouldn't even know how many cells I'd have to change.
I'm just looking to see if anyone else has ran into this issue during their upgrade testing process.
I can repeat the error in a new report if I use as a Dataset
Select Cast(0 as decimal(38,20)) d1 , CAST(0 as decimal(10,2)) d2
Export to Excel gets this xml error when opening the rendered file
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>< recoveryLog xmlns="<logFileName>error056200_05.xml</logFileName><summary>Errors">http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error056200_05.xml</logFileName><summary>Errors were detected in file 'C:\Users\...ME...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\P42V8D4D\_TestExcel.xlsx'</summary><repairedRecords summary="Following is a list of repairs:"><repairedRecord>Repaired Records: Cell information from /xl/worksheets/sheet1.xml part</repairedRecord></repairedRecords></recoveryLog>
The d1 column is now formatted as text 0.00000000000000000000 instead of as currency and the d2 column is formatted correctly
I have this same problem! We just updated from SS2008R2 to SS2012 SP2.
My data was converted to a decimal but without precision and scale. When a value of 0 was returned, there appeared to be "too many" decimals. I added precision and scale to the data and the problem went away.
[BurnRate] =case when DATEDIFF(m,cf.StartDate, dateadd(d,2,cf.EndDate)) = 0 --using 2 days here to allow for leap yearsthen convert(decimal(2,1), 0)else convert(decimal (15,5), convert(decimal(15,0),tf.Funding)/convert(decimal(2,0),(DATEDIFF(m,cf.StartDate, dateadd(d,2,cf.EndDate))))) --using 2 days here to allow for leap yearsend
Posted: 24 days ago
We ran into this exact same issue and explicitly CASTing the values to define the precision and scale did the trick. This post on BIDN was the only one that I could find that was on the correct track for solving this issue.