Here is a code snippet for removing markings across visualizations/data tables within an analyses. This script will not reset the filters and only work on the marking. To illustrate this, I have constricted the date range for couple of date filters in the filter column.
I will now make some selections on the bar chart
To remove the markings without resetting the applied filters, we can execute the script through the button Reset Markings
Code snippet for reference:
# Import required libraries from Spotfire.Dxp.Data import * from Spotfire.Dxp.Application.Filters import * def resetMarking(): # Loop through each data table for dataTable in Document.Data.Tables: # Navigate through each marking in a given data table for marking in Document.Data.Markings: # Unmark the selection rows = RowSelection(IndexSet(dataTable.RowCount, False)) marking.SetSelection(rows, dataTable) # Call the function resetMarking()
Below is one more use of the snippet applied for multiple visualizations which use cascading markings.
When the analysis contains multiple markings, then visualizations using these multiple markings have to be set individually. Below I am removing the marking for a single data table.
Though we Unmark marking for a single visualization, the markings which have got applied through cascading are not reset in other visualizations. In the bottom visualization, the markings are not reset as it inherits markings from the center visualization.
In such cases, our script should do the job.
Below is a code snippet to pull data from a data table into Script context. The data from a particular column(s) could be used to perform validations or compared against values from other data tables.
from Spotfire.Dxp.Data import *tableName='SuperStore_Sample' columnToFetch='Order Date' activeTable=Document.Data.Tables[tableName] rowCount = activeTable.RowCount rowsToInclude = IndexSet(rowCount,True) cursor1 = DataValueCursor.CreateFormatted(activeTable.Columns[columnToFetch]) ctr1 = 0 for row in activeTable.GetRows(rowsToInclude,cursor1): rowIndex = row.Index val1 = cursor1.CurrentValue ctr1 = ctr1 + 1 if (ctr1 == 5): break
Further, we could push the data into an array for temporary storage and use as per requirement.
In some cases (for ex. Trellis view), to get more visualization space, we could simply hide the legend.
For this, on change of View Type (using a drop down property control – ViewType), I am invoking a script to show or hide the legend.
Below, creating the property control ViewType:
IronPython Code: from Spotfire.Dxp.Application import Visuals from Spotfire.Dxp.Application.Visuals import LineChart from Spotfire.Dxp.Application.Visuals import Legend for vis in Application.Document.ActivePageReference.Visuals: if vis.Title == "Sales - Trellis View": vis.As[LineChart]().Legend.Visible = False if vis.Title == "Sales - Full View": vis.As[LineChart]().Legend.Visible = True
The Straight Line Fit from Lines & Curves could be customized and shown/hidden as per requirement.
Below is a Scatter plot used to add a straight line fit.
Make sure that the Straight Line Fit is the first fitting model in Lines & Curves (to use the script below).
Add a button with script as below. In the previous step, since the first fitting model is our Straight Line Fit, we refer it in the script as FittingModels. If your Straight Line is the second fitting model, you could refer it as FittingModels and so on. Additionally, we need to pass the Scatter Plot as Visualization input vis to the script.
IronPython Script: from Spotfire.Dxp.Application.Visuals import ScatterPlot for fm in vis.As[ScatterPlot]().FittingModels: for vis in Application.Document.ActivePageReference.Visuals: if vis.Title == "Sales by Profit": if vis.As[ScatterPlot]().FittingModels.Enabled == True: vis.As[ScatterPlot]().FittingModels.Enabled = False else: vis.As[ScatterPlot]().FittingModels.Enabled = True
Now you can use the button to toggle and show/hide the regression line.
When using multiple date columns (switched using property control) on a particular axis, we lose the ability to change the time dimension of the date selected. In order to overcome this issue, we can add a Time Hierarchy property control (a slider) and use it to alter the date column’s time hierarchy.
We start off by building a property control for changing date column. An important note here is to provide the Value as exact literals of the column name which you want to use against a Display Name.
Then we create a TimeHierarchy slider control to navigate across three dimensions – Year, Quarter and Month.
And apply the below custom expression on the date column.
This customization allows us to change the Time Hierarchy for Date columns. Below is a view of quarterly Sales (by Order Date)
And a monthly Sales view (using Dispatch Date)
To perform K-Means clustering in Spotfire, we need an appropriate line chart on which the clustering calculation could be performed.
Below we are using a simple line chart with Sales on Y-axis (a single column and not a custom expression with multiple columns) and Order Date on X-axis.
The Euclidean distance is used to perform the clustering with maximum number of clusters to be 9.
Here is a segmented view of similar product sub-categories which fall in clusters depending on their sales performance.
Reference snippet for fetching the values from a particular column after filtering is applied to the data table.
import Spotfire.Dxp.Data.DataTable from Spotfire.Dxp.Data import * from Spotfire.Dxp.Data import DataValueCursor dataTable = Document.ActiveDataTableReference rows = Document.ActiveFilteringSelectionReference.GetSelection(dataTable).AsIndexSet() for row in rows: for column in dataTable.Columns: if (column.Name == "colName"): print (column.RowValues.GetFormattedValue(row))