Iron python - как ссылаться на вычисляемую переменную в дополнительных строках кода - PullRequest
0 голосов
/ 06 мая 2020

Я работаю с Iron Python внутри Spotfire.

Мне нужно извлечь максимальное значение даты из фильтра диапазона, а затем использовать это значение для фильтрации таблицы обменных курсов.

У меня есть рабочий код вплоть до оператора datatable.Select, в котором мне нужно выполнить сопоставление. Если я сделаю это на основе «Date (2020,3,1)» - строки, закомментированной - то совпадение работает и возвращается правильный результат, однако я не могу получить правильный синтаксис для использования вычисляемой переменной «newdate» вместо заявления Date (xxx). Я все еще изучаю python и не сталкивался с этим раньше.

Код, как показано ниже - любая помощь будет принята с благодарностью.

from Spotfire.Dxp.Application.Filters import RangeFilter, ValueRange
from Spotfire.Dxp.Data.DataType import  Date
from System.Globalization import CultureInfo
parser = Date.CreateCultureSpecificFormatter(CultureInfo("en-AU"))


#get a reference to a filter as checkbox from the myDataTable script parameter
filt=Document.FilteringSchemes[Document.ActiveFilteringSelectionReference].Item[dt].Item[dt.Columns.Item["Calendar Date"]].As[RangeFilter]()

print filt.ValueRange.High

if str(filt.ValueRange.High) == "High":
    maxdate = Document.Properties["loaddate"]
else: 
    maxdate = filt.ValueRange.High

maxdate = Date.Formatter.Parse(maxdate)
print maxdate
new = str(maxdate.Year) + "," + str(maxdate.Month) + "," + str("1")
print new
Document.Properties["maxdate"] = new


from Spotfire.Dxp.Data import *
from System.Collections.Generic import List
table=Document.ActiveDataTableReference
# Expression to limit the data in a table 
rowSelection=table.Select("CALENDAR_DATE = Date('new')")
#rowSelection=table.Select("CALENDAR_DATE = Date(2020,3,1)")

# Create a cursor to the Column we wish to get the values from
cursor = DataValueCursor.CreateFormatted(table.Columns["FY_AVERAGE_EXCHANGE"])

# Create List object that will hold values
listofValues=List[str]()

# Loop through all rows, retrieve value for specific column,
# and add value into list
for  row in  table.GetRows(rowSelection.AsIndexSet(),cursor):
   rowIndex = row.Index
   value1 = cursor.CurrentValue
   listofValues.Add(value1)


for val in listofValues:
    print val

1 Ответ

0 голосов
/ 08 мая 2020

Я думаю, ваша переменная new будет распечатана как 2020,01,01

В этой строке new - это строка, поэтому Date () не может извлечь дату.

rowSelection=table.Select("CALENDAR_DATE = Date('new')")

Вы должны указать новую переменную

rowSelection=table.Select("CALENDAR_DATE = Date(" +new +")")

, но не уверены, что она будет работать, поскольку Date принимает целые числа, а не строки, поэтому вам, возможно, придется переписать на:

y = maxdate.Year
m= maxdate.Month 
d = 1 

rowSelection=table.Select("CALENDAR_DATE = Date("+ y + ',' + m +',' + d + ")")

или создайте строку заранее, что является методом, который я бы использовал:

y = maxdate.Year
m= maxdate.Month 
d = 1 
mystring =  "CALENDAR_DATE = Date("+ str(y) + ',' + str(m) +',' + str(d) + ")"

rowSelection=table.Select(mystring) 

Один из вышеперечисленных способов должен работать, я бы начал с последнего, устанавливая вашу строку перед так как имеет смысл не иметь дело со многими преобразованиями целых чисел и строк.

Если вы разместите этот вопрос с примером DXP в Tibco, ответы, возможно, помогут больше, так как у вас будет пример dxp для работы. но, надеюсь, это поможет вам.

...