2016-02-22 4 views
1

Я пишу код железного питона в spotfire, чтобы извлекать данные из таблицы данных по запросу, передавая существующие фильтры таблиц данных. Дело в том, что пользователь хочет сортировать значения в определенном им порядке сортировки. Вот проблема: если у нас есть целая таблица данных, мы можем сортировать значения в строке, перейдя по свойствам столбца -> порядок сортировки -> порядок сортировки и упорядочивая их. Но прямо сейчас у нас нет полных значений, так как мы можем справиться с этим в скрипте или пятнистом скрипте.Можно ли отсортировать динамический массив со строками в Iron python?

Спасибо заранее

ответ

1

я сделал подобную работу вокруг для сортировки числовых значений в виде строк.

Моя рекомендация состоит в том, чтобы сделать расчетный столбец, который добавляет пробелы перед вашей фактической строкой, основываясь на том, как вы хотите заказать ее. В визуализации Spotfire он обрезает строки так, что пользователь не видит, что он смещен, и все было соответствующим образом отсортировано.

Если это простая задача, это можно сделать непосредственно в выражении для вычисленного столбца.

Мой пример:

If([AR Days]<>"(PA)", 
If(Integer([AR Days])>360,">360", 
If(Integer([AR Days])>359," " & [AR Days], 
If(Integer([AR Days])>349," " & [AR Days], 
If(Integer([AR Days])>339," " & [AR Days], 
If(Integer([AR Days])>329," " & [AR Days], 
If(Integer([AR Days])>319,"  " & [AR Days], 
If(Integer([AR Days])>309,"  " & [AR Days], 
If(Integer([AR Days])>299,"  " & [AR Days], 
If(Integer([AR Days])>289,"  " & [AR Days], 
If(Integer([AR Days])>279,"   " & [AR Days], 
If(Integer([AR Days])>269,"   " & [AR Days], 
If(Integer([AR Days])>259,"   " & [AR Days], 
If(Integer([AR Days])>249,"   " & [AR Days], 
If(Integer([AR Days])>239,"    " & [AR Days], 
If(Integer([AR Days])>229,"    " & [AR Days], 
If(Integer([AR Days])>219,"    " & [AR Days], 
If(Integer([AR Days])>209,"    " & [AR Days], 
If(Integer([AR Days])>199,"     " & [AR Days], 
If(Integer([AR Days])>189,"     " & [AR Days], 
If(Integer([AR Days])>179,"     " & [AR Days], 
If(Integer([AR Days])>169,"     " & [AR Days], 
If(Integer([AR Days])>159,"      " & [AR Days], 
If(Integer([AR Days])>149,"      " & [AR Days], 
If(Integer([AR Days])>139,"      " & [AR Days], 
If(Integer([AR Days])>129,"      " & [AR Days], 
If(Integer([AR Days])>119,"       " & [AR Days], 
If(Integer([AR Days])>109,"       " & [AR Days], 
If(Integer([AR Days])>99,"       " & [AR Days], 
If(Integer([AR Days])>89,"       " & [AR Days], 
If(Integer([AR Days])>79,"        " & [AR Days], 
If(Integer([AR Days])>69,"        " & [AR Days], 
If(Integer([AR Days])>59,"        " & [AR Days], 
If(Integer([AR Days])>49,"        " & [AR Days], 
If(Integer([AR Days])>39,"         " & [AR Days], 
If(Integer([AR Days])>29,"         " & [AR Days], 
If(Integer([AR Days])>19,"         " & [AR Days], 
If(Integer([AR Days])>9,"         " & [AR Days], 
          "          " & [AR Days]))))))))))))))))))))))))))))))))))))), 
          "          (PA)") 

Для моего более сложного примера, я позволил пользователю выбирать пользовательские группы размера для подобного ведра, с жестким верхним пределом 360+, являющийся окончательное ведром. Это значение было целым числом в поле ввода текста (свойство udBucketSize), а скрипт на изменение было следующее:

bck = Document.Properties["udBucketSize"] 
if bck < 10: 
    x = 'If([ACCOUNT LOCATION (2)]="1","          (PA)",' 
else: 
    x = 'If([ACCOUNT LOCATION (2)]="1"," (PA)",' 
y = ')' 
oldbck = 0 
if bck == 1: 
    x = "[AR Days Workaround]" 
else: 
    while oldbck + bck < 360 and bck > 0: 
     if oldbck == 0: 
      x += 'If(DateDiff("day",[FINAL BILL DATE],[SNAPSHOTDATE])<=' + str(oldbck + bck) + ',"' 
     else: 
      x += 'If(DateDiff("day",[FINAL BILL DATE],[SNAPSHOTDATE])<=' + str(oldbck + bck - 1) + ',"' 
     if bck < 10: 
      z = (360 - oldbck)/10 + 1 
      n = 1 
      while n <= z: 
       x += ' ' 
       n += 1 
     else: 
      if oldbck < 100: 
       x+= ' ' 
      elif oldbck < 200: 
       x+= ' ' 
      elif oldbck < 300: 
       x+= ' ' 
      else: 
       x+= ' ' 
     if oldbck == 0: 
      x+= str(oldbck) + '-' + str(oldbck+bck) +'",' 
      oldbck += 1 
     else: 
      x+= str(oldbck) + '-' + str(oldbck+bck - 1) +'",' 
     y+= ')' 
     oldbck += bck 

    x += 'If(DateDiff("day",[FINAL BILL DATE],[SNAPSHOTDATE])<=360," ' + str(oldbck) + '-360", ">360")' + y 
    print x 
Document.Properties["udBucketString"] = x 

Имущество udBucketString было то выражение для моего вычисляемого столбца, который теперь сортируется путь Я хотел, чтобы это было.

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

Смежные вопросы