Creating Dashboard/Paginated Report through QuickSight API

Hi Team,

I am trying to create a Dashboard/Paginated report through the QuickSIght Java APIs.
As of now I am able to create an analyses. Like I am calling the CreateAnalysis API with basic details, its creating the simple analyses on QuickSight.

Now am calling the DescribeAnalysisDefinition API for the newly created analyses. Below is the response,

{Analysis: {AnalysisId: bb333849-c359-4597-a8e8-11b7401f1103,Arn: arn:aws:quicksight:us-east-1:385817851343:analysis/bb333849-c359-4597-a8e8-11b7401f1103,Name: API Analyses 8,Status: CREATION_IN_PROGRESS,DataSetArns: [],CreatedTime: Tue Mar 28 17:53:31 IST 2023,LastUpdatedTime: Tue Mar 28 17:53:31 IST 2023,Sheets: []},Status: 200,RequestId: aa939c34-a82d-40a2-8c53-9c97c2d3b749}

Now the main thing is, I have to create a complete Dashboard with multiple charts, visuals etc, If am calling the CreateAnalysis API then I have to set a lot of values from code so that I will create the required analysis, But its too much of coding for me to write down every config of every visual. Is there any better way to do this?

BarChartVisual bar = new BarChartVisual();

		// Visual id
		bar.setVisualId("visualid-1");

		VisualTitleLabelOptions titleLabelOptions = new VisualTitleLabelOptions();
		ShortFormatText shorttext = new ShortFormatText();
		shorttext.setPlainText("Bar chart");
		titleLabelOptions.setFormatText(shorttext);

		// Title
		bar.setTitle(titleLabelOptions);

		ColumnHierarchy hirerachy = new ColumnHierarchy();
		List<ColumnHierarchy> columnHierarchiesList = new ArrayList<>();
		columnHierarchiesList.add(hirerachy);
		PredefinedHierarchy predefinedHierarchy = new PredefinedHierarchy();
		List<ColumnIdentifier> columnIdentifierList = new ArrayList<>();
		columnIdentifierList.add(col2);
		predefinedHierarchy.setColumns(columnIdentifierList);
		hirerachy.setPredefinedHierarchy(predefinedHierarchy);

		// Hierarchy
		bar.setColumnHierarchies(columnHierarchiesList);

		BarChartConfiguration barConfig1 = new BarChartConfiguration();
		BarChartFieldWells field = new BarChartFieldWells();
		BarChartAggregatedFieldWells wells = new BarChartAggregatedFieldWells();
		List<MeasureField> values = new ArrayList<>();
		List<DimensionField> categoryList = new ArrayList<>();
		DimensionField category = new DimensionField();

		NumericalDimensionField numericalDimensionField = new NumericalDimensionField();
		numericalDimensionField.setColumn(col2);
		numericalDimensionField.setFieldId("secongdimensiotn2");
		category.setNumericalDimensionField(numericalDimensionField);
		categoryList.add(category);

		MeasureField mf = new MeasureField();
		values.add(mf);
		NumericalMeasureField numericalMeasureField = new NumericalMeasureField();
		ColumnIdentifier col = new ColumnIdentifier();
		col.setColumnName("isLatest");

		col.setDataSetIdentifier("Sales Pipeline");
		numericalMeasureField.setColumn(col);
		numericalMeasureField.setFieldId("firstfield1");
		mf.setNumericalMeasureField(numericalMeasureField);
		wells.setValues(values);
		wells.setCategory(categoryList);
		field.setBarChartAggregatedFieldWells(wells);
		barConfig1.withFieldWells(field);
		barConfig1.setOrientation("HORIZONTAL");
		barConfig1.setBarsArrangement("STACKED");
	
		// bar configuration
		bar.setChartConfiguration(barConfig1);

		BarChartVisual bar2 = new BarChartVisual();
		bar2.setVisualId("visualid-2");
		BarChartConfiguration barConfig2 = new BarChartConfiguration();
		barConfig2.setOrientation("HORIZONTAL");
		barConfig2.setBarsArrangement("STACKED");
		bar2.setChartConfiguration(barConfig2);

		List<Visual> visuals = new ArrayList<>();
		Visual visual = new Visual();
		Visual visual2 = new Visual();
		visual.setBarChartVisual(bar);

		visuals.add(visual);
		visuals.add(visual2);
		sheetDef.setVisuals(visuals);

		List<SheetDefinition> sheetDefList = new ArrayList<>();
		sheetDefList.add(sheetDef);

		DataSetIdentifierDeclaration data = new DataSetIdentifierDeclaration();
		data.setIdentifier("Sales Pipeline");
		List<DataSetIdentifierDeclaration> list = new ArrayList<>();
		list.add(data);

		definition.setDataSetIdentifierDeclarations(list);
		definition.setSheets(sheetDefList);
		req.setDefinition(definition);

		CreateAnalysisResult results1 = getClient().createAnalysis(req);

You might want to create an analysis that has all the visuals possible on one sheet. This would act as a dictionary to reference.

Hi @Max ,

My question might seems to be very basic, but I want to clarify it!
So I can create the analysis in QuickSight console, Then I can even call DescribeAnalysisDefinition API to know the base analysis’s details,
Now how do I use it to create a new Analysis ? You mean to say copy the definition and use it on new analysis

Yes you can do that. You will need to do some transformations from the describe analysis (i.e taking out response code etc…).

It is outlined in this blog post.

1 Like