以编程方式设置Spotfire图谱轴范围

时间:2014-12-23 20:45:07

标签: ironpython spotfire

我正在尝试编写一个简单的IronPython脚本,根据属性控制用户输入在Spotfire中设置我的线图x轴的日期范围。我找不到任何文档或这方面的例子,所以这是我猜到的,但它不起作用:

from Spotfire.Dxp.Application.Visuals import LineChart
from Spotfire.Dxp.Application.Visuals import ScaleAxis

plot1= plot1.As[LineChart]()
plot1.XAxis.Min = StartDate
plot1.XAxis.Max = EndDate

我在“编辑脚本”窗口中输入了可视化和属性控件作为“脚本参数”。有谁知道如何使这项工作?谢谢!

注意:我不想使用缩放滑块。


更新:我正在做一个Sum([Column])OVER(AllPrevious([Date]))所以我无法过滤任何日期来计算Y.我只需要将它们从X中过滤掉轴范围。原始表的结构如下: |产品|日期|阶段|

我用公式计算了每个阶段的列数: 如果([阶段] ="阶段A",1,0)

基本上,该图表显示了随着时间的推移已经完成了每个生产阶段的产品数量,因此我需要始终知道每个阶段的完成日期,以计算在任何特定日期该阶段的产品数量。我只想在X轴上看到某个日期范围,因为我在其他2个表的上方/下方放置了一些其他图表来比较销售和成本,并且根据产品数量更容易分析在轴的每个阶段显示相同的日期。抱歉,我无法上传图片,所以我希望这是有道理的。

我们只关心最近的销售/成本,并且我使用销售和成本表的数据按需过滤器来限制这些日期,以便图表自动显示我想要的内容。现在唯一的问题是过滤产品数量图的范围,因为阶段列中的日期可以追溯到几年,我们需要知道每个阶段的产品总数,但我们不想看到从时间开始的图表...我可以通过缩放滑块或硬编码该图表中的最小/最大来实现这一点,但我真的希望自动化的东西,所以我们不必不断调整它。 / p>

2 个答案:

答案 0 :(得分:5)

我找到了一个自动解决方案,您可以将其设置为使用缩放滑块。您必须将StartDate和EndDate属性作为脚本参数输入,并且还必须将每个可视化作为脚本参数输入(因此我的脚本总共需要5个)。代码发布在下面 - 希望这有助于某人!

NO ZOOM SLIDERS:

#Import the necessary namespaces
from Spotfire.Dxp.Application.Visuals import VisualContent
from Spotfire.Dxp.Application.Visuals import AxisRange
from Spotfire.Dxp.Data import DataPropertyClass

#Define variables
min = Document.Properties["StartDate"]
max = Document.Properties["EndDate"]

#Cast visual as specific plot type
#Note use of VisualContent for any chart type
plot1= plot1.As[VisualContent]()
plot2= plot2.As[VisualContent]()
plot3= plot3.As[VisualContent]()

#Set visualization parameters
plot1.XAxis.Range = AxisRange(min,max);
plot2.XAxis.Range = AxisRange(min,max);
plot3.XAxis.Range = AxisRange(min,max);

使用ZOOM SLIDERS:

#Import the necessary namespaces
from Spotfire.Dxp.Application.Visuals import VisualContent
from Spotfire.Dxp.Application.Visuals import AxisRange
from Spotfire.Dxp.Data import DataPropertyClass

#Define variables
min = Document.Properties["StartDate"]
max = Document.Properties["EndDate"]

#Cast visual as specific plot type
#Note use of VisualContent for any chart type
plot1= plot1.As[VisualContent]()
plot2= plot2.As[VisualContent]()
plot3= plot3.As[VisualContent]()

#Set visualization parameters
plot1.XAxis.ManualZoom = True
plot2.XAxis.ManualZoom = True
plot3.XAxis.ManualZoom = True
plot1.XAxis.ZoomRange = AxisRange(min,max);
plot2.XAxis.ZoomRange = AxisRange(min,max);
plot3.XAxis.ZoomRange = AxisRange(min,max);

答案 1 :(得分:1)

我认为您可以通过过滤布尔计算列而不是依赖于IronPython脚本来实现此目的。

为了解决这个问题,我创建了一个按地区划分的产品销售虚拟数据集。我在Y轴上创建了Sum(Sales)的折线图,在X轴上创建了Sales Date。

enter image description here

接下来,我添加了一个新的文本区域并添加了两个输入字段属性控件。我将Document Properties命名为dateBegin和dateEnd,每个数据类型为Date。

Property Control Setup

现在我可以输入我想要的日期范围。

Date Range Entry Fields

现在我需要让我的X轴(销售日期)仅反映用户输入的日期范围。我选择利用Spotfire的过滤功能。我插入了一个名为RowInDateRange的布尔计算列。

Edit Calculated Column

如果在图片中难以阅读,请点击自定义表达式:

CASE WHEN [Sales Date] >= Date("${dateBegin}") AND [Sales Date] <= Date("${dateEnd}") THEN True ELSE False END

所以现在我有一个专栏(RowInDateRange)告诉我某一行是否在用户输入的日期范围内,我可以轻松过滤掉那些不是的行。

Filter out rows not in date range

现在,可视化动态地反映了用户输入的日期范围。我保存了一份DXP样本,欢迎您查看:Six Months Sales by Region.dxp

我希望这很有帮助。