Ok, so I’ve played around with Visio Services and created diagrams linked to data. Here's what I've learned so far: there is no way to dynamically create a Visio diagram. What I mean is, the Visio Services API won’t allow you to dynamically add shapes to a diagram. The shapes have to be on the diagram already when you publish the diagram. You also cannot modify any of the properties of the diagram or any of the diagram shapes’ properties through the Visio Services API. You can’t even dynamically link a row from your data source to a shape already on the diagram. The link from row to shape must be already defined prior to publishing.

So what can you do with the API? From what I can tell, there’s really only a few things:

You can read the linked data of any shape in your diagram. This is the data coming from the data source.

You can highlight or select any shape.

You can change the view (which page is shown) and zoom level of the diagram.

You can add an overlay. There are two types of overlays you can add here: a text overlay or an image overlay (note that when you’re looking at a workflow visualization, it uses this image overlay technique). Actually, I think you can technically create a third type of overlay (if the diagram is rendered w/ Silverlight as opposed to PNG). I think you can create a very limited XAML overlay that will be placed inside of a Canvas. That’s because the overlaying capabilities of the API uses createFromXaml() to create the other types of overlays (image and text).

So that’s what I’ve learned as I messed around with Visio Services. If anyone finds out anything else or if any of what I say is incorrect, let me know. So if you're looking for a way to create a dynamic diagram, maybe the best way to accomplish that is through Silverlight.