I found that creating a "Data Container" by extending the %DeepSee.DataConnector class allowed me to make an SQL based "source" where I could then create the dynamic filtering I wanted within the SQL of the container, and the balance of the IRIS Business Intelligence machinery would work just fine.

Hello -

There are multiple means of rendering a table in a "grid", from a simple html table populated with an SQL query, to ZEN "Grid" object

For the html table, the following code would give you a table from the SQL query

<script language=SQL name="query">
SELECT * FROM User.DataTable
<table border=1 bgcolor="">
 <csp:while counter=queryCol condition="(queryCol<query.GetColumnCount())">
  <th align=left><b>#(query.GetColumnHeader(queryCol))#</b></th>

 <csp:while counter=queryRow condition=query.Next()>
 <tr class='#($S(queryRow#2:"DarkRow",1:"LightRow"))#'>
  <csp:while counter=queryCol condition="(queryCol<query.GetColumnCount())">


For the ZEN example, take a look at your "local" sample page:  <localhost>/csp/samples/ZENTest.DynaGridTest.cls


I created a callable ZenMethod function that allows me to pass in the table component ID, the SQL Table name and the Row ID, that will jump the table to the correct page and row to match the ID passed in.

Method jumpTable(componentID as %String, tableName As %String, id As %String, pageSize As %Integer) [ ZenMethod ]
  set SQLtxt = "SELECT *, CEILING(%vid/"_pageSize_") PageNum, {fn MOD(%vid,"_pageSize_")} RelRowId FROM ( SELECT ID FROM "_tableName_") WHERE ID = "_id
  set sql1 = ##class(%ResultSet).%New()
  do sql1.Prepare(SQLtxt)
  do sql1.Execute()
  while sql1.Next() {
    set page = sql1.Get("PageNum")
    set row = sql1.Get("RelRowId")
  set Table = %page.%GetComponentById(componentID)
  set Table.selectedIndex = (row-1)
  set Table.currPage = page

This then can be used for any table on any zen page.


Hi Scott -

Part of this depends on "how" (from what context) did you create your "export"

Assuming that you mean that you created an "export" from the System Management Portal:

Then review the documentation that can be found:


which will talk about the "Deployment" process for an "exported production"

Assuming that you are talking about an "export" from Studio, then the specifics of how a Business Operation is configured will be in the class definition of the Production Class (along with the actually configured Business Service/Operation class definitions (if they aren't standard InterSystems provided classes : i.e. If you have created your own FTP Operation class as opposed to using the FTP operation class InterSystems ships with the product)):

Then in this case you are looking at a more manual code promotion process, which involves importing from within Studio and recompiling things. This methodology is can work, but has a lot more moving parts (and therefor more "gotcha's" to look out for)

When you are using the Text Categorization, you need to have a piece of meta data that is used to group the text into different categories. "Gender", or "Month" or, "Diagnosis Code", etc.  Then each record has to have one of these values associated with it, so the learning process can determine what concepts/terms go with which category.

You will get the "category 1 covers the whole data" error, if you don't have a meta field either defined, or correctly populated. Without some level of variability in the "category" identified meta data field, the machine learning doesn't have reference point to sort out your text records.

Make sure that you both HAVE a Meta-Data element defined, and that there are differing values within the record set that you are using to create the categorizations.

Hi Scott -

Have you looked at the Report Management framework under the Registry Management

(System Management Portal -> HealthShare -> Registry Management)?

Both the "Management Report" definitions, and the "Patient Report" definitions are a good starting point for some things. (Take a look at /csp/docbook/DocBook.UI.Page.cls?KEY=HERPT_ch_management_creating#HERPT_C273872 in the docs of your HealthShare installation)

"Response times" can be a bit tricky, since this is a measurement that would be not something that happens at a single point in the system (i.e. multiple Access Gateways, each having their own "start/stop" events, but only their own)