반응형
어쩌다 보니 비슷한 내용의 글이 연속해서 올라갑니다. 연작.. 이 되어버렸네요.
가장 최근에 올린 포스팅에서는 dxp 안에 있는 모든 Data Table을 알아서 하나의 테이블로 합치는 예제였습니다. 그런데 이왕이면 선택해서 합칠 수 있으면 좋겠다 싶어서 한번 만들어봤습니다. 샘플 데이터는 기존과 동일합니다만 몇가지 상관없을 만한 Data Table들을 추가해놨습니다.
여러개의 테이블을 하나의 Data Table로 합치려면 일단 Column 명이 같아야 합니다. 다를 경우 합쳐지지 않습니다. 여러개의 테이블을 선택해서 합치게되면 Column명이 같은 것은 합치고 그외의 것은 무시합니다.
예제 화면
기본적인 화면 구성입니다. 가져오기 버튼을 누르면 현재 DXP에 등록된 모든 Data Table 의 목록을 가져와서 "DataTable List" 테이블에 넣어둡니다. (단 DataTable List, All Data Table)은 제외입니다.
그 다음 합칠 Data Table을 선택합니다. 먼저 Data Table1~3까지 선택한 후 모두 합치기를 클릭합니다.
지정한 테이블들을 모두 합치고 테이블 구분이라는 칼럼을 만들어서 구분이 가능하게끔 생성합니다.
Script
1. 가져오기 Script
from Spotfire.Dxp.Data import AddRowsSettings,DataTable
from System.IO import StreamWriter, MemoryStream, SeekOrigin
from Spotfire.Dxp.Data import DataType, DataTableSaveSettings,RowSelection, IndexSet
from Spotfire.Dxp.Data.Import import TextFileDataSource, TextDataReaderSettings,DataTableDataSource
dataTableName = "DataTable List"
#Clear your table designated by 'MyTable' script parameter
table = Document.Data.Tables[dataTableName]
table.RemoveRows(RowSelection(IndexSet(table.RowCount,True)))
# 현재 dxp 파일에 Load 된 모든 Data Table의 리스트를 가져옴
tables = Document.Data.Tables
# 빈 List 생성
TableList = []
for table in tables:
if table.Name != dataTableName and table.Name != "All Data Table":
TableList.append(table.Name) # Name 속성으로 테이블 명 추출
tablesName = "DataTable\r\n" + ("\r\n").join(TableList)
stream = MemoryStream()
csvWriter = StreamWriter(stream)#, Encoding.UTF8)
csvWriter.WriteLine(tablesName)
csvWriter.Flush()
stream.Seek(0, SeekOrigin.Begin)
readerSettings = TextDataReaderSettings()
readerSettings.AddColumnNameRow(0)
#settings.ClearDataTypes(False)
readerSettings.SetDataType(0, DataType.String)
textDataSource = TextFileDataSource(stream, readerSettings)
if Document.Data.Tables.Contains(dataTableName):
Document.Data.Tables[dataTableName].ReplaceData(textDataSource)
else:
Document.Data.Tables.Add(dataTableName, textDataSource)
2. 모두 합치기 Script
from Spotfire.Dxp.Data import *
from Spotfire.Dxp.Data.Import import DataTableDataSource
def getDataTable(tableName):
try:
return Document.Data.Tables[tableName]
except:
return None
# 모두 합칠 테이블명 지정
newTableName = 'All Data Table'
# 기존 통합 테이블이 있는지 확인 후 초기화
dt = getDataTable(newTableName)
#if dt != None:
# Document.Data.Tables.Remove(dt)
# 데이터 테이블 목록 수집
tableList = Document.Data.Tables["DataTable List"]
col = DataValueCursor.CreateFormatted(tableList.Columns["DataTable"])
markedRows = Document.Data.Markings["Marking"].GetSelection(tableList).AsIndexSet()
tables = []
for row in tableList.GetRows(markedRows, col):
tables.append(col.CurrentValue)
#tables = Document.Data.Tables
# 이전 테이블 명 저장용 : Add row 후 구분값으로 입력
preTableName = ""
# 테이블 순서 저장용
nTime = 0
for table in tables:
# 테이블명에 Data Table 문자가 포함된 테이블만 선택
if (table.find("Data Table") >= 0 and table != newTableName and table != "DataTable List") :
nTime = nTime + 1
print(nTime)
print(table)
print(preTableName)
# Data Table 소스 설정
inputTableDS = DataTableDataSource(Document.Data.Tables[table])
if nTime == 1:
# 통합테이블 생성 후 첫 테이블 삽입
if dt != None:
outputTable = Document.Data.Tables[newTableName]
outputTable.ReplaceData(inputTableDS)
else:
Document.Data.Tables.Add(newTableName, inputTableDS)
outputTable = Document.Data.Tables[newTableName]
elif nTime == 2:
# 테이블은 합친뒤 테이블구분이라는 칼럼 생성 후 테이블 명입력
addRowsSettings = AddRowsSettings(outputTable, inputTableDS, "테이블구분", table, preTableName)
outputTable.AddRows(inputTableDS, addRowsSettings)
else:
# 테이블은 합친뒤 테이블구분이라는 칼럼 생성 후 테이블 명입력
addRowsSettings = AddRowsSettings(outputTable, inputTableDS, "테이블구분", table)
outputTable.AddRows(inputTableDS, addRowsSettings)
preTableName = table
else :
print("No")
예제 파일
'Data Analysis > Spotfire' 카테고리의 다른 글
[Spotfire Q&A] cross table (2개 이상)을 한번에 export 하기 (10) | 2021.04.04 |
---|---|
[Spotfire & Python] IronPython의 Script Parameters (13) | 2021.01.14 |
[TIBCO Spotfire] Python 활용 : 현재 Dxp 파일 안의 Data Table 모두 합치기 (5) | 2020.11.04 |
[TIBCO Spotfire] Python 활용 예제 : 현재 Dxp 파일 안의 Data Table List 가져오기 (11) | 2020.10.27 |
[TIBCO Spotfire] Python 활용 예제 - 특정 입력값이 일치하는 행의 다른 칼럼값 가져오기 (19) | 2020.09.17 |
댓글