Skip to main content

Apply or Pass-through functions in Microstrategy

Apply (Pass-Through) functions

MSTR Apply functions provide access to functions or syntactic constructs that are not standard in MicroStrategy but are provided by various RDBMS systems..

Syntax common to Apply functions

Apply Function Name ("expression with placeholders", Arg1, Arg2, Arg3, …ArgN)
where:

  • Apply Function Name – is a generic name used for the predefined pass-through functions described above
  • expression with placeholders – is the string describing the actual expression or syntax that the engine uses while generating the SQL and which is sent to the RDBMS. The placeholders are represented by #0, #1, and so on. "#" is a reserved character for MicroStrategy.
  • Arg – is an argument that replaces the parameter markers in the pattern. Arg1 replaces #0, Arg2 replaces #1, and so on.

There are  five pre-defined Apply functions to replace regular, predefined functions of the same type. For more details, click the link corresponding to each function.
•The “#n” code in Apply function syntax serves as placeholders for the MicroStrategy objects being passed to your database.
The index for referencing these objects begins with 0 and increases by
 for each successive object passed. For example, ApplySimple("#0 * #1",[col1],[col2])indicates that two items, col1 and col2, referenced as #0 and #1, respectively, are being passed to your database to be multiplied together (by the database). If the number of references in an Apply function (e.g., #0, #1, and so forth) exceeds the number of objects passed in that function, MicroStrategy passes the last available object in place of the extra reference(s). For example, ApplySimple("#0 * #1 * #2 * #3",[col1],[col2]) uses two more references than there are arguments to pass, so MicroStrategy passes #2 and #3, the extra references, as col2, the last available object in the list.
•To use # as a character rather than a placeholder, use four # characters in a row. See the syntax below for an example.
ApplyComparison(UPPER(#0) like
‘Z####%’, Country@DESC)
The SQL for the function is:
Select a.11[COUNTRY_ID] AS COUNTRY_ID
from [LU_COUNTRY] a11
where upper(a11.[COUNTRY_NAME])
like ‘Z#%’
•Do not use form groups for the attribute form expression when using Apply functions, because form groups are ignored by the Analytical Engine. Instead, use a single form. For example, instead of using Customer@Name, where Name is defined to contain Customer’s first name, middle name, and last name, use ID or any other single form.

ApplySimple

The ApplySimple function is a single-value function. It is used to insert any single-value, database-specific functions and simple operators directly into SQL.

In general, ApplySimple can be used to create the following objects:
•Attribute form
For any Apply function, the attribute form in the arguments should be a single form—not a form group. The engine ignores any definitions based on attribute forms.
•Consolidation
•Custom group
•Fact
•Metric
•Subtotal
•Transformation

Example 1 Using an attribute

ApplySimple ("Datediff (YY, #0,getdate ())", [BIRTH_DATE])

Case( ([Order Type]@ID="V") AND ([Order Form]@ID="Visa"), "Visa", "Other")
ApplySimple("Case WHEN #0 ='ABC' THEN 'ABC' ELSE 'Competitive' END", StudioName)

Example 2 Using an attribute

ApplySimple ("Months_between (sysdate,#0)",[CURRENT_DT])

Example 3 Using a compound metric

You can use the "ApplySimple" function in a metric definition in order to calculate the greatest of a given number of values. The syntax is as follows:

ApplySimple ("Greatest (#0, #1, #2)", Metric_1, Metric_2,Metric_3)

Example 4

You need to display the values of Revenue that lie between 0 and 100,000 as "Low", between 100,001 and 200,000 as "Medium", and above 200,000 as "High." You can use the ApplySimple function in a metric definition as follows:

ApplySimple (" CASE WHEN #0 between 0 and 100000 THEN 'Low' WHEN #0 between 100001  and 200000 THEN 'Med' ELSE 'High' END ", Sum (Revenue){~})

Example 5 Rounding

You can use the ApplySimple function in a metric definition to round off the resulting values to a certain number of decimal places. In SQL Server 2000, the syntax is as follows:
("ROUND (#0,1)", [M3])
where M3 is the metric and 1 is the number of decimal places to round to.

Example 6 CASE statement

You can implement an "If/Then" scenario by using ApplySimple. In the string below, M1=Max (Employee) and Dollar Sales is a metric.

ApplySimple ("CASE WHEN #0>10 THEN #1 ELSE ’0’ END", [M1], [DOLLAR SALES])

ApplySimple accepts facts, attributes, and metrics as input.

Examples of object creation
Expression typeExamples
Attribute
ApplySimple(“Datediff(YY,#0,getdate())”, [BIRTH_DATE]), in which [BIRTH_DATE] is an attribute
ApplySimple(“Months_between(sysdate,#0)”,[CURRENT_DT]), in which [CURRENT_DT] is an attribute
Compound Metric
ApplySimple(“Greatest(#0,#1,#2)”, Metric_1, Metric_2,Metric_3)
ApplySimple(" CASE WHEN #0 between 0 and 100000 THEN 'Low' WHEN #0 between 100001 and 200000 THEN 'Med' ELSE 'High' END ", Sum(Revenue){~})
Examples in custom expressions
•ApplySimple("Datediff(YY,#0,getdate())", [BIRTH_DATE])
•ApplySimple("Months_between(sysdate,#0)", [CURRENT_DT])
Examples: Incorrect usage
•ApplySimple("Sum(#0)",[Column 1])
•ApplySimple("Count(#0)",[Column 2])
The two examples immediately above are incorrect and should not be used in your application because of the following two reasons:
•ApplySimple is a single-value function and therefore can only be used with single-value functions. Sum and Count are both group-value functions and therefore should not be used with ApplySimple.
•Sum and Count are both MicroStrategy functions and are not database-specific; therefore, they should not be used with ApplySimple or any other Apply functions.

Example 6: Applysimple in a filter

Applysimple in a filter data for this year and last year when the year attribute is available.

  1. Right click in the filters folder or any where in MSTR Developer and select Filter.
  2. Select Empty Filter in the New Filter dialogue box.
  3. Now drag the Year attribute into the filter Editor.
  4. Select ID in the qualify on dropdown
  5. Select Between in the Operator dropdown.
  6. Now you will have two text boxes with Value selected in the corresponding dropdown as shown below:


  1. Now change the dropdowns from Value to Custom
  2. Enter similar to the below validated applysimple definition in the first custom entry:        ApplySimple("(select max(YEAR)-1 from LKUP_ENTRY_DATE_TABLE)",0)
  3. Enter similar to the below validated applysimple definition in the second custom entry: ApplySimple("(select max(YEAR) from LKUP_SD_ENTRY_DATE_TABLE)",0)
  4. Click on OK.
  5. See the screenshot below:                                                                                          You can use this filter on a report with year attribute to filter the data to only last year and this year.


    ApplyAgg

    The ApplyAgg function is used to define simple metrics or facts by using database-specific, group-value functions. The ApplyAgg function itself is a group-value function and accepts facts, attributes, and metrics as input.

    Syntax
    ApplyAgg()
    Accepts facts, attributes, and metrics as input.
    All placeholders must begin with #0 and increase in increments of 1.
    Example
    ApplyAgg(“Regrsxx(#0,#1)”, [Argument 1], [Argument 2] {~+}

    Example1

    ApplyAgg("Regrsxx(#0,#1)", [Argument 1], [Argument 2] {~+})

    Example 2 ApplyAgg with CASE

    You want to create a metric to sum only those values that have an attribute tag set to a desired value. For instance, there exists an attribute that lists a payment as received, or not received, You want to create a metric counts how much money is owed.
    It is necessary to sum all values where the payment is listed as not received, and consider the others as being equal to zero. You can accomplish this by using the following ApplyAgg function:

    ApplyAgg ("sum (case when #1 in (’received’) then 0 else #0 end)", [monetary_based_fact],[Other_fact])

    With Attribute and metric in metric:
    ApplyAgg("sum (case when #0 = '10' then #1 else '0' end)", Max(Format@ID) {~} , [Gross USD]) {~} 

    ApplyComparison

    ApplyComparison is used to define a filter by populating the WHERE clause in the SQL passed to your RDBMS, and can take facts, attributes, and metrics as input.

    The ApplyComparison function is used with RDBMS comparison operators such as >, like, and In.
    Depending on your MicroStrategy product and licensing, this function may not be available.
    Syntax
    ApplyComparison()
    Example 1
    ApplyComparison ("#0>#1", Store@ID,2)

    Example 2
    ApplyComparison ("#0 between #1 and #2",? [Value Prompt Date], [Order Date]@ID, [Ship Date]@ID)

    Example 3

    ApplyComparison ("#0>#1", Store@ID, Month@ID)

    ApplyLogic

    The ApplyLogic function is used to define custom filters. It is used with logical operators such as AND and OR. ApplyLogic is a logical function.

    Syntax

    ApplyLogic()
    Accepts logic (Boolean) values as input.
    Example
    ApplyLogic(“#0 and #1”, Year@ID>2003, Month@ID>200301)

    ApplyOLAP

    OLAP functions are group-value functions that take a set of data as input and generate a set of data as output, usually reordering the set according to some criteria.
    ApplyOLAP is the MicroStrategy Apply function tool used for OLAP functionality when you wish to use the native capabilities of your RDBMS. It is used to define compound metrics via database-specific functions such as Rank(). ApplyOLAP, like ApplySimple, is used to define metrics but differs in that it only accepts metrics as input.

    Syntax

    ApplyOLAP()
    Accepts only metrics as input.
    Example
    ApplyOLAP(“RunningSlope(#0,#1)”, [Metric 1], [Metric 2])

    Applysimple in Dossier

    ApplySimple in Dossier

    Creating Calculated Members in Hierarchy Reports Using MDX Expressions

    To Create Calculated Members Using MDX Expressions

    1. Open the dossier you want to modify.
    2. Right-click an element in the grid and select Calculated Member. The Calculated Member dialog opens. The parent element appears in Parent.
    3. In Name, enter a name for the calculated member.
    4. In the MDX Expression, enter arguments for the Apply Simple function. This function allows you to enter an MDX expression, within the quotes, to create a calculated member. You can type arithmetic operators (such as + and -) and values directly in the expression.
    5. Create a calculated member for the previous year.
      ApplySimple("ParallelPeriod([Date].[Calendar].[Calendar Year], 1, [Date].[Calendar].[Calendar Year].[CY 2018])")
    6. You can add hierarchical elements from the left pane to the MDX expression. Expand the hierarchies in the left pane to locate the hierarchical elements you want to add. Then, double-click or drag them to the MDX Expression pane.
    7. The targeted element is the default parent. To change the parent, click Set Parent next to the hierarchical element you want to assign as the parent.
    8. If you need to delete the expression and begin again, click Clear.
    9. Click Save.

    Creating Derived Metrics in Hierarchy Reports Using MDX Expressions

    You can create derived metrics in hierarchy reports using MDX expressions.

    To Create Derived Metrics Using MDX Expressions

    1. Open the dossier you want to modify.
    2. Create a derived metric and reserve it for future use in a visualization. In the Datasets panel, click More  to the right of the dataset in which you are creating a derived metric and choose Create Metric.
    3. Enter a name for the metric in the Metric Name field.
    4. Enter the derived metric definition in the right pane using the ApplySimple function. This function allows you to enter an MDX expression to create a derived metric. You can type arithmetic operators (such as + and -) and values directly in the metric expression.
    5. The Apply Simple function does not appear as a selection in the Functions pane. You must enter it manually. In addition, you must add a dummy metric to the end of the function as shown in the example below. This function is not used in the definition. However, it is necessary since all metrics require two arguments for validation.
      Create a derived metric for the gross profit margin.
      ApplySimple("[Measures].[Gross Profit] / [Measures].[Sales Amount]", [Sales Amount])
      Use Objects panes to assist in the creation your derived metric definition. Locate the objects you want to add by using the Search field at the top of the pane. Then, double-click objects to add them to the Formula pane.
    1. If you need to delete the metric formula and begin again, click Clear.
    2. Click Validate to check if the metric expression is valid.
    3. Click Save.

    Comments

    Post a Comment

    Popular posts from this blog

    Microstrategy Custom number formatting symbols

    Custom number formatting symbols If none of the built-in number formats meet your needs, you can create your own custom format in the Number tab of the Format Cells dialog box. Select  Custom  as the Category and create the format using the number format symbols listed in the table below. Each custom format can have up to four optional sections, one each for: Positive numbers Negative numbers Zeros Text Each section is optional. Separate the sections by semicolons, as shown in the example below: #,###;(#,###);0;"Error: Entry must be numeric" For more examples, see  Custom number formatting examples . To jump to a section of the formatting symbol table, click one of the following: Numeric symbols Character/text symbols Date and time symbols Text color symbols Currency symbols Conditional symbols Numeric symbols For details on how numeric symbols apply to the Big Decimal data type, refer to the  Project Design Guide . ...

    N-Level deep nested prompts in MicroStrategy

    N-Level deep nested prompts in MicroStrategy 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 additional conditions. Save the filter as "YEAR FILTER:"   From this level on, each filter will contain both a prompt on an element list and will have its element list filtered by the filter created one level above it. There is no limit to the number of such filters that can be layered. Create a filter on attribute "Quarter" and click "Prompt." Select "Use a filter to reduce the nu...

    Fiscal Week, Fiscal Month, Fiscal Quarter and Fiscal Year calculations in Microstrategy

    Fiscal Week, Fiscal Month, Fiscal Quarter and Fiscal Year calculations in Microstrategy FiscalWeek Returns the numeric position of a week within a fiscal year, for a given  input date. This function is useful in financial reporting when the start of the fiscal year is different than the start of the calendar year. Syntax FiscalWeek< firstWeekDay ,  firstMonth >( Date / Time ) Where: • Date / Time  is the input date or timestamp. • firstWeekDay  (default value is 1) is a parameter that determines which day of the week is considered as the first day of the week. You can type an integer value from 1 to 7, with 1 representing Sunday, 2 representing Monday, and so on until 7 representing Saturday. • firstMonth  (default value is 1) is a parameter that determines which month is considered as the start of the fiscal year. You can type an integer value from 1 to 12, with 1 representing January, 2 representing February, and so on until ...

    "Element browsing is not supported for this subtype of attributes" error message in MicroStrategy

    Element browsing is not supported for this subtype of attributes]" error message appears MicroStrategy This happens when browsing attribute elements in a filter, prompt report or dashboard. When running a prompt dashboard in MicroStrategy Web 9.4.1 and above, the following error message appears when browsing prompt attribute. The issue does not occur in MicroStrategy Desktop.         "Element browsing is not supported for this subtype of attributes. The element net server was unable to load an element collection from the element server due to failure." CAUSE: Possible causes are: There is no browse forms selected in the attribute creation process, this also happens when one of the browse forms have been deleted by architect and forget to add another browse form. The attribute contains multiple browsing form and MicroStrategy Web is unable to load its elements.     WORKAROUND: Add a browsing form under display tab of the attribute, so that display form ...

    Split Hierarchy with M-M(many to many) relationships in Microstrategy:

    Split Hierarchy with M-M(many to many) relationships in Microstrategy: Split Hierarchy with M-M relationships: Explanation A split hierarchy is one - that at the lowest level - has more than one child. The schema looks like the following diagram. Problem Reports that contain B or C will ignore filters on the other . Recommendation MicroStrategy recommends to have only one child at the lowest level. Workaround / Solution Make B and C parents of a new compound attribute using both columns as its ID with A B and C as its parents.  

    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...

    "System Prompt" and its uses in MicroStrategy

    System Prompt and its uses in MicroStrategy WHAT IS A "SYSTEM PROMPT"? "System Prompt" is a system object that was introduced back in version 8.0.0. The object is named as "User Login" and is implemented as a prompt object. The object can be found under Public Objects > Prompts > System prompts, as shown below: Unlike ordinary prompt objects, system prompts don't require any answers from the user. When a report containing a system prompt runs, the prompt is answered automatically with the login of the user who runs the report. On the other hand, like other prompt objects, answers to system prompts are used to match caches. Therefore, users don't share caches for reports that contain system prompts. For details on how caches are matched, refer to the following MicroStrategy Knowledge Base document: KB5300-7X0-0147 - How are caches matched in MicroStrategy Intelligence Server 7.x? WHEN ARE SYSTEM PROMPTS USED?    System pr...

    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 ...

    Partition Key Selection guidelines in MicroStrategy

    Partition Key Selection guidelines MicroStrategy The partition attribute is typically dictated by specific application needs. Below are some general guidelines for identifying a good partition attribute. Some of the largest fact tables in the application are typically good candidates for partitioning and thus influence the choice of the partition attribute.  Data should be partitioned in such a way that it allows for the most number of partitions to be involved in any question that is asked of the application. Attributes that are frequently used for filtering or selections do not make for good partition attributes. The partition attribute should allow for near uniform distribution of data across the partitions, so that the workload on each partition is evenly distributed. To support best dashboard execution and concurrency performance, MicroStrategy has chosen to limit the number of logical CPUs engaged for any single grid evaluation to  4 . Columns on which some of the larger...