【问题标题】:Set Spotfire Graph Axis Range Programatically以编程方式设置 Spotfire 图形轴范围
【发布时间】:2014-12-29 23:21:39
【问题描述】:

我正在尝试编写一个简单的 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 轴范围.原始表的结构如下: |产品 |日期 |相位 |

我已经用公式计算了每个阶段的列: if([Phase]="Phase A",1,0)

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

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

【问题讨论】:

    标签: ironpython spotfire


    【解决方案1】:

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

    无缩放滑块:

    #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);
    

    带缩放滑块:

    #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);
    

    【讨论】:

      【解决方案2】:

      我认为您可以通过过滤布尔计算列而不是依赖 IronPython 脚本来实现这一点。

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

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

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

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

      如果在图像中难以阅读,这里是自定义表达式:

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

      所以现在我有一个列 (RowInDateRange),它告诉我给定行是否在用户输入的日期范围内,我可以轻松过滤掉不在的行。

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

      我希望这会有所帮助。

      【讨论】:

      • 感谢您的快速回复。对于大多数图表来说,这是一个很好的解决方案。我在原始问题中添加了有关我的案例的更多信息,因为不幸的是过滤器方法会影响我需要在图表中显示的值。抱歉,我没有提前提供更多关于我为什么要走 IronPython 路线的信息——我绝对愿意接受其他选择,但只要我能得到产品总数的最终结果!
      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 2010-10-07
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多