· Jun 29, 2018

Question regarding DeepSee DSTIME


I would like to know if DeepSee has some feature regarding synchronization which could help me with this:

I have two tables, TableA and TableB in a 1:n relationship, and one cube for each table, CubeA and CubeB.
CubeA have a list dimension based on records from TableB.
Both tables has DSTIME parameter set to "AUTO".

Some application proccess updates data only on TableB, leading an entry on ^OBJ.DSTIME global for synchronization of CubeB.
However, as the TableA wasn't updated, there isn't such entry for CubeA.

Thus, filtering on CubeA dimension which depends on records from TableB is affected.

Currently, I'm workarounding that using ##class(%DeepSee.Utils).%SetDSTimeIndex() method in callbacks and triggers on TableB, forcing synchronization on CubeA.
Would DeepSee have some kind of automation in handling such situation?

Thank you

Discussion (2)2
Log in or sign up to continue

DeepSee does not have anything built in to automate this behavior. Depending on how the relationship is defined, this could cause significant overhead (also if more than 1 relationship is defined, this grows even more). The recommended way of doing this is exactly as you have done.

An alternative approach is to implement %OnProcessFact and have it process any related cubes that need to be updated. The good thing about this approach is that it saves you time during your main application while saving records, but the downside is that it also requires CubeB to be synchronized at the same rate as CubeA.

Using the Cube Manager, you would be able to write some "pre-synchronize code" that would run queries to find records in CubeA that need to be updated and calling ##class(%DeepSee.Utils).%SetDSTimeIndex() here. This is quite similar to what it sounds like you are doing now, but this lets you avoid using triggers and building this process into the Synchronize itself.