{"id":7053,"date":"2024-06-13T00:00:00","date_gmt":"2024-06-13T04:00:00","guid":{"rendered":"https:\/\/www.sisense.com\/take-control-of-your-data-visualizations\/"},"modified":"2024-11-29T07:28:50","modified_gmt":"2024-11-29T12:28:50","slug":"take-control-of-your-data-visualizations","status":"publish","type":"post","link":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/","title":{"rendered":"Take control of your data visualizations: Connecting to third-party libraries with Compose SDK"},"content":{"rendered":"<p>We launched Sisense Compose SDK to provide developers with unmatched power and flexibility to embed analytics into their apps, exactly the way they want to. A signature benefit is that it provides engineers with an incredibly flexible way to fetch and manipulate data from Sisense, using it seamlessly within web applications, all using the latest frameworks and languages such as React and TypeScript. With Compose SDK, you can now easily flow data into the charting components you want to use, so you have the freedom to build the pixel-perfect visualization experiences your users and customers demand.<\/p>\n<p>In this article, I\u2019ll share how Compose SDK gives you the flexibility to not only use your already extensive set of charting components, but to connect Sisense data to popular third-party charting libraries, such as <a href=\"https:\/\/plotly.com\/javascript\/\" target=\"_blank\" rel=\"noopener\">Plotly<\/a>, <a href=\"https:\/\/mui.com\/x\/react-charts\/\" target=\"_blank\" rel=\"noopener\">MUI Charts<\/a>, or <a href=\"https:\/\/www.chartjs.org\/\" target=\"_blank\" rel=\"noopener\">Chart.js<\/a> for any visualization experience you need now or in the future.<\/p>\n<p>I\u2019ll walk you through code examples of using Compose SDK components to load data from a data model in Sisense, transform, and structure it in any way required by third-party charts, and then render it. The examples will use Plotly and MUI charting components, but the flow and techniques can be applied to other charting libraries.<\/p>\n<p>The code examples below should work with an existing or new React project with TypeScript. If you don\u2019t have an existing app, follow the Quickstart guide to set up one.<\/p>\n<p>Full code for the examples can be accessed at this GitHub repo: <a href=\"https:\/\/github.com\/imtuanpham\/csdk-sandbox\" target=\"_blank\" rel=\"noopener\">GitHub \u2013 imtuanpham\/csdk-sandbox: A sandbox application for testing Sisense Compose SDK<\/a><\/p>\n<p><strong>Fetching data with Compose SDK<\/strong><\/p>\n<p>Before diving into the integration, it\u2019s essential to understand how Compose SDK fetches data. The SDK provides a React hook called useExecuteQuery that allows querying data from a specific data model in a Sisense instance. The hook also handles data aggregation and data filtering if needed.<\/p>\n<p>For example, in the first code snippet provided, we use the useExecuteQuery hook to fetch data from the Sample ECommerce data model:<\/p>\n<pre><code>const { data, isLoading, isError } = useExecuteQuery({<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>dataSource: DM.DataSource,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>dimensions: [DM.Commerce.AgeRange],<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>measures: [<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>measures.sum(DM.Commerce.Cost, 'Total Cost'),<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>measures.sum(DM.Commerce.Revenue, 'Total Revenue'),<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>],<\/code><\/p>\n<p><code>});<\/code> <code>if (isLoading) {<\/code><\/p>\n<p style=\"padding-left: 40px;\"><code>return &lt;div&gt;Loading...&lt;\/div&gt;;<\/code><\/p>\n<p><code>}<\/code> <code>if (isError) {<\/code><\/p>\n<p style=\"padding-left: 40px;\"><code>return &lt;div&gt;Error&lt;\/div&gt;;<\/code><\/p>\n<p><code>}<\/code><\/p>\n<p>Here, dataSource specifies the data model we\u2019re pulling from, which in this case is Sample ECommerce. Parameters dimensions and measures define what data we want to retrieve following the dimensional modeling of your data source. In this case, we\u2019re fetching the AgeRange dimension and summing up the Cost and Revenue measures.<\/p>\n<p>Notice the isLoading and isError flags? The hook provides these to make it easier to handle various data states. You can display loading spinners, error messages, or fallback UI without any extra effort.<\/p>\n<p><strong>Visualizing data with a Plotly bar chart<\/strong><\/p>\n<p>Plotly.js is a high-level, declarative charting library that comes with an extensive range of chart types. It is built on top of D3.js and WebGL, which allows it to produce interactive, web-friendly visualizations with high performance. Plotly.js supports popular front-end frameworks including React, Angular, and Vue.<\/p>\n<p>Once we have the data, the next step is to transform it into a format that third-party charting libraries can understand. In our example, we\u2019re using a Plotly bar chart but the flow and logic can be applied to other libraries.<\/p>\n<p>The data transformation is pretty straightforward:<\/p>\n<pre><code>const x1: number[] = [];<\/code> <code>const y1: number[] = [];<\/code> <code>const y2: number[] = [];<\/code> <code>data?.rows.forEach((row) =&gt; {<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>x1.push(row[0].data);<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>y1.push(row[1].data);<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>y2.push(row[2].data);<\/code><\/p>\n<p><code>});<\/code><\/p>\n<p>Here, three arrays (x1, y1, and y2) are initialized to hold values of Age Range, Total Cost, and Total Revenue. The data?.rows.forEach loop iterates through each row of the fetched data, populating these arrays.<\/p>\n<p>Subsequently, two \u201ctraces\u201d (or series) are created for the bar chart:<\/p>\n<pre><code>const trace1: Plotly.Data = {<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>x: x1,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>y: y1,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>type: 'bar',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>name: 'Total Cost',<\/code><\/p>\n<p><code>};<\/code> <code>const trace2: Plotly.Data = {<\/code><\/p>\n<p style=\"padding-left: 40px;\"><code>x: x1,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>y: y2,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>type: 'bar',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>name: 'Total Revenue',<\/code><\/p>\n<p><code>};<\/code> <code>const plotData = [trace1, trace2];<\/code><\/p>\n<p>Each trace represents a set of bars on the chart. trace1 represents the \u201cTotal Cost\u201d bars, and trace2 represents the \u201cTotal Revenue\u201d bars.<\/p>\n<p>The transformed data can now be used to create various types of charts. While the specifics may vary depending on the library, the general approach remains the same.<\/p>\n<pre><code>const layout = {<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>title: 'Total Cost and Revenue by Age Ranges',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>xaxis: { title: 'Age Range' },<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>yaxis: { title: 'Cost and Revenue ($)' },<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>width: 900,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>height: 500,<\/code><\/p>\n<p><code>};<\/code> <code>return &lt;Plot data={plotData} layout={layout} \/&gt;;<\/code><\/p>\n<p>The layout object defines representation properties of the chart, such as its title, axis labels, and size. The Plot component then takes in the plotData (which contains our two traces) and the layout to render the bar chart.<\/p>\n<div id=\"attachment_744362\" class=\"wp-caption aligncenter\" style=\"width: 1034px;\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-744362 size-large\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/blog-img1-1024x554-1.png\" alt=\"Plotly bar chart showing Total Cost and Total Revenue by Age Range\" width=\"1024\" height=\"554\" aria-describedby=\"caption-attachment-744362\" \/><\/p>\n<p id=\"caption-attachment-744362\" class=\"wp-caption-text\">Plotly bar chart showing Total Cost and Total Revenue by Age Range<\/p>\n<\/div>\n<p><strong>Visualizing data with a MUI bar chart<\/strong><\/p>\n<p>The same flow from the previous example can also apply to the MUI charting library. However, the data transformation for MUI Bar Chart is slightly different:<\/p>\n<pre><code>const dataset =<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>data?.rows.map((row) =&gt; ({<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>ageRange: row[0].data,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>totalCost: row[1].data,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>totalRevenue: row[2].data,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>})) || [];<\/code><\/p>\n<p>Here, we\u2019re mapping through each of the rows, which is an array, and creating a new object that has ageRange, totalCost, and totalRevenue properties.<\/p>\n<p>For the layout of the chart, you\u2019d define your x-axis, y-axis, and data series, much like you would in any charting library.<\/p>\n<pre><code>&lt;BarChart<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>dataset={dataset}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>xAxis={[{ scaleType: 'band', dataKey: 'ageRange', label: 'Age Range' }]}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>series={[<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>{ dataKey: 'totalCost', label: 'Total Cost', valueFormatter },<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>{ dataKey: 'totalRevenue', label: 'Total Revenue', valueFormatter },<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>]}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>yAxis={[<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>label: 'Cost and Revenue ($)',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>]}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>width={800}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>height={500}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>margin={{ left: 100 }}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>sx={{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>[`.${axisClasses.left} .${axisClasses.label}`]: {<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>transform: 'rotate(-90deg) translate(0px, -50px)',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>}}<\/code><\/p>\n<p><code>\/&gt;<\/code><\/p>\n<p>In the above code, the xAxis prop defines the x-axis of the chart, and the series prop defines the data series that will be displayed.<\/p>\n<div id=\"attachment_744363\" class=\"wp-caption aligncenter\" style=\"width: 1034px;\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-744363\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/blog-img2-1024x559-1.png\" alt=\"MUI Bar chart showing Total Cost and Total Revenue by Age Range\" width=\"1024\" height=\"559\" aria-describedby=\"caption-attachment-744363\" \/><\/p>\n<p id=\"caption-attachment-744363\" class=\"wp-caption-text\">MUI Bar chart showing Total Cost and Total Revenue by Age Range<\/p>\n<\/div>\n<p><strong>Combining multiple chart types into a hybrid chart<\/strong><\/p>\n<p>MUI\u2019s charting library allows for combining multiple chart types. In the third code example, we\u2019ve combined a bar chart and a line chart in a single visualization. In addition to a bar chart showing Cost and Revenue on the left y-axis, we show a line chart of sales Quantity on the right y-axis.<\/p>\n<div id=\"attachment_744364\" class=\"wp-caption aligncenter\" style=\"width: 1034px;\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-744364\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/blog-img3-1024x540-1.png\" alt=\"Hybrid chart showing Total Cost, Total Revenue, and Total Quantity by Age Range.\" width=\"1024\" height=\"540\" aria-describedby=\"caption-attachment-744364\" \/><\/p>\n<p id=\"caption-attachment-744364\" class=\"wp-caption-text\">Hybrid chart showing Total Cost, Total Revenue, and Total Quantity by Age Range.<\/p>\n<\/div>\n<p>In general, this is achieved using the ChartContainer component, which acts as a wrapper for multiple chart components:<\/p>\n<pre><code>&lt;ChartContainer ...&gt;<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>&lt;BarPlot \/&gt;<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>&lt;LinePlot \/&gt;<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>...<\/code><\/p>\n<p><code>&lt;\/ChartContainer&gt;<\/code><\/p>\n<p>Inside the ChartContainer, we\u2019ve added both BarPlot and LinePlot components, allowing us to visualize both bar and line charts simultaneously.<\/p>\n<p>To fetch the Total Quantity for the line chart, the data fetching hooking is extended to include the measure for Quantity:<\/p>\n<pre><code>const { data, isLoading, isError } = useExecuteQuery({<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>dataSource: DM.DataSource,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>dimensions: [DM.Commerce.AgeRange],<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>measures: [<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>measures.sum(DM.Commerce.Cost),<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>measures.sum(DM.Commerce.Revenue),<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>measures.sum(DM.Commerce.Quantity),<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>],<\/code><\/p>\n<p><code>});<\/code><\/p>\n<p>The data transformation requires some adjustment to build separate arrays for each of the series:<\/p>\n<pre><code>const seriesAgeRange = data?.rows.map((row) =&gt; row[0].data) || [];<\/code> <code>const seriesTotalCost = data?.rows.map((row) =&gt; row[1].data) || [];<\/code> <code>const seriesTotalRevenue = data?.rows.map((row) =&gt; row[2].data) || [];<\/code> <code>const seriesTotalQuantity = data?.rows.map((row) =&gt; row[3].data) || [];<\/code><\/pre>\n<p>As you may recall, this transformation is very similar to the logic for the Plotly bar chart in the first example. Here, the map() method on the rows array is used, instead of forEach(), to introduce you to different techniques to achieve the same structure for the transformed data.<\/p>\n<p>The series array is then created to specify the types of charts and associate them with the corresponding y-axes:<\/p>\n<pre><code>const series = [<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>type: 'bar',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>yAxisKey: 'costAndRevenue',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>data: seriesTotalCost,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>type: 'bar',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>yAxisKey: 'costAndRevenue',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>data: seriesTotalRevenue,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>type: 'line',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>yAxisKey: 'quantity',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>color: 'red',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>data: seriesTotalQuantity,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>},<\/code><\/p>\n<p><code>] as AllSeriesType[];<\/code><\/p>\n<p>Putting all together, the ChartContainer from MUI is used to render the chart:<\/p>\n<pre><code>&lt;ChartContainer<\/code><\/pre>\n<p style=\"padding-left: 40px;\"><code>series={series}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>width={860}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>height={500}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>margin={{ left: 100, right: 100 }}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>xAxis={[<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>id: 'age',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>data: seriesAgeRange,<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>scaleType: 'band',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>valueFormatter: (value) =&gt; value.toString(),<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>]}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>sx={{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>[`.${axisClasses.left} .${axisClasses.label}`]: {<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>transform: 'rotate(-90deg) translate(0px, -50px)',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>[`.${axisClasses.right} .${axisClasses.label}`]: {<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>transform: 'rotate(-90deg) translate(0px, 35px)',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>}}<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>yAxis={[<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>id: 'costAndRevenue',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>scaleType: 'linear',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>label: 'Cost and Revenue ($)',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>{<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>id: 'quantity',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>scaleType: 'linear',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 120px;\"><code>label: 'Total Quantity',<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 80px;\"><code>},<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>]}<\/code><\/p>\n<p><code>&gt;<\/code><\/p>\n<p style=\"padding-left: 40px;\"><code>&lt;BarPlot \/&gt;<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>&lt;LinePlot \/&gt;<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>&lt;ChartsXAxis label=\"Age Range\" position=\"bottom\" axisId=\"age\" \/&gt;<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>&lt;ChartsYAxis label=\"Cost and Revenue ($)\" position=\"left\" axisId=\"costAndRevenue\" \/&gt;<\/code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><code>&lt;ChartsYAxis label=\"Total Quantity\" position=\"right\" axisId=\"quantity\" \/&gt;<\/code><\/p>\n<p><code>&lt;\/ChartContainer&gt;<\/code><\/p>\n<p>Here, ChartContainer is configured with various props like series, width, height, xAxis, and yAxis to customize the chart. Inside ChartContainer, BarPlot and LinePlot components render the bar and line charts, respectively. ChartsXAxis and ChartsYAxis components are used to customize the axes.<\/p>\n<p><strong>Sign up to learn more<\/strong><\/p>\n<p>In this post, you learned how Compose SDK gives you total control in fetching and manipulating data from Sisense, so you have the flexibility to visualize it using third-party libraries like MUI Charts, Plotly, or Chart.js. The approach remains the same: fetch, transform, and visualize. Simply, Compose SDK enables you to deliver the exact visualization you need, in your app, no limits. Better yet, we\u2019ve designed Compose SDK so you can retrieve data in a way that\u2019s tailored precisely to your needs.<\/p>\n<p>To go deeper, <a href=\"\/webinars\/how-to-build-data-products-with-insights\/\">register<\/a> to join me, and the Sisense product team on Wednesday, October 11 at 11 AM EST, for a live webinar. We\u2019ll share the inside track on Compose SDK and answer any of your questions. Sign up for \u201c<a href=\"\/webinars\/how-to-build-data-products-with-insights\/\">How to build next-gen data products with insights<\/a>\u201d, and if you attend, you\u2019ll have a chance to win one of twenty $30 gift cards in a random drawing. Hope to see you there!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With Compose SDK, you can now easily flow data into the charting components you want to use.<\/p>\n","protected":false},"author":4,"featured_media":7240,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[261],"tags":[],"application":[],"buyer-role":[],"buyer-stage":[],"department":[],"industry":[],"topic":[],"class_list":["post-7053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devx-community"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.5 (Yoast SEO v23.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Connecting to third-party libraries with Compose SDK | Sisense<\/title>\n<meta name=\"description\" content=\"Compose SDK lets you seamlessly flow data into chart components, enabling pixel-perfect visualizations to meet user and customer needs\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Take control of your data visualizations: Connecting Sisense to third-party charting libraries with Compose SDK\" \/>\n<meta property=\"og:description\" content=\"With Compose SDK, you can now easily flow data into the charting components you want to use, so you have the freedom to build the pixel-perfect visualization experiences your users and customers demand.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/\" \/>\n<meta property=\"og:site_name\" content=\"Sisense\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-13T04:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-29T12:28:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2024\/07\/10162825\/Yoast-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1-1024x536.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"536\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sisense Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Take control of your data visualizations: Connecting Sisense to third-party charting libraries with Compose SDK\" \/>\n<meta name=\"twitter:description\" content=\"With Compose SDK, you can now easily flow data into the charting components you want to use, so you have the freedom to build the pixel-perfect visualization experiences your users and customers demand.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2024\/07\/10162825\/Yoast-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1-1024x536.png\" \/>\n<meta name=\"twitter:creator\" content=\"@sisense\" \/>\n<meta name=\"twitter:site\" content=\"@sisense\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tuan Pham, Staff Software Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/\"},\"author\":{\"name\":\"Sisense Team\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115\"},\"headline\":\"Take control of your data visualizations: Connecting to third-party libraries with Compose SDK\",\"datePublished\":\"2024-06-13T04:00:00+00:00\",\"dateModified\":\"2024-11-29T12:28:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/\"},\"wordCount\":1336,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.sisense.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png\",\"articleSection\":[\"DevX Community\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/\",\"url\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/\",\"name\":\"Connecting to third-party libraries with Compose SDK | Sisense\",\"isPartOf\":{\"@id\":\"https:\/\/www.sisense.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png\",\"datePublished\":\"2024-06-13T04:00:00+00:00\",\"dateModified\":\"2024-11-29T12:28:50+00:00\",\"description\":\"Compose SDK lets you seamlessly flow data into chart components, enabling pixel-perfect visualizations to meet user and customer needs\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage\",\"url\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png\",\"contentUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png\",\"width\":1440,\"height\":640,\"caption\":\"Feature Elevate Your Data Visualizations Integrating Compose SDK with Third Party Charting Libraries min 1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sisense.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Take control of your data visualizations: Connecting to third-party libraries with Compose SDK\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sisense.com\/#website\",\"url\":\"https:\/\/www.sisense.com\/\",\"name\":\"Sisense\",\"description\":\"Build your business with anywhere-analytics\",\"publisher\":{\"@id\":\"https:\/\/www.sisense.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sisense.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.sisense.com\/#organization\",\"name\":\"Sisense\",\"url\":\"https:\/\/www.sisense.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg\",\"contentUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg\",\"width\":1200,\"height\":600,\"caption\":\"Sisense\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/sisense\",\"https:\/\/www.linkedin.com\/company\/sisense\",\"https:\/\/github.com\/sisense\/\"],\"description\":\"Sisense accelerates product innovation through AI\/ML capabilities. Our global analytics platform lets customers drive better, faster decisions for their business and end users.\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115\",\"name\":\"Sisense Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g\",\"caption\":\"Sisense Team\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Connecting to third-party libraries with Compose SDK | Sisense","description":"Compose SDK lets you seamlessly flow data into chart components, enabling pixel-perfect visualizations to meet user and customer needs","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/","og_locale":"en_US","og_type":"article","og_title":"Take control of your data visualizations: Connecting Sisense to third-party charting libraries with Compose SDK","og_description":"With Compose SDK, you can now easily flow data into the charting components you want to use, so you have the freedom to build the pixel-perfect visualization experiences your users and customers demand.","og_url":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/","og_site_name":"Sisense","article_published_time":"2024-06-13T04:00:00+00:00","article_modified_time":"2024-11-29T12:28:50+00:00","og_image":[{"width":1024,"height":536,"url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2024\/07\/10162825\/Yoast-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1-1024x536.png","type":"image\/png"}],"author":"Sisense Team","twitter_card":"summary_large_image","twitter_title":"Take control of your data visualizations: Connecting Sisense to third-party charting libraries with Compose SDK","twitter_description":"With Compose SDK, you can now easily flow data into the charting components you want to use, so you have the freedom to build the pixel-perfect visualization experiences your users and customers demand.","twitter_image":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2024\/07\/10162825\/Yoast-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1-1024x536.png","twitter_creator":"@sisense","twitter_site":"@sisense","twitter_misc":{"Written by":"Tuan Pham, Staff Software Engineer","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#article","isPartOf":{"@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/"},"author":{"name":"Sisense Team","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115"},"headline":"Take control of your data visualizations: Connecting to third-party libraries with Compose SDK","datePublished":"2024-06-13T04:00:00+00:00","dateModified":"2024-11-29T12:28:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/"},"wordCount":1336,"commentCount":0,"publisher":{"@id":"https:\/\/www.sisense.com\/#organization"},"image":{"@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png","articleSection":["DevX Community"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/","url":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/","name":"Connecting to third-party libraries with Compose SDK | Sisense","isPartOf":{"@id":"https:\/\/www.sisense.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage"},"image":{"@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png","datePublished":"2024-06-13T04:00:00+00:00","dateModified":"2024-11-29T12:28:50+00:00","description":"Compose SDK lets you seamlessly flow data into chart components, enabling pixel-perfect visualizations to meet user and customer needs","breadcrumb":{"@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#primaryimage","url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png","contentUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2023\/10\/10161917\/Feature-Elevate-Your-Data-Visualizations_-Integrating-Compose-SDK-with-Third-Party-Charting-Libraries-min-1.png","width":1440,"height":640,"caption":"Feature Elevate Your Data Visualizations Integrating Compose SDK with Third Party Charting Libraries min 1"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sisense.com\/blog\/take-control-of-your-data-visualizations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sisense.com\/"},{"@type":"ListItem","position":2,"name":"Take control of your data visualizations: Connecting to third-party libraries with Compose SDK"}]},{"@type":"WebSite","@id":"https:\/\/www.sisense.com\/#website","url":"https:\/\/www.sisense.com\/","name":"Sisense","description":"Build your business with anywhere-analytics","publisher":{"@id":"https:\/\/www.sisense.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sisense.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.sisense.com\/#organization","name":"Sisense","url":"https:\/\/www.sisense.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg","contentUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg","width":1200,"height":600,"caption":"Sisense"},"image":{"@id":"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/sisense","https:\/\/www.linkedin.com\/company\/sisense","https:\/\/github.com\/sisense\/"],"description":"Sisense accelerates product innovation through AI\/ML capabilities. Our global analytics platform lets customers drive better, faster decisions for their business and end users."},{"@type":"Person","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115","name":"Sisense Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g","caption":"Sisense Team"}}]}},"_links":{"self":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts\/7053"}],"collection":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/comments?post=7053"}],"version-history":[{"count":1,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts\/7053\/revisions"}],"predecessor-version":[{"id":23672,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts\/7053\/revisions\/23672"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/media\/7240"}],"wp:attachment":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/media?parent=7053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/categories?post=7053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/tags?post=7053"},{"taxonomy":"application","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/application?post=7053"},{"taxonomy":"buyer-role","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/buyer-role?post=7053"},{"taxonomy":"buyer-stage","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/buyer-stage?post=7053"},{"taxonomy":"department","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/department?post=7053"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/industry?post=7053"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/topic?post=7053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}