MicroStrategy Functions Reference
Understanding Functions in MicroStrategy   
1
© 2011 MicroStrategy, Inc.
How MicroStrategy processes functions   
47
How Intelligence Server uses functions
Recall that there are several categories of functions recognized by 
Intelligence Server. These function types include group-value, single-value, 
and OLAP functions. Within these categories are functions supported by only 
the Analytical Engine, only the database, or by both the engine and the 
database. The SQL generated to process the request differs depending on 
what processes the request. The SQL syntax also differs depending on the 
database used, when the database supports the function.
The following subsections explore through examples of how the various uses 
of functions result in different SQL syntax. All of these examples use the 
functions in the context of metrics.
Most of these examples (except where noted) can be recreated using 
the objects in the MicroStrategy Tutorial. Tutorial data is stored in a 
Microsoft® Access database.
Using group-value functions
The computation of group-value functions is done by either the Intelligence 
Server or the database depending upon the function used and support 
available. The following examples discuss how MicroStrategy performs the 
group-value computations by providing the SQL syntax for specific 
situations.
Group-value functions in simple metrics
This subsection contains two examples that illustrate the processing of 
group-value functions. Each example contains two reports, the first one 
showing the SQL for a function supported by the database and the second 
one by the Analytical Engine. 
Example 1: Sum(Revenue) vs. AvgDev(Revenue)
Consider a simple report, Report 1A, where the attribute Region is placed on 
the row axis and a simple metric defined as M1A=Sum(Revenue){~} is on 
the column axis. This report shows the sales for each region. The database, in 
Pdf data extraction open source - extract form data from PDF in C#.net, ASP.NET, MVC, Ajax, WPF
Help to Read and Extract Field Data from PDF with a Convenient C# Solution
fill in pdf form reader; c# read pdf form fields
Pdf data extraction open source - VB.NET PDF Form Data Read library: extract form data from PDF in vb.net, ASP.NET, MVC, Ajax, WPF
Convenient VB.NET Solution to Read and Extract Field Data from PDF
how to save filled out pdf form in reader; extract data from pdf forms
Understanding Functions in MicroStrategy
MicroStrategy Functions Reference
1
48
How MicroStrategy processes functions
© 2011 MicroStrategy, Inc.
this case Microsoft Access, supports the function Sum. The following SQL is 
generated:
• Report 1A (SQL Group-value function) - Microsoft Access
select a12.[REGION_ID] AS REGION_ID,
max(a13.[REGION_NAME]) AS REGION_NAME,
sum(a11.[TOT_DOLLAR_SALES]) AS WJXBFS1
from [CITY_CTR_SLS] a11, 
[LU_CALL_CTR] a12, 
[LU_REGION] a13
where a11.[CALL_CTR_ID] = a12.[CALL_CTR_ID] and 
a12.[REGION_ID] = a13.[REGION_ID]
group by a12.[REGION_ID]
Now, consider Report 1B, again with the same attribute, Region, on the row 
axis, but with a different simple metric defined as 
M1B=AvgDev(Revenue){~} on the column axis. This report shows how 
revenue data varies from its mean for each region. The database does not 
support the function Average Deviation; therefore, the computation is 
performed by the Analytical Engine. The following SQL is generated:
• Report 1B (MicroStrategy Group-value function)
select a11.[CALL_CTR_ID] AS CALL_CTR_ID,
a11.[CUST_CITY_ID] AS CUST_CITY_ID,
a12.[REGION_ID] AS REGION_ID,
a13.[REGION_NAME] AS REGION_NAME,
a11.[TOT_DOLLAR_SALES] AS WJXBFS1
from [CITY_CTR_SLS] a11, 
[LU_CALL_CTR] a12, 
[LU_REGION] a13
where a11.[CALL_CTR_ID] = a12.[CALL_CTR_ID] and 
a12.[REGION_ID] = a13.[REGION_ID]
[An analytical SQL]
In Report 1B, Intelligence Server performs the following steps:
• It retrieves all fact data from the warehouse. [TOTAL_ DOLLAR_SALES] 
is the column alias used for the fact (Revenue) in the temporary table 
during SQL generation.
• It uses the result set (that is held in memory) to compute the metric, 
namely AvgDev([TOTAL_ DOLLAR_SALES]){~} for each region. 
The notation [An analytical SQL] indicates that the 
computation is taking place in the Analytical Engine.
• It displays the final result.
C# PDF Text Extract Library: extract text content from PDF file in
using RasterEdge.XDoc.PDF; Please have a quick test by using the following C# example code for text extraction from PDF page. // Open a document.
pdf data extraction open source; exporting pdf data to excel
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
Except provides PDF page extraction method in VB.NET, this page also gives VB This VB.NET code below can help you extract all images from PDF. ' Open a document
how to fill out pdf forms in reader; how to fill in a pdf form in reader
MicroStrategy Functions Reference
Understanding Functions in MicroStrategy   
1
© 2011 MicroStrategy, Inc.
How MicroStrategy processes functions   
49
In the previous examples, the dimensionality of both metrics is defined as 
{~}, which means that they both are calculated at the report level of Region, 
since attribute Region is on the reports. 
The next example explains how Intelligence Server processes dimensionality. 
When metric dimensionality is defined, the Analytical Engine can insert 
records back into the temporary database structures after the function 
calculation is performed so that dimensionality can be applied. 
Example 2: Sum(Revenue) {~, Country} vs. AvgDev(Revenue) {~, Country}
Now use the same report template as in Example 1, but add a dimensionality 
to each metric for comparison. Use Sum(Revenue){~,Country} for 
Report 2A and AvgDev(Revenue){~,Country} for Report 2B. Notice 
that attribute Country is a parent of Region, and the relationship is one to 
many. In Report 2A, the Sum function is supported by the database; in 
Report 2B, the AvgDev function is supported by Intelligence Server. The SQL 
generated for both reports is as follows:
Report 2A (SQL Group-value function) - Microsoft Access 
create table ZZT1Y03009ZMD000 (
COUNTRY_ID BYTE, 
WJXBFS1 DOUBLE)
insert into ZZT1Y03009ZMD000 
select a12.[COUNTRY_ID] AS COUNTRY_ID,
sum(a11.[TOT_DOLLAR_SALES]) AS WJXBFS1
from [CITY_CTR_SLS] a11, 
[LU_CALL_CTR] a12
where a11.[CALL_CTR_ID] = a12.[CALL_CTR_ID]
group by a12.[COUNTRY_ID]
select a11.[REGION_ID] AS REGION_ID,
a11.[REGION_NAME] AS REGION_NAME,
pa1.[WJXBFS1] AS WJXBFS1
from [ZZT1Y03009ZMD000] pa1, 
[LU_REGION] a11
where pa1.[COUNTRY_ID] = a11.[COUNTRY_ID]
drop table ZZT1Y03009ZMD000
The first pass of SQL creates a temporary table to hold the data. The second 
pass computes the metric at the Country level, while the third pass joins with 
VB.NET PDF Text Extract Library: extract text content from PDF
'Please have a quick test by using the following example code for text extraction from PDF file in VB.NET program. ' Open a document.
saving pdf forms in acrobat reader; extract data from pdf into excel
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
below. DLLs for PDF Image Extraction in VB.NET. Document. Sample for extracting all images from PDF in VB.NET program. ' Open a document.
exporting data from excel to pdf form; extracting data from pdf to excel
Understanding Functions in MicroStrategy
MicroStrategy Functions Reference
1
50
How MicroStrategy processes functions
© 2011 MicroStrategy, Inc.
attribute Region since the result of the aggregation has to be displayed for 
each region. The final pass drops the temporary table.
Report 2B (MicroStrategy Group-value function)
select a11.[CUST_CITY_ID] AS CUST_CITY_ID,
a12.[COUNTRY_ID] AS COUNTRY_ID,
a11.[CALL_CTR_ID] AS CALL_CTR_ID,
a11.[TOT_DOLLAR_SALES] AS WJXBFS1
from [CITY_CTR_SLS] a11, 
[LU_CALL_CTR] a12
where a11.[CALL_CTR_ID] = a12.[CALL_CTR_ID]
create table ZZMD00 (
COUNTRY_ID BYTE, 
WJXBFS1 FLOAT)
[An analytical SQL]
insert into ZZMD00 values ([DummyInsertValue])
select a11.[REGION_ID] AS REGION_ID,
a11.[REGION_NAME] AS REGION_NAME,
pa1.[WJXBFS1] AS WJXBFS1
from [ZZMD00] pa1, 
[LU_REGION] a11
where pa1.[COUNTRY_ID] = a11.[COUNTRY_ID]
drop table ZZMD00
In Report 2B, an Analytical SQL pass is necessary to compute AvgDev since it 
is not a database supported group-value function. In the next pass, the 
results of the calculation are inserted back into the temporary database 
structures. The last SQL pass is the same as Report 2A, since it is used to 
display the result for all regions. 
Using single-value functions
The key to understanding the computation of a single-value function is to 
identify the way it is used. The next two subsections provide examples of the 
two uses of single-value functions and how they are processed. 
The first example shows a single-value function applied before a group-value 
function. This is referred to as transforming a fact. The second example 
shows a single-value function applied after the group-value function. This is 
referred to as a compound metric. 
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
C# Project: DLLs for PDF Image Extraction. In Document. C# programming sample for extracting all images from PDF. // Open a document.
export pdf form data to excel; extract pdf data to excel
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Merge Microsoft Office Word, Excel and PowerPoint data to PDF form. PDF document splitting, PDF page reordering and PDF page image and text extraction.
how to extract data from pdf file using java; how to fill pdf form in reader
MicroStrategy Functions Reference
Understanding Functions in MicroStrategy   
1
© 2011 MicroStrategy, Inc.
How MicroStrategy processes functions   
51
Each example contains two reports, the first one showing the SQL syntax 
when calculations are processed by the database and the second one when 
calculations are processed by the Intelligence Server.
The use of transform in this context refers to retrieving a fact in a 
different form. For example, you can obtain the absolute value for a 
fact or the natural logarithm, but the fact is the same. This differs 
from a transformation where the data retrieved is different when a 
transformation is applied, for example, last year’s revenue instead of 
this year’s revenue.
Transforming a fact into another fact
In this case, the fact Revenue is transformed into another fact, namely the 
natural logarithm values defined as Ln(Revenue) or the truncated revenue 
values defined as Trunc(Revenue).
The following example describes this type of usage and displays the SQL that 
is generated.
Consider the two metrics defined as follows: 
• M3A = Sum(Ln(Revenue)){~+}
• M3B = Sum(Trunc(Revenue)){~+}.
Put M3A with Region on the template. The database, in this case, SQL Server 
2000, supports the function Ln. The following SQL is generated:
Report 3A (SQL single-value before group-value function) - SQL Server 2000
Pass0 - Duration: 0:00:40.45
select a13.REGION_ID  REGION_ID,
max(a14.REGION_NAME)  REGION_NAME,
sum(LOG(a11.ORDER_AMT))  WJXBFS1
from ORDER_FACT a11
join LU_EMPLOYEE a12
on  (a11.EMP_ID = a12.EMP_ID)
join LU_CALL_CTR a13
on  (a12.CALL_CTR_ID = a13.CALL_CTR_ID)
join LU_REGION a14
on  (a13.REGION_ID = a14.REGION_ID)
group by a13.REGION_ID
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
document processing SDK supports PDF page extraction, copying and The portable document format, known as PDF document, is file that allows users to open & read
save pdf forms in reader; extract data from pdf form
C# PDF Password Library: add, remove, edit PDF file password in C#
PDFDocument doc = PDFDocument.Open(intputFilePath, userPassword); // Define IsFillForm = true; // Content extraction is allowed true; // Add password to PDF file
change font size pdf form reader; how to make a pdf form fillable in reader
Understanding Functions in MicroStrategy
MicroStrategy Functions Reference
1
52
How MicroStrategy processes functions
© 2011 MicroStrategy, Inc.
Based on the SQL, this is what happened:
1 The Ln function is applied to the fact Revenue, which is defined in the 
warehouse by the column ORDER_AMT. 
The Ln function uses the syntax LOG in SQL Server 2000.
2 Then, the Sum function is performed on the new fact, namely 
Ln(Revenue). 
Now, put M3B with Region on the template, the following SQL is generated:
Report 3B (MicroStrategy single-value before group-value function)
select a11.[CALL_CTR_ID] AS CALL_CTR_ID,
a11.[CUST_CITY_ID] AS CUST_CITY_ID,
a12.[REGION_ID] AS REGION_ID,
a13.[REGION_NAME] AS REGION_NAME,
a11.[TOT_DOLLAR_SALES] AS WJXBFS1
from [CITY_CTR_SLS] a11, 
[LU_CALL_CTR] a12, 
[LU_REGION] a13
where a11.[CALL_CTR_ID] = a12.[CALL_CTR_ID] and 
a12.[REGION_ID] = a13.[REGION_ID]
[An Analytical SQL]
In this case, as noted by the text [An Analytical SQL], the functions 
Trunc and Sum are computed by the Intelligence Server. Intelligence Server 
computes the new fact Trunc([Dollar Sales]) first and then uses the 
Sum function to sum the new fact for each region.
Calculating a compound metric
Single-value functions can be used to create compound metrics. Subtraction, 
addition, division, and multiplication operators (–, +, /, *) are common 
examples of single-value functions. See the following examples:
• (Sum([Dollar Sales]){~}/Sum([Dollar Sales]) 
{~,Country})
• (Sum([Dollar Sales]){~} + Sum([Freight]) {~})
The examples below use a compound metric and a metric that transforms a 
fact in the same report. The examples illustrate the SQL generated when the 
C# PDF - Extract Text from Scanned PDF Using OCR SDK
Field Data. Data: Auto Fill-in Field Data. Field: Insert Recognize scanned PDF document and output OCR result to class source code for ocr text extraction in .NET
pdf data extraction; extract data from pdf
C# TIFF: Use C#.NET Code to Extract Text from TIFF File
SDKs, C# users can easily add and perform text extraction functionality into Certainly, you may also render it to a PDF, Word or SVG Set the training data path
extract table data from pdf; pdf form save in reader
MicroStrategy Functions Reference
Understanding Functions in MicroStrategy   
1
© 2011 MicroStrategy, Inc.
How MicroStrategy processes functions   
53
function is supported by the database and the Intelligence Server, 
respectively.
Consider the following metric definitions:
• M4A = Ln(Sum(Revenue){~})
• M4B = Trunc(Sum(Revenue){~})
Put metric M3A, from the previous example, and metric M4A together with 
attribute Region on the template. The database, in this case SQL Server 
2000, supports the Ln function. The following SQL is generated:
Report 4A (SQL single-value before and after group-value functions) - SQL 
Server 2000
Pass0 - Duration: 0:00:02.58
select a13.REGION_ID  REGION_ID,
max(a14.REGION_NAME)  REGION_NAME,
sum(LOG(a11.ORDER_AMT))  WJXBFS1,
LOG(sum(a11.ORDER_AMT))  WJXBFS2
from ORDER_FACT a11
join LU_EMPLOYEE a12
on  (a11.EMP_ID = a12.EMP_ID)
join LU_CALL_CTR a13
on  (a12.CALL_CTR_ID = a13.CALL_CTR_ID)
join LU_REGION a14
on  (a13.REGION_ID = a14.REGION_ID)
group by a13.REGION_ID
To process metric M3A, the single-value function Ln is calculated before the 
group-value function Sum, and for metric M4A, Ln is calculated after Sum. 
The Ln function uses the syntax LOG in SQL Server 2000.
Similarly, if you put metrics M3B and M4B together with attribute Region on 
the template, and the database does not support the Trunc function, then the 
following SQL is generated:
Pass0 - Duration: 0:00:12.67
select a11.ORDER_DATE  DAY_DATE,
a11.EMP_ID  EMP_ID,
a11.ORDER_ID  ORDER_ID,
a13.REGION_ID  REGION_ID,
a14.REGION_NAME  REGION_NAME,
a11.ORDER_AMT  WJXBFS1
from ORDER_FACT a11
Understanding Functions in MicroStrategy
MicroStrategy Functions Reference
1
54
How MicroStrategy processes functions
© 2011 MicroStrategy, Inc.
join LU_EMPLOYEE a12
on  (a11.EMP_ID = a12.EMP_ID)
join LU_CALL_CTR a13
on  (a12.CALL_CTR_ID = a13.CALL_CTR_ID)
join LU_REGION a14
on  (a13.REGION_ID = a14.REGION_ID)
Pass1 - Duration: 0:00:08.46
[An Analytical SQL]
The fact, Revenue, which is defined as column ORDER_AMT in the 
ORDER_FACT table, is retrieved and used to compute both metrics. 
Using OLAP functions
You can better understand how Intelligence Server computes OLAP 
functions by observing several examples based on the following properties:
• Window size
• BreakBy
• SortBy
• NULL handling
• Tie handling
There are two examples for each subsection, comparing the SQL syntax when 
the database performs the OLAP function calculations with the one when the 
Intelligence Server performs the computation.
Window Size in Moving functions
For this example, define metric M1A as Sum(Revenue){~+}. Then create 
an OLAP metric called OM1, that is defined as
MovingAvg <BreakBy = {Category}, SortBy = 
(Value)>([M1A],5).
OM1 computes the moving average of M1A with a window size of 5. The 
OLAP metric is computed after it is sorted by the value of M1A in ascending 
order. Moreover, the computation restarts for every category.
MicroStrategy Functions Reference
Understanding Functions in MicroStrategy   
1
© 2011 MicroStrategy, Inc.
How MicroStrategy processes functions   
55
Now, put the attributes Category and Item on the Row axis and the above 
metrics on the Column axis. Run this report with an empty filter against a 
database that does not support OLAP functions (in this case Microsoft 
Access), the following SQL is generated:
Report 5A (MicroStrategy OLAP function - window size) - Microsoft Access
Pass0 - Duration: 0:00:00.60
select a13.[CATEGORY_ID] AS CATEGORY_ID,
max(a14.[CATEGORY_DESC]) AS CATEGORY_DESC,
a11.[ITEM_ID] AS ITEM_ID,
max(a12.[ITEM_NAME]) AS ITEM_NAME,
sum(a11.[TOT_DOLLAR_SALES]) AS WJXBFS1
from [ITEM_MNTH_SLS] a11, 
[LU_ITEM] a12, 
[LU_SUBCATEG] a13, 
[LU_CATEGORY] a14
where a11.[ITEM_ID] = a12.[ITEM_ID] and 
a12.[SUBCAT_ID] = a13.[SUBCAT_ID] and 
a13.[CATEGORY_ID] = a14.[CATEGORY_ID]
group by a13.[CATEGORY_ID],
a11.[ITEM_ID]
Pass1 - Duration: 0:00:00.01
[An Analytical SQL]
Alternatively, if you execute the above report against a database that does 
support OLAP computations (in this case Oracle 9i), then the following SQL 
is generated:
Report 5B (DB OLAP function - window size) - Oracle 9i
Pass0 - Duration: 0:00:10.15
select a13.CATEGORY_ID  CATEGORY_ID,
a14.CATEGORY_DESC  CATEGORY_DESC,
a11.ITEM_ID  ITEM_ID,
a12.ITEM_NAME  ITEM_NAME,
sum((a11.QTY_SOLD * (a11.UNIT_PRICE - a11.DISCOUNT)))
WJXBFS1,
avg(sum((a11.QTY_SOLD * (a11.UNIT_PRICE -
a11.DISCOUNT)))) over(partition by a13.CATEGORY_ID
order by sum((a11.QTY_SOLD * (a11.UNIT_PRICE -
a11.DISCOUNT))) asc rows 4 preceding)  WJXBFS2
from ORDER_DETAIL a11, 
LU_ITEM a12, 
Understanding Functions in MicroStrategy
MicroStrategy Functions Reference
1
56
How MicroStrategy processes functions
© 2011 MicroStrategy, Inc.
LU_SUBCATEG a13, 
LU_CATEGORY a14
where a11.ITEM_ID = a12.ITEM_ID and 
a12.SUBCAT_ID = a13.SUBCAT_ID and 
a13.CATEGORY_ID = a14.CATEGORY_ID
group by a13.CATEGORY_ID,
a14.CATEGORY_DESC,
a11.ITEM_ID,
a12.ITEM_NAME
The following example shows how the Intelligence Server computes OLAP 
functions when the database does not support OLAP functions. The 
Intelligence Server retrieves all components: the input metric, BreakBy 
parameter, and SortBy parameter. In the above examples, since the SortBy 
parameter setting is by Value, it is sufficient to bring back just the input 
metric (
WJXBFS1
).
BreakBy in OLAP functions
In the Intelligence Server, the BreakBy parameter is only available at the 
attribute level. In other words, you can start over certain computations of 
OLAP functions when a part of the metric belongs to a different attribute 
element. 
In the previous example (window size), there is an OLAP function with 
Category in the BreakBy parameter. If the Analytical Engine computes the 
OLAP function, Intelligence Server must select this attribute in the select 
clause. If the database computes the OLAP function, then this attribute must 
also be in the partition by clause.
Attributes in the BreakBy parameter of an OLAP metric are always 
applied, meaning that they are always in the Select clause, and if the 
database computes it, they are also in the Partition by clause. This 
is true whether the attribute is on the template or not.
Run a report similar to the one for window size, deleting the attributes 
Category and Item from the template and adding Subcategory. The results 
for metric M1A are completely different from the previous report because if 
Category and Item are not on the template, then the level of aggregation for 
metric M1A is replaced by Subcategory, which is on the template. On the 
other hand, OLAP metric OM1 must still restart the calculation (break by) for 
each Category and therefore remains in the appropriate Select and 
Partition by clauses. Notice that in both the SQLs below, the Intelligence 
Server always selects Category even though Category is not on the template. 
Documents you may be interested
Documents you may be interested