Peter Steiwer · Dec 3, 2025 go to post

I am not seeing the source data here, can you share that again?

Also, what does your build output show? You only have a count of 5, which means you either only have 5 rows in your table OR the rest are getting errors. If they are getting errors, we should be able to learn more about what is wrong with it

Peter Steiwer · Jun 6, 2025 go to post

It turns out this was a bug with parallel processing where the negative numbers in the data were more negative than the null marker caused data to be skipped. Development is fixing this

Peter Steiwer · Apr 29, 2024 go to post

Hi Virat,

In %OnGetFilterMembers, you will have access to pFilter, which will contain the name of your filter, "SubjectName" in this example. You will also have access to pMembers, which is an array of members that the SearchBox dropdown will use in the UI. By default, this will contain the results from sql="SELECT DISTINCT SubjectName FROM BI.Invoice". You will also have access to pFilterValues, which contains an array of already selected values. In your case, "Virat and Big Show". You would then need to use this information to remove values from the pMembers array to reduce the available members.

By default, IRIS BI does this "member filtering" for you. The use of KPIs is very customized, so it requires some additional custom logic to allow this behavior

Peter Steiwer · Jan 13, 2023 go to post

I tried this and it worked:

Parameter TestParam = "Test";

Property TestCalc As %String [ SqlComputeCode = { Set {*} = ..#TestParam}, SqlComputed ];

[SQL]SAMPLES>>select * from DC.SQLCompute
1.      select * from DC.SQLCompute
 
ID      TestCalc
1       Test

Peter Steiwer · Oct 7, 2022 go to post

Hi Ahmad,

These functions do not exist in MDX, please see the MDX function documentation here: https://docs.intersystems.com/iris20221/csp/docbook/Doc.View.cls?KEY=D2…

You likely want to use the %OR function: https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls…

Using %OR would allow you to reference multiple members, for example:
Expression="%OR({[Demographics].[H10].[Citizenship].&[USA],[Demographics].[H10].[Citizenship].&[U.S.A],[Demographics].[H10].[Citizenship].&[US]})"  

Peter Steiwer · Mar 10, 2022 go to post

Thanks, this works. I did have to click the "+" icon and add a new namespace to the Explorer, since adding the namespace from InterSystems Server Manager did not pull it into the ObjectScript Explorer. This is kind of an unusual case since I don't necessarily have a project/workspace for the generated class I want to view. If I already had one, then I wouldn't need to use the namespace explorer.

Peter Steiwer · Jul 20, 2021 go to post

Depending on how specific you need to make your sorting, you can also modify the custom drilldown spec with ORDER functions. If needed, you could change the measure and the direction for each level. For example:

ORDER([Product].[P1].[Product Category].Members,Measures.[%COUNT],BDESC)
ORDER([Outlet].[H1].[Region].Members,Measures.[%COUNT],BDESC)
ORDER([Channel].[H1].[Channel Name].Members,Measures.[%COUNT],BDESC)

Peter Steiwer · Jun 15, 2021 go to post

When executing a query, DeepSee will store intermediate and final results in the cache globals. As the engine was trying to create a new session, it looks like it could not access the database in e:\hs-db\tfoms\. Either this database is mounted read only (in this case you will need to create some DeepSee mappings) or the user executing the query does not have r/w permissions on this database.

Peter Steiwer · Jun 11, 2021 go to post

What database is in /hs/nehi/ ? These protect errors suggest the user may not have permissions on this database

Peter Steiwer · May 27, 2021 go to post

I just tested and it worked OK for me. I used the following:

Class:

 Class DC.TestImport Extends %Persistent
{ 
Property TS As %TimeStamp; 
Property Bool As %Boolean; 
}

CSV:

2021-05-27 17:43:15,0
2021-05-27 17:51:13,0
2021-05-27 17:53:11,1

Import Settings:

File Name:
C:\Users\psteiwer\Documents\DC\testimport.csv
Charset:
<Device Default>
Schema:
DC
Table:
TestImport
Columns are delimited by:
Special Character: ,
First row contains column headers?
No
String quote:
double
Date format:
YYYY-MM-DD
Time format:
hh:mm:ss
TimeStamp format:
ODBC Format
Disable validation?
No
Defer Index Building with %SortBegin/%SortEnd:
No
Peter Steiwer · May 26, 2021 go to post

This now works after modifying my objectscript.export "folder" setting. It was previously "src" and is now "".

Peter Steiwer · May 26, 2021 go to post

Yes, the second class is in the same project as the first and both exist locally on the file system

Peter Steiwer · May 26, 2021 go to post

When using 1.1.6 and 1.0.11, I am still getting a read only copy when I use Go to Definition. Are there any settings that need to be configured in a specific way?

Peter Steiwer · Apr 30, 2021 go to post

We also have a sample that uses %InjectFact() inside of the %OnBuildCube() Method. Documentation here.

This injects the cities "Cambridge", "Chelsea", and "Somerville" into the HoleFoods cube. These city members will exist in the dimension table, but there is no associated data (there could be, but in this example there isn't). When using the City level on rows and the default NONEMPTY, we see the following:

When we turn "Show Empty" on:

We now see these members with no data:

Peter Steiwer · Apr 20, 2021 go to post

Hi Evgenii,

I noticed this question has not been answered yet, is there a specific reason why you are looking into using a Data Connector? Typically before recommending a Data Connector, we would recommend that a new class is created and populated from a similar query that your Data Connector would have used. This allows for a lot more standard cube usage. Standard options like synchronization and detail listings would be available without needing to implement custom code to modify the SQL and they wouldn't require you to worry about using $$$RESTRICT

Peter Steiwer · Apr 16, 2021 go to post

I looked into these suggestions, but I still can't make it work. I see that when I am editing a file and I hover over the name on the tab at the top, it says "C:\Users\....\PivotSubscriptions\Subscription.cls". After using "Go To Definition", the new class opens with the path of "/PivotSubscriptions/EventLog.cls"

Peter Steiwer · Apr 16, 2021 go to post

By default, changing the display of the Week members is not available. However, you can create a custom time level by extending %DeepSee.Time.WeekYear and overriding a couple methods. Then you can change your timeFunction value in your cube definition. Here is a sample I put together that was MINIMALLY tested on a newer version than the version you noted here:

 Class CustomTime.WeekRange Extends %DeepSee.Time.WeekYear
{ /// Return the user-visible name of this level.
ClassMethod %GetName() As %String
{
Quit "WeekRange"
} /// Convert a level key value to a display value.
ClassMethod %KeyToValue(pKey As %Integer, pFormat As %String = "", pOffset As %String = "") As %String
{
Set tValue = "" Set tSC=..%KeyToBaseRange(pKey,.tStart,.tEnd,pOffset)
Set tValue=$zd(tStart)_"-"_$zd(tEnd-1)
Quit tValue
} /// Convert a $H value to the logical value used for this level.
/// This is used within the computed field logic for properties
/// within a fact table based on this level.<br/>.
/// In this case, we convert $H to an ISO Week: YYYYWnn
ClassMethod %Convert(pTime As %DeepSee.Datatype.dateTime, pTimeOffset As %String = "") As %Integer [ CodeMode = expression ]
{
$S(pTime="":"",pTime=$$$DeepSeeNullTimeMarker:$$$DeepSeeNullTimeMarker,1:##class(%DeepSee.Time.WeekYear).ISOWEEK(pTime))
} }

Peter Steiwer · Mar 17, 2021 go to post

This InterSystems IRIS connector will look at the Tables and BI Cubes that are defined on the system. I believe you can use the ODBC connector if you want to write your own SQL. Another option could be to define a view inside of IRIS and use the view with this connector

Peter Steiwer · Mar 15, 2021 go to post

Hi Evgeny,

I have previously played around with this concept of a custom action manager that would allow mapping classes/methods in an easier way without needing to manually create new action classes and modify your cube. This is still in an Alpha version, but if you want to give it a test and offer any suggestions before it goes into Beta or OpenExchange, I would be glad to hear any thoughts

https://github.com/psteiwer/CustomCubeActions

Peter Steiwer · Mar 15, 2021 go to post

You need to make sure "found" is being updated when the recursive call exits. This can either be done by reference (passing in .found) or simply as a return value (set found instead of do). It is always going through the full loop and never exiting early because once the value is found, it is never passed back up as being found. This means that the loop just continues on. Here are two examples of these solutions

if $isObject(value) {
             do ..JSONIterator(value,newPath,.SearchKey,.SearchVal,.found)
         }

if $isObject(value) {
             set found= ..JSONIterator(value,newPath,.SearchKey,.SearchVal,found)
         }

Peter Steiwer · Jan 19, 2021 go to post

You might also need to add:
Set mgr.IQN=SchemaName_"."_$Translate(TableName,".",$c(2))

Peter Steiwer · Oct 20, 2020 go to post

It looks like you are able to fix this error. Just in case anyone else comes across this error in the future, it means that the data has not yet been built for the element that is being referred to. In this example, that element is [Measures].[AvgTime]. By running the task, the following line was executed:

set tCubeRebuild = ##class(%DeepSee.Utils).%BuildCube("Operational Analytics")

This performed a full build of the cube, so the Measure that was referenced in the error and all other elements in the cube were built