я сделал подобную работу вокруг для сортировки числовых значений в виде строк.
Моя рекомендация состоит в том, чтобы сделать расчетный столбец, который добавляет пробелы перед вашей фактической строкой, основываясь на том, как вы хотите заказать ее. В визуализации 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 было то выражение для моего вычисляемого столбца, который теперь сортируется путь Я хотел, чтобы это было.
Аналогичные методики могут использоваться для сортировки букв или специальных символов.