cancel
Showing results for 
Search instead for 
Did you mean: 

Error in moveDimension within a forEach for Swapping charts

former_member199630
Contributor
0 Kudos

Hi All,

I tried to implement what was done in the following blog (which is a great idea) but it works perfect if I don't change the layout of any of the chart, mainly the bigger chart.

Blog:

In my case, what I see in the bigger chart could change.

For example, by default I see Sales by Region (Europe, America, Asia, etc), and the user can filter by a Region and see the Countries.

So, When I change the bigger chart with other chart I loose the filter and the drill down done before.

To solve this, I tried to "save" the drills made in rows and columns, before to do what it is done in the blog, but I don't know why the moveDimension is not working as I expected, what is more, when I execute the dashboard and run the event, it says there is an error in my script and the error is in the moveDimension.

I want to share my code, just if you have the chance to test it, and see if it works.

Thanks, Federico

/******************************************************************/

My Code:

// Initializing variables

var DS1_Name = DS_1.getInfo().queryTechnicalName;

var DS2_Name = DS_2.getInfo().queryTechnicalName;

var system = DS_1.getInfo().system;

var chart = CHART_1.getChartType();

// Saving the layout

var DS1_COL_BEF = DS_2.getDimensions(Axis.COLUMNS);

var DS1_ROW_BEF = DS_2.getDimensions(Axis.ROWS);

var DS2_COL_BEF = DS_1.getDimensions(Axis.COLUMNS);

var DS2_ROW_BEF = DS_1.getDimensions(Axis.ROWS);

// Swapping charts

DS_1.assignDataSource(system, DataSourceType.QUERY, DS2_Name);

DS_2.assignDataSource(system, DataSourceType.QUERY, DS1_Name);

CHART_1.setChartType(CHART_2.getChartType());

CHART_2.setChartType(chart);

// Taking the actual columns & rows

var DS1_COL_AFT = DS_1.getDimensions(Axis.COLUMNS);

var DS1_ROW_AFT = DS_1.getDimensions(Axis.ROWS);

var DS2_COL_AFT = DS_2.getDimensions(Axis.COLUMNS);

var DS2_ROW_AFT = DS_2.getDimensions(Axis.ROWS);

// Removing dimensions

DS1_COL_AFT.forEach(function(element, index) {

  DS_1.removeDimension(element);

});

DS1_ROW_AFT.forEach(function(element, index) {

  DS_1.removeDimension(element);

});

DS2_COL_AFT.forEach(function(element, index) {

  DS_2.removeDimension(element);

});

DS2_ROW_AFT.forEach(function(element, index) {

  DS_2.removeDimension(element);

});

// Adjusting the charts as they were

DS1_COL_BEF.forEach(function(element, index) {

  DS_1.moveDimensionToColumns(element);

});

DS1_ROW_BEF.forEach(function(element, index) {

  DS_1.moveDimensionToRows(element);

});

DS2_COL_BEF.forEach(function(element, index) {

  DS_2.moveDimensionToColumns(element);

});

DS2_ROW_BEF.forEach(function(element, index) {

  DS_2.moveDimensionToRows(element);

});

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi Federico Galban ,

I tried a similar scenario like this for  a much simple case the moveDimension part works fine for me.


I have a doubt in your script,

// Adjusting the charts as they were

DS1_COL_BEF.forEach(function(element, index) {

  DS_1.moveDimensionToColumns(element);

});

DS1_ROW_BEF.forEach(function(element, index) {

  DS_1.moveDimensionToRows(element);

});

DS2_COL_BEF.forEach(function(element, index) {

  DS_2.moveDimensionToColumns(element);

});

DS2_ROW_BEF.forEach(function(element, index) {

  DS_2.moveDimensionToRows(element);

});

Your goal is ultimately to swap the charts, so shouldnt this be done as follows

// Adjusting the charts as they were

DS1_COL_BEF.forEach(function(element, index) {

  DS_2.moveDimensionToColumns(element);

});

DS1_ROW_BEF.forEach(function(element, index) {

  DS_2.moveDimensionToRows(element);

});

DS2_COL_BEF.forEach(function(element, index) {

  DS_1.moveDimensionToColumns(element);

});

DS2_ROW_BEF.forEach(function(element, index) {

  DS_1.moveDimensionToRows(element);

});

Just asking to be clear, if wrong pls ignore

Thanks

Karthik Swaminathan.