2017-07-21 106 views
1

私は、美しく動作する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」である「視覚的に」単位)私は自分の時系列として使うことができます。ここで

答えて

0

は、私はこの問題を解決する方法である:

私は必要なすべての情報をCSV文字列を書き、それがすべての情報を抽出するために解析するだけ持っている一つのパラメータ(CSV文字列)に私のデータ機能を書き直しが必要だ。私がこれを行った方法は、csvというString型のドキュメントプロパティを設定し、ironpythonを使用して計算されたcsv文字列と同じドキュメントプロパティを設定していました。

関連する問題