Multiple selection in Pentaho CDE Dashboard, part 1
There are many ways to create a selector with multiple selections în Pentaho 5 with CDE, but this one works well for what i want.
- first row with name selector – htmlObject for selector
- second row with name table – htmlObject for tabel
- resource (javascript code snippet) with name javascript_snippet ( see point 4)
We need 2 datasources: one for selector (sql over sqlJndi ) and one for table (mdx over mondrianJndi).
a. Create a sql over sqlJndi datasource with this parameters:
- Name: sqlPositions
- Jndi: SampleData
- Query: SELECT DISTINCT POSITIONTITLE FROM QUADRANT_ACTUALS ORDER BY POSITIONTITLE ASC
This datasource return Positions values which populate the selector.
b. Create a mdx over mondrianJndi datasource with this parameters:
- Name: mdxTabel
- Jndi: SampleData
- Mondrian schema: SampleData
- Query: with set [Positions_Positions_Set] as '${mdxPosition}' set [Region_Region_Set] as '{[Region].[Region].Members}' set [Department_Department_Set] as '{[Department].[Department].Members}' set [Measures_Set] as '{[Measures].[Actual], [Measures].[Budget]}' select NON EMPTY [Measures_Set] on COLUMNS, NON EMPTY Crossjoin([Region_Region_Set], Crossjoin([Positions_Positions_Set], [Department_Department_Set])) on ROWS from [Quadrant Analysis]
- Parameters: mdxPosition
With this datasource we get the result of selection.
a. Create selector.
From Selects panel choose “SelectMulti Component” and set this values as parameters:
- Name: multiselect
- Parameters: mdxPosition
- Datasource: sqlPositions
b. Create Table.
From Others panel choose “Table Component” and set this values as parameters:
- Name: table
- Listeners: mdxPosition (parameter from selector)
- Parameters: Arg - mdxPosition and Value – mdxPosition
c. Create parameter.
From Generic panel choose “Custom Parameter” and set this values:
- Name: mdxPosition
- Javascript code: function(){return mdxPosition;}
4. javascript_snippet.
Here i'll take all the values and i'll construct the ${mdxPosition} parameter to be used in mdx over mondrianJndi (mdxTabel):
This is just a simple dashboard. Enjoy.
1. Create layout.
For this demo in layout i create only 3 elements (2 rows and 1 javascript code snippet) with default settings:- first row with name selector – htmlObject for selector
- second row with name table – htmlObject for tabel
- resource (javascript code snippet) with name javascript_snippet ( see point 4)
2. Create datasources.
In this demo i choose SampleData as database.We need 2 datasources: one for selector (sql over sqlJndi ) and one for table (mdx over mondrianJndi).
a. Create a sql over sqlJndi datasource with this parameters:
- Name: sqlPositions
- Jndi: SampleData
- Query: SELECT DISTINCT POSITIONTITLE FROM QUADRANT_ACTUALS ORDER BY POSITIONTITLE ASC
This datasource return Positions values which populate the selector.
b. Create a mdx over mondrianJndi datasource with this parameters:
- Name: mdxTabel
- Jndi: SampleData
- Mondrian schema: SampleData
- Query: with set [Positions_Positions_Set] as '${mdxPosition}' set [Region_Region_Set] as '{[Region].[Region].Members}' set [Department_Department_Set] as '{[Department].[Department].Members}' set [Measures_Set] as '{[Measures].[Actual], [Measures].[Budget]}' select NON EMPTY [Measures_Set] on COLUMNS, NON EMPTY Crossjoin([Region_Region_Set], Crossjoin([Positions_Positions_Set], [Department_Department_Set])) on ROWS from [Quadrant Analysis]
- Parameters: mdxPosition
With this datasource we get the result of selection.
3. Create components.
a. Create selector.
From Selects panel choose “SelectMulti Component” and set this values as parameters:
- Name: multiselect
- Parameters: mdxPosition
- Datasource: sqlPositions
b. Create Table.
From Others panel choose “Table Component” and set this values as parameters:
- Name: table
- Listeners: mdxPosition (parameter from selector)
- Parameters: Arg - mdxPosition and Value – mdxPosition
c. Create parameter.
From Generic panel choose “Custom Parameter” and set this values:
- Name: mdxPosition
- Javascript code: function(){return mdxPosition;}
4. javascript_snippet.
Here i'll take all the values and i'll construct the ${mdxPosition} parameter to be used in mdx over mondrianJndi (mdxTabel):
$(document).ready(function () { // set default value to start with var mdxPosition = "{[Positions].[Positions].Members}"; Dashboards.setParameter("mdxPosition", mdxPosition); // function to get selected values function select_option_live(col) { var arr = []; $('#' + col).find('option:selected').each(function () { arr.push($(this).val()); }); return arr; } // what's happened on select $("#selector").on("change", function () { var val, mdxSel; // val is an array of selected values val = select_option_live("selector"); // if all values are selected theres no need to send all, else construct filter if ($("#selector option:selected").length == $("#selector option").length) { Dashboards.fireChange("mdxPosition", mdxPosition); } else { mdxSel = 'Filter(' + mdxPosition + ',('; var arr = [], filterVal = '[Positions].[Positions].CurrentMember.Name = '; for (var i = 0; i < val.length; i++) { arr.push(filterVal + '"' + val[i] + '" OR '); } mdxSel += arr.join("").toString().substr(0, arr.join("").toString().length - 3) + '))'; Dashboards.fireChange("mdxPosition", mdxSel); // console.log(mdxSel); } }); });
This is just a simple dashboard. Enjoy.
Comentarii
Trimiteți un comentariu