【问题标题】:Spotfire: Inputting columns from Cross Table into data functionSpotfire:将交叉表中的列输入数据函数
【发布时间】:2017-07-21 07:03:47
【问题描述】:

我有一个名为 ARIMA 的 Spotfire Data 函数,它运行良好。它主要需要两个大小相等的输入:一列均匀间隔的日期和一列订单值。我的数据函数可以处理无序或需要聚合的输入,但出于性能考虑,我想利用 Spotfire 将相同数据放入交叉表的速度。

因此,我需要一种方法将交叉表中的值获取到我的数据函数中。这是我目前在 IronPython 中所拥有的,它从交叉表中提取了我需要的实际数字:

from Spotfire.Dxp.Application.Visuals import CrossTablePlot
from Spotfire.Dxp.Data import IndexSet
from Spotfire.Dxp.Data import RowSelection
from Spotfire.Dxp.Data import DataValueCursor
from Spotfire.Dxp.Data import DataSelection
from datetime import date
from Spotfire.Dxp.Data.Expressions import ColumnExpression

crossTable = visual.As[CrossTablePlot]()
crossSource = crossTable.Data.DataTableReference

##Get a Row Count
rowCount = crossSource.RowCount

##Index Set of all our rows
allRows = IndexSet(rowCount,True)

##Empty Index Set to fill with our desired markings
rowsToMark = IndexSet(rowCount,False)

##Pick the column we're interested in examining for values.
##You can create multiple cursors to look at multiple columns.
##Specify the name of your column (or document property SelectBU).
colCurs = DataValueCursor.CreateFormatted(crossSource.Columns[SelectBU])
dateCurs = DataValueCursor.CreateFormatted(crossSource.Columns["Order Date"])
# Initialize OrderValue and OrderDate lists from cross table data
OrderValue = []
OrderDate = []

#ColumnExpression xColumnExpression = ColumnExpression.Create(context.XAxis.Expression);
OrderValueColumnExpression = ColumnExpression.Create(crossSource.Columns[SelectBU].NameEscapedForExpression)
OrderDateColumnExpression = ColumnExpression.Create(crossSource.Columns["Order Date"].NameEscapedForExpression)


for row in crossSource.GetRows(allRows, colCurs):
    OrderValue.append(colCurs.CurrentValue)
for row in crossSource.GetRows(allRows, dateCurs):
    dateStr = dateCurs.CurrentValue.split("/")
    d =(date(int(dateStr[2]),int(dateStr[0]),int(dateStr[1])))
    OrderDate.append(d)

所以我在 2 个 python 列表中拥有我需要的所有信息。但我不知道如何将这些作为数据函数的输入。有任何想法吗?这是我尝试过的:

from Spotfire.Dxp.Data.DataFunctions import DataFunctionExecutorService, DataFunctionInvocation, DataFunctionInvocationBuilder

    dataManager = Document.Data
    app = Application
    dataFunction = None
    for function in dataManager.DataFunctions:
        if function.Name == 'ARIMA':
            dataFunction = function
    inputParams = []

    inputCollection = dataFunction.Inputs.GetEnumerator()

    for inputs in dataFunction.DataFunctionDefinition.InputParameters:  
                if inputs.DisplayName=="OrderDate":
                    dataFunction.Inputs.SetInput(inputs, OrderDate)
                if inputs.DisplayName=="OrderValue":
                    dataFunction.Inputs.SetInput(inputs, OrderValue)


    dfes = app.GetService(DataFunctionExecutorService)
    context = app.ImportContext
    invocationBuilder = DataFunctionInvocationBuilder(dataFunction.DataFunctionDefinition, app.ImportContext)       
    dataFunctionInvocation = invocationBuilder.Build()
    print 'Executing...'
    dfes.Execute(dataFunctionInvocation)
    print 'Done'

我明白为什么它不起作用:这是因为dataFunction.Inputs.SetInput(inputs, OrderDate)这一行

OrderDate 是我的日期列表的 python 变量,但我相信 SetInput() 的第二个参数需要一个称为“表达式”的东西,我推断它是一个类似 Spotfire 的表达式。不知道如何解决这个问题,所以我需要帮助。'

编辑 我应该补充一点,上面的代码只有两个输入参数:“visual”是我的交叉表视觉对象,“SelectBU”是一个文档属性指向不同的数字列(BU = 业务单位),我可以将其用作我的时间序列。

【问题讨论】:

    标签: ironpython spotfire


    【解决方案1】:

    这是我解决问题的方法:

    我编写了一个包含所有我需要的信息的 CSV 字符串,并重写了我的数据函数,使其只有一个参数(csv 字符串),它解析该参数以提取它需要的所有信息。我这样做的方法是设置一个名为 csv 的 String 类型的文档属性,并使用 Ironpython 将文档属性设置为等于计算出的 csv 字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2013-09-16
      相关资源
      最近更新 更多