Spotfire将输入数据生成表

在用Spotfire数据分析时,有时会需要将一些手动输入数据生成数据表,和分析中其他数据一起关联处理,本文整理了多种情况,一并实现,效果如下:

 1. Ironpython脚本实现

输入区域中“生成表”对应IronPython脚本为:

from System.IO import MemoryStream, SeekOrigin, StreamWriter 
from Spotfire.Dxp.Data.Import import TextDataReaderSettings,TextFileDataSource
from Spotfire.Dxp.Application.Visuals import Visualization
from Spotfire.Dxp.Data import AddRowsSettings
def loaddata(dataTableName, Input, Split, Firstascolname, Generatetype):
	if Input == "": return
	mySelection = Input.split("\n")
	stream = MemoryStream()
	csvWriter = StreamWriter(stream)
	#csvWriter.WriteLine("col0\r\n")
	for ID in mySelection:
		csvWriter.WriteLine(ID+"\r\n")
	csvWriter.Flush()
	settings = TextDataReaderSettings()
	if not Split == "":
		settings.Separator = Split
	if Firstascolname == "是":
		settings.AddColumnNameRow(0)
	settings.ClearDataTypes(False)
	stream.Seek(0, SeekOrigin.Begin)
	dataSource = TextFileDataSource(stream, settings)
	if not Document.Data.Tables.Contains(dataTableName):
		Document.Data.Tables.Add(dataTableName, dataSource)
	elif Generatetype == "增加":
		rowsettings=AddRowsSettings(Document.Data.Tables[dataTableName],dataSource)
		Document.Data.Tables[dataTableName].AddRows(dataSource,rowsettings) 
	else:
		Document.Data.Tables[newTableName].ReplaceData(dataSource)

newTableName = "InputdataTable"
Input = Document.Properties["inputid"].strip()
Split = Document.Properties["split"]
Firstascolname = Document.Properties["firstascolname"]
Generatetype = Document.Properties["generatetype"]
loaddata(newTableName, Input, Split, Firstascolname, Generatetype)
print('generate table success')

#自动在可视化图表中显示,其中showtable为选择参数(选择希望展示的可视化图表),如果不需要,可以不要下面这段
showtable = showtable.As[Visualization]() # 1. Change the data table 
newTable = Document.Data.Tables.Item[newTableName] 
showtable.Data.DataTableReference = newTable
showtable.TableColumns.Clear()  #清空列
for i in newTable.Columns:
    showtable.TableColumns.Add(i)
for i in showtable.TableColumns:
    i.Width = 150

脚本中属性"inputid"、"generatetype"、"split"、"firstascolname"分别对应输入区域的文本输入框、“生成方式”、“拆分字符”、“将首行作为表头”所对应的文档属性。

输入区域中“删除表”对应IronPython脚本为:

try:
	Document.Data.Tables.Remove(Document.Data.Tables["InputdataTable"])
except:
	print("InputdataTable does not exists")

2. 自定义函数(Python)实现

输入区域中“自定义函数生成表”对应自定义函数代码为:

import pandas as pd
def loaddata(Input, Split, Firstascolname):
    if Input == '':
        return pd.DataFrame([['']])
    data = [i.split(Split) if not Split=='' else [i] for i in Input.split('\n')]
    if Firstascolname == '是':
        colname = data[0]
        data = data[1:]
        return pd.DataFrame(data, columns=colname)
    else:
        return pd.DataFrame(data)
InputdataTable2 = loaddata(Input, Split, Firstascolname)

代码中属性Input、Split、Firstascolname分别对应输入区域的文本输入框、“生成方式”、“拆分字符”、“将首行作为表头”所对应的文档属性,需要手动添加函数输入参数。

自定义函数输出表默认为替换方式,要实现累加方式,需在输出参数选择“行”,并取消勾选“替换更新的行”

 自定义函数不建议删除表,因为删除后重新生成的表无法自动展示,需要手动添加,当Input输入内容为空时,生成空表代替,如下图

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值