In this post, we are going to show you how to use multiple PALO functions in the macro to successfully add element in the dimension. For this purpose we are going to use the Biker database and elements will be added to the Product dimension. Have in mind that example is for the users who use the cloud instance of jedox.
First we need to establish connection with the OLAP.
$host = $_JEDOX['OLAP_HOST'];$port = $_JEDOX['OLAP_PORT'];$conn = palo_init($host, $port, $_JEDOX['OLAP_SESSION_ID']);
Then we need to formulate Palo.EADD function. this function consists of the following parameters.
PALO.EADD(Server/Database, Dimension, Type, Element, Parent Element, Weight, Clear, Error suppr.)
Possible values for Clear are 0 (or FALSE), 1 (or TRUE) and 2
0: Removes no elements of the dimension before importing
1: Removes all elements of the existing dimension before importing
2: Removes all existing elements of the C-dimension before importing. Basic elements are not deleted.
More about this and other functions can be found here.
When these are combined code should look something like this:
function...
Here is one quick way to download a file as an Excel.
In normal conditions, Jedox offers two possibilities to Export to Excel:
XLSX Snapshot
XLSX OLAP Snapshot
More about differences can be found here.
Sometimes, we want to limit end users from seeing these buttons. That can be done in this way [see bellow] by clicking on report properties and unchecking Interface checkboxes.
Now, when the report does not contain anything related to Jedox bars we can install the macro for exporting.
The code behind the macro is very simple:
return array
(
array('actn', "exportToXLSX",2),
);
The final output looks like this:
The whole project can be downloaded from here....
One of the commonly used transformations in ETL is Table denormalization.
Denormalization is the reverse of normalization. Row-based data with key-value pairs is transposed into column-based data. This allows an OLAP model with one measure in each row (with the measure name as a key) to be arranged into a relational model in which the measures are held in various columns.
Jedox knowledge base
In typical table denormalization, Measure fields are populated by the rows which we want to see in columns. Usually, it's enough to do it one by one but sometimes it happens that there are 30 or 50 elements that needed to be transposed into the columns.
For that reason, we will use a little trick that can be found in Advanced settings. In case you are not familiar with this type of transformation here is the link that can help.
Our file contains 3 columns and one of them contains data that should be denormalized.
Instead of using static measures, we will introduce...
When working with dimensions like products there must be a use-case when mapping matrix is necessary. This little mapping matrix is used when there are certain years where some products are plannable and some others not. For this example, we will use the Mapping_Matrix database and cube Mapping Products.
This cube will contain dimensions like Years, Products, and Measures [not necesarry]. In some terminologies "Control cube " is also used.
As we could see from the image above in hidden columns we will store PALO.DATA formula. Behind the Check and Uncheck icons we could see the following code:
=HYPERLINK("SELF",IF(I8>0,iCheck,iUncheck),"",IF(I8=0,"!1","!0"),I8)
This hyperlink function just make difference if the value is 0 or higher. In case it's zero then every click on the iUncheck image will splash ! 1 on PALO.DATA function. Otherwise !0 would be splashed.
More on splashing commands can be found here.
The whole project can be downloaded from here....
During the planning process, there will be activities that require to copy data from the previous year or another version. There are multiple ways to achieve it via ETL but in this article, we are going to show you how to do it via hyperlink.
Copying using native copy/like function
If you ever attended any Jedox training you have probably learned splashing commands like Copy and Like. Both of them can be found on the knowledge base and this is good pre-knowledge for the following segment.
Copying using hyperlink function
Copy and Like function could be converted into the hyperlink and do the same job.
In the cell where you would like to create a hyperlink copy the following code.
=HYPERLINK("SELF","Copy Data","Copy Data","Copy "&F$5,$G6)
This code is another way to represent "Copy 2017" and G6 is a cell to where we want data to be applied.
Copying using hyperllink in the button
A similar thing is done in the next example but only instead of the hyperlink, we are...
Setting the default page in Jedox for a specific group is not a big issue if your application contains a smaller number of groups. When a number of groups enlarge, we should look for a more alternative solution instead of checking the boxes one by one. This represents 1st way.
Information of the default homepage is stored in the dimension GROUP_PROPERTIES, more specifically in the prefs element.
More about the system database could be found here.
Once we check this box from picture one, XML code is immediately generated and information on the default page is written. This code could be now pasted in every other cell. In that way, we could significantly decrease the time of checking and as well automate a bit process. This represents 2nd way.
3rd way would be to use this code and copy it via ETL.
Import to have in mind is that once a new start page is chosen code needs to be arranged. Also, if the Start...
Than the issue is mostlikely related to the return err, where the refresh statement is before the close and message statement:
WRONG:
{return array( array('actn', 'refreshData'),
array('actn','closeWindow'),
array('msg', 'STRATOS', 'Info', "Success Message is generated"),
);}
This can be fixed by putting the refresh after the message:
CORRECT:
{return array( array('actn','closeWindow'),
array('msg', 'STRATOS', 'Info', " array('msg', 'STRATOS', 'Info', "Success Message is generated"), "),
array('actn', 'refreshData')
);}...
Jedox has a wide range of possibilities when it comes to reporting since it is working based on Excel technology. Having that in mind it might happen that sometimes you will need to add a colour picker to your dashboard.
Here is an example of how it could be done.
On the spreadsheet, you can put the colours which could be chosen
Set up a macro which will be trigged when colour is clicked
="<a href=""#"" title='"&U5&"' style=""height:100%;width:100%;display:inline-block;color:"&U5&";background-color:"&U5&";"" onclick=""Jedox.wss.macro.exec([true,['Module1.saveColorToVariable','"&V5&"']])""> </a>"
Create the macro in the Macro Editor
function saveColorToVariable ( $color )
{
define_variable ( 'varColor' , $color );
//return do_close();
}
That is it!! In case you are not a person who has much sense for colours, there are amazing patterns of colours on this website.
An example of the project can be found here....
Here is the sample of the macro PHP code which can help you to return the IP address of the current server from the spreadsheet.
It could be useful when reports contain download functionality which is the source on the server name. So in order not to have a hardcoded server DNS name you could use this funcionality.
--------
function temp(){
$localIP = getHostByName(getHostName());
return __msgbox("myComplexVariable=".print_r($localIP , TRUE ), 'Test', 'Info');
}
--------...
When crafting reports in Jedox, it's not uncommon to encounter scenarios where the large volume of rows becomes unwieldy. In such cases, the implementation of paging proves invaluable. Paging not only ensures a clear presentation of the table but also serves to optimize server resources during report access.
In the example provided below, we illustrate a two-step approach to introduce a paging solution, leveraging the Jedox BikerBest database.
Step 1: Create the Table of Elements
The table, presented via Dyna-range, reveals an extensive list of elements that stretches to the bottom, posing navigation challenges. To address this, a subset of Dyna-range is strategically employed to showcase all base elements within the 'Product' dimension.
Step 2: Limit the number of rows based on the variables and introduce paging
It's common practice to incorporate external variables into the subset.
StartPosition - > from which element we want to start [Inital 0].
NumberOfElements -> how many elements we want to see in the table [editable but set on 30 for...
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.