Thanks for the explanation, Eric.
I'm sorry if I muddied the waters with the reference to IEEE-754. The basic issue is that our BI tool, Cognos, is 32-bit and can accommodate numbers only to a precision of 15 digits. There is an explanation for that in an IBM support doc, which, as I read it, attributes the limitation to IEEE-754.
Using the Cognos modeling tool, Framework Manager, we create a metadata layer that includes how tables should be joined. Of course, the joins between the Canvas Data tables make extensive use of the ids. When possible, Cognos pushes the joins to the database, which in our case is Oracle and 64-bit. When that happens (i.e., when a join is executed in a query run on the database), everything works fine.
But in our model, we have combined the Canvas data with data from other systems, including our student system, to provide it with more context. That means the data is coming from multiple databases, which in turn means that Cognos cannot push all the queries to "the" database. The result is that some joins are executed locally on the Cognos server--including joins between Canvas tables. When that happens, the ids do not do their job. They are essentially rounded up to the 100s place, which means, if we're joining files to courses on the course id, for example, there can be a cross product of multiple courses. All the course ids that get rounded to the same number get joined to each other. Not good.
Had we created a data mart, pulling the data from the various systems into a single database, we would have avoided the problem, but in the name of expediency, we opted to bring it together in the Cognos model instead. Didn't turn out to be very expedient, but we're too far in at this point to go back and do it the other way.
So, we'll follow your suggestion and treat the ids as strings.
Thanks again.
This discussion post is outdated and has been archived. Please use the Community question forums and official documentation for the most current and accurate information.