Peter Steiwer · Dec 7, 2016 go to post

You can definitely write a PlugIn to evaluate the two values and exclude any records from your returned count that are equal. Off the top of my head, I can not think of anything that will do this automatically or easily from MDX functions

Peter Steiwer · Dec 7, 2016 go to post

Hi Bahram,

Within Studio there are a couple ways to determine what code a macro is running

1). You can right click a macro and select "goto" (or F12) - this will take you to the definition

2). You can hover your mouse over the macro and it should show the code in a tooltip

3). You can look at the .int code to see what the macro was compiled into

Peter Steiwer · Dec 5, 2016 go to post

Hi Derrek,

These requests are not possible to do "out of the box", but as Evgeny points out, using alternate methods such as accessing DeepSee results from the REST API, you can render your own graphs and dashboards with any 3rd party library that allows this level of customization.

We also have a couple samples that show DeepSee results being displayed in a basic HTML page, links to these samples can be found in the Documentation.

Peter Steiwer · Nov 30, 2016 go to post

It looks like this error is happening when a key that does not exist is passed into the PlugIn through %CONTEXT. Would it be possible to only pass in Keys for members that exist? This seems to work without errors

Peter Steiwer · Nov 23, 2016 go to post

Hi Benjamin,

In DeepSee, you can create custom widgets called "Portlets" (Documentation). Portlets will allow you to write HTML or ObjectScript that will generate the contents of a widget. This can include things like simple text, embedded web pages, and even third party chart libraries.

Peter Steiwer · Nov 21, 2016 go to post

Some interesting things to note:

If you DO NOT put your custom class in the %DeepSee.Time package, it will not be visible through the Architect UI. Even if you do not include it in the %DeepSee.Time package, you will be able to modify your cube definition from Studio and specify your custom class. For example, I created the following class:

 

      Class User.CustomTime1 Extends %DeepSee.Time.AbstractLevel

 

This custom class IS NOT visible in the Architect's "Extract value with function" drop down. However, I created a level with the following timeFunction value in my cube class from Studio:

 

      timefunction="CustomTime1"

 

Manually entering this value will work and your custom time functions will be able to survive upgrades. If you do include your class in %DeepSee.Time, it will be listed in the Architect UI

Peter Steiwer · Nov 21, 2016 go to post

As Daniel suggests, the class should extend %DeepSee.Time.AbstractLevel to be visible from Architect

Peter Steiwer · Nov 21, 2016 go to post

Hi Benjamin,

In DeepSee, Null data is handled differently than 0. This being the case, you can use the ISNULL function (Documentation). Each of these three members can be placed in ISNULL() as the first parameter and 0 as the second. If there is no data, instead of being Null, it will be treated as 0 and your calculation should work.

Peter Steiwer · Nov 7, 2016 go to post

Hi Ryan,

In reference to the  Troubleshooting Guide -> Build Problems -> Errors During Build -> Check ^DeepSee.BuildErrors/ run ##class(%DeepSee.Utils).%PrintBuildErrors(pCube) are two options for this case. To check ^DeepSee.BuildErrors, you can either use the Management Portal's Global Explorer page or you can use terminal. This global will be populated with the error messages that are caused as well as the ID of the record that caused this error. Using ##class(%DeepSee.Utils).%PrintBuildErrors(pCube) will also show the same error messages in a more user-friendly way.

Here is an Error that I forced:

SAMPLES>d ##class(%DeepSee.Utils).%PrintBuildErrors("HoleFoods")
    1   Source ID: 2
        ERROR #5002: Cache error: <VALUE OUT OF RANGE>%UpdateFacts+107^HoleFoods.Cube.Fact.1
 
1 build error(s) for 'HoleFoods'

From this output I can see that ID 2 had a Value Out Of Range error on %UpdateFacts+107^HoleFoods.Cube.Fact.1 line of code. At this point I can look into this line of code and figure out why it is out of range. My line of code reads as

 Set %var("Mx3501588378B") = $S(%source("%ID")=2:$ZD(99282828),%source("UnitsSold")="":"",%source("UnitsSold")>5:1,1:0)

We can see that the expression I wrote will cause an error when Source ID 2 is built. In a more realistic situation, it may be harder to determine why this line of code caused the error. This line of code is either generated by DeepSee or it is a user defined source expression. As always, if you are not sure how to determine the cause of the error past retrieving the error message, the DeepSee support team is available 24/7. But accessing this error message is always a helpful first step

Peter Steiwer · Oct 14, 2016 go to post

This documentation page describes the use of { } within MDX. As Lexi points out, a single member inside of { } should behave the same way without the { }. This is the syntax for a set. If you come across something that is not working as expected without the { }, please consider submitting a WRC so we can get the behavior resolved.

Peter Steiwer · Oct 14, 2016 go to post

This documentation page has some "recipes" for creating calculated measures. What you requested is slightly more advanced than what is described here, and the two provided solutions are complete and precise. But I believe this section of the documentation provides some good recipes for building a calculated measure that does exactly what you need.

Peter Steiwer · Jul 28, 2016 go to post

Great tip Evgeny!

 

Because of this reason, I like to create a new hierarchy to contain my week level. This will allow me to keep a single time dimension that uses my date property as the source, but separating the hierarchies will allow my Year->Month->Day structure to be preserved.

Peter Steiwer · Jul 14, 2016 go to post

Currently, there is a workaround to accomplish this desired behavior without needing this parameter to be implemented. You can add a "listing" filter to your KPI (implemented on a widget) and then inside of %OnGetListingSQL, you can assign different SQL based on the filter value.

XData:

%OnGetListingSQL:

if $get(pFilters("Listing"))="listing1" {
set tSQL="SELECT <column list 1> from <table>"
else {
set tSQL="SELECT <column list 2> from <table>"
}

Peter Steiwer · Jun 2, 2016 go to post

Hi David,

By default, this happens when items are in a hierarchy. For example, if you have Product Category and Product Name as filters and you filter on the Pasta Category, only the Product Names in the Pasta Category will be available to select from. If two levels are not in the same hierarchy but you would like the same behavior, you can use the "Depends On" property of a level. This property can be found on the Architect Management Portal Page in the right side pane after clicking on a level. After setting this property and compiling, a Build will need to be done. This is because using the "Depends On" property will create a new index to quickly determine which members should be displayed when using a filter control.

After this behavior is understood, you may wish to add hidden filters to your widget with default values. For example, I could set Pasta as my Default Value for my hidden Product Category filter. When I try and select a value from my Product Name filter, I only get my different Pasta names as options.