私は、美しく動作するARIMAというSpotfire Data関数を持っています。これは主に、等間隔の2つの入力の列と、順序値の列を必要とします。私のデータ関数は、順不同の入力や集計が必要な場合がありますが、性能面でSpotfireが同じデータをクロステーブルに入力する速度を利用したいと考えています。Spotfire:クロステーブルからデータ関数への列の入力
したがって、私は値をCrossテーブルから自分のデータ関数に取得する方法が必要です。ここで私はクロス表から必要な実際の数値を抽出している私は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'
、それは仕事をdoesntの理由を私は理解して:それは理由dataFunction.Inputs.SetInput(inputs, OrderDate)
受注日は私の日付のリストについては、Pythonの変数であるラインのですが、私ははSetInputの第2引数を信じます()は私がSpotfireのような表現であると推測する "表現"と呼ばれるものを期待しています。これを回避するにはどうすればいいのか分かりませんので、私は助けが必要です。
編集私は上記のコードは唯一の2つの入力パラメータがあることを追加する必要があります:私のクロス視覚的なテーブルと異なる数値カラム(BU =ビジネスを指すドキュメントプロパティである「SelectBU」である「視覚的に」単位)私は自分の時系列として使うことができます。ここで