Skip to main content

Applycomparison advancd filter with a select statement

ApplyComparison ("#0 >= (select max(Hour)-1 from FACTTABLE where DAYDATE = current_date)", Hour@ID)
MicroStrategy’s strongest feature is it’s SQL Engine. The ability to define object relationships and then allow MicroStrategy to generate all of the appropriate SQL as you manipulate and drill is the core of the product. But of course, it can’t handle every since situation and you may sometimes need to help it along in certain instances. To extend this flexibility to you, MicroStrategy offers 5 functions which allow you to directly supply the SQL you want for a specific piece of the Query: ApplySimpleApplyAggApplyComparisonApplyOLAP and ApplyLogical. Today, I’ll talk about ApplyComparison, which allows you to provide custom SQL in the WHERE clause of the query.
Example Scenario

Say that you have a report that should compare Units Sold for Today vs Yesterday by Hour. If you were to build this report by simply adding the Hour attribute and two Conditional Metrics for Today Units Sold and Yesterday Units Sold, you’d end up with a graph like this:
external image tvy1.gifFictitious Data
It’s a nice picture of how the days are comparing, but it’s a little ugly since we don’t have data for 7am and ahead for today yet. Ideally, we’d like to filter off the data for Today that we haven’t received, but how do we know where we are? Assuming that we aren’t strictly real time and can’t assume based on the current time, we’d want to check the max Hour that exists in the table, and then go up to that minus 1. We could probably build that with some different types of metrics or a Report as Filter, but I’ll choose to do this using an ApplyComparison.
Before you start

First of all, you can only build this kind of filter in Desktop (so, not Web). You also need to enable the feature in Desktop, as it’s not available be default. Go to Tools->My Preferences->Filters and check the box for Show Advanced Qualifications. This will enable the option to use ApplyComparison’s in Filters.
Back to the Report

Double click on your Report Filter and you’ll now have the option to add an Advanced Qualification:
external image tvy4.gif
You can then provide the code for the ApplyComparison. The code you provide will go into the WHERE clause, and you can pass attribute values using the #n syntax, where n is the zero based number of parameters you’re passing. In my example, I’m passing a single parameter, so it’s #0. I could pass additional values by also including #1, #2, etc in my code if I needed them. Also note that when you provide the value at the end of the statement, it’s in the format Hour@ID, not just Hour. MicroStrategy changes the display of it slightly in my screenshot to Hour (ID), but the actual code you’ll be using looks like this:
ApplyComparison ("#0 >= (select max(Hour)-1 from FACTTABLE where DAYDATE = current_date)", Hour@ID)
external image tvy3.gif
And now the graph looks nice and clean:

external image tvy2-300x170.pngFictitious Data
BONUS TIP

Another way to accomplish this using ApplySimple instead of ApplyComparison would be to drag the Hour attribute to the Report Filter like normal, choose ID as the form and Greater Than or Equal To as the operator, and choose Custom from the drop down box and provide the ApplySimple code:
external image tvy5.gif
ApplySimple("(select max(Hour)-1 from FACTTABLE where DAYDATE = current_date)", 0)

Since we’re not including any parameters for this query, we can use 0 as the placeholder at the end to satisfy the function’s parameters.
This will generate the same SQL and results, but without needing to enable the Advanced Qualification option which could be confusing to some.

ApplyComparison("#0<=(select to_number(to_char(add_months(sysdate(),-1), 'yyyymm'))) ",[Instance Month]@ID)

Worked example:
select distinct a11.month_sid
from mstr_datamart.date_dim a11
where a11.date_sid<=(select to_number(to_char(add_months(sysdate(),-1), 'yyyymmDD'))) and a11.date_sid>=(select min(utc_date_sid) from mstr_datamart.ox_transaction_sum_daily_fact)
order by 1 desc

ApplyComparison("#0<=(select to_number(to_char(add_months(sysdate(),-1), 'yyyymmDD'))) and #0>=(select min(utc_date_sid) from mstr_datamart.ox_transaction_sum_daily_fact order by 1 desc)",[UTC Date]@ID)

Comments

Popular posts from this blog

Best practices for using Distribution Services in Microstrategy

Best practices for using Distribution Services MicroStrategy recommends the following best practices when scheduling Distribution Services subscriptions, in addition to the best practices given above: • For best results, follow the steps listed in  High-level checklist to set up a report delivery system . • PDF, plain text, and CSV file formats generally offer the fastest delivery performance. Performance can vary, depending on items including your hardware, operating system, network connectivity, and so on. • The performance of the print delivery method depends on the speed of the printer. • When sending very large reports or documents: ▫ Enable the zipping feature for the subscription so that files are smaller. ▫ Use bulk export instead of the CSV file format. Details on bulk exporting are in the  Reports  chapter of the  Advanced Reporting Guide . ▫ Schedule subscription deliveries to occur when your Intelligence Server is experiencing low ...

Microstrategy Dossiers explained

Microstrategy  Dossiers With the release of MicroStrategy 10.9, we’ve taken a leap forward in our dashboarding capabilities by simplifying the user experience, adding storytelling, and collaboration.MSTR has  evolved dashboards to the point that they are more than dashboards - they are  interactive, collaborative analytic stories . Ultimately, it was time to go beyond dashboards, both in concept and in name, and so  the've  renamed VI dashboards to  ‘ dossiers ’.  Dossiers can be created by using the new Desktop product or Workstation or simply from the Web interface which replaces Visual Insights. All the existing visual Insights dashboards will be converted to Dossiers   With MicroStrategy 10.9, there was an active focus on making it easier to build dashboards for the widest audience of end users. To achieve this, some key new capabilities were added that make it easier to author, read, interact and collaborate on dashboards ...

Data Mart Reports in Microstrategy

Creating Data Mart Reports in Microstrategy   When there is requirement to store all the report results to a database table you can use the interesting feature in Microstratgey called Data Mart Reports. To create a data mart table, you first create a data mart report that defines the columns of the data mart table. You then create the data mart table and populate it with data. The steps below walk you through the process of creating a data mart report and then executing the report to create a data mart table. The steps also include an example for most steps, based on Tutorial sample data in the MicroStrategy Tutorial project.                Follow the simple steps below to create a datamart report: 1 In MicroStrategy Developer, create a new report or select an existing report to use as the data mart table. The report should contain the attributes...

Microstrategy Authentication Using the URL API

Microstrategy Authentication Using the URL API Users have to be authenticated before accessing functionality in MicroStrategy Web. Using the URL API, there are three ways for MicroStrategy Web to obtain the information needed to authenticate a user. Opening the login page to gather user for credentials    Bypassing the login page by providing credentials in the URL    Bypassing the login page by providing the session state in the URL A detailed explanation of each method for obtaining the authentication information is provided below. Opening the login page to gather user for credentials If the URL attempts to access a MicroStrategy Web page that requires login and no credentials or session state are provided in the URL, the user is redirected to the login page. If login is successful, the user is redirected to the specified page.   The sample URL shown below executes a report without providing authenticating information. Since the Repo...

Prompt-in-prompt(Nested Prompts) in Microstrategy

Prompt-in-prompt(Nested Prompts) in  Microstrategy Nested prompts allows you to create one prompt based on the other and other bases on another, nested prompts allows us to prompt the highest level(Like year) to middle level(like Quarter, then to the low level(like Month). Here you can see how to  create a 3-level deep nested prompt that will prompt the user to select a year, then a quarter within that year, then a month within that quarter. Prompt-in-prompt is a feature in which the answer to one prompt is used to define another prompt. This feature is only implemented for element list prompts . The following procedure describes how to achieve this: Create the highest level filter. This is a filter which contains a prompt on an attribute element list. Create a filter on the attribute "Year." Click "prompt on attribute element list" and click "Next" through the rest of the screens to accept the default values. Do not set any additio...

MicroStrategy URL API Parameters

MicroStrategy URL Structure The following table summarizes the root URL structure used for every request to MicroStrategy Web. Environment Main Application URL Administration URL J2EE http://webserver/MicroStrategy/servlet/mstrWeb http://webserver/MicroStrategy/servlet/mstrWebAdmin .NET http://webserver/MicroStrategy/asp/Main.aspx http://webserver/MicroStrategy/asp/Admin.aspx Every request sent to MicroStrategy Web calls a central controller. Parameters are appended to  Main.aspx  or  mstrWeb  (in a .NET and J2EE environment, respectively) to indicate to the controller how the request should be internally forwarded and handled. The following examples show a URL for accessing a MicroStrategy folder when the user does not have an existing session. The URL contains not only the parameters needed to connect to MicroStrategy Web, but also the parameters needed to log on and create a session. J2EE environment: <a href="http:...

display a group horizontally in MSTR document

Display a group horizontally in MSTR document By default,  groups are displayed vertically in a document.  This means that the detail sections are displayed below the Group Header. For example, a document is grouped by Year. The Detail section includes revenue and profit information by region.  Displaying the group vertically yields the following document: For certain documents, displaying and printing the group horizontally is desired. When displayed horizontally, the detail sections are displayed next to the Group Header, running horizontally across the page. The example given above, if displayed horizontally, shows a row containing the year, and then, for each region, the Region, Revenue, and Profit. When the document is viewed as a PDF, it displays as shown below: When being designed, the document with horizontal display looks like the following in MicroStrategy Developer: The sections within the group are turned sideways and listed horizontally...

Derived metric based on attribute values

Derived metric based on attribute values Here is how could create and display data correctly on using below simple steps.  Create a report with Category, Subcategory and Revenue. Create New Metric in a report or VI.  Case((Category@ID = 1), Revenue, 0) Booksand Name it as Revenue for  where 2 is Category ID for "Books"  Report will display result as below.  Result for new metric is blank. Now to fix this create a new Derived metric on Category attribute first with formula as  Max(Category) {~ }  and calling Books Now Edit the "Revenue for Books metric and Replace Category@ID with this new Books metric formula would looks like this  Case((Books = 1), Revenue, 0).  Report result would now display as expected as shown below

User request is completed. (Ran out of memory)

Unable to Run/Edit particular MicroStrategy reports ue to the following error: User request is completed. (Ran out of memory) User request is completed. (Ran out of memory) The above issue appeared in MSTR Web Universal version 10.5 We tried the below options without any luck: 1. i-server restart 2. Web server restart 3. clear document cache/dataset cache 4. Web server cache clear as below: The correct option is to increase the contract memory settings: Using the Memory Contract Manager The  MCM settings are in the Intelligence Server Configuration Editor, in the  Governing Rules: Default: Memory Settings  category. The  Enable single memory allocation governing  option lets you specify how much memory can be reserved for a single Intelligence Server operation at a time. When this option is enabled, each memory request is compared to the  Maximum single allocation size (MBytes)  setting. If the request ...

Case functions Microstrategy

Ca se functions Microstrategy Case functions return specified data in a SQL query based on the evaluation of user-defined conditions. In general, a user specifies a list of conditions and corresponding return values. Case This function evaluates multiple expressions until a condition is determined to be true, then returns a corresponding value. If all conditions are false, a default value is returned.  Case  can be used for categorizing data based on multiple conditions. This is a single-value function. Syntax Case ( Condition1 ,  ReturnValue1 ,  Condition2 , ReturnValue2 ,...,  DefaultValue ) Example Case(([Total Revenue] < 300000), 0, ([Total Revenue] < 600000), 1, 2) sum(Case (Day@DESC in (“Sat”,”Sun”), Sales, 0) {~+} Sum(Case(Category@DESC In("Books","Electronics"),Revenue,0)){~+} CaseV (case vector) CaseV  evaluates a single metric and returns different values according to the results. It can be used to perfo...