删除上个月,然后再添加新数据

时间:2019-05-20 13:24:02

标签: python database scripting spotfire

我正在SpotFire中建立一个新的数据表。自从最新的SpotFire X更新以来,自动化服务工作生成器就可以使用了。因此,我想创建作业计划,该计划将自动将(新)数据附加到现有数据表中。我对脚本和编程还很陌生,所以任何帮助将不胜感激。我有一个与我的Spotfire仪表板连接的SAP BW查询。该查询仅包含最近一个月的数据。由于自动化服务作业生成器只有一个星期间隔,因此我想在让调度程序添加数据之前实现一些智能。该查询不会每周/每天刷新,而是每月刷新一次。这就是为什么我希望脚本在将数据附加到数据表之前先删除(如果可能的话)数据,否则我将在数据表中得到重复的数据。

我试图搜索脚本,但是找不到有用的东西。我确实找到了该脚本。

dtTarget=usertable*
selection = IndexSet(dtTarget.RowCount,True)
for r in selection:
selection[r] = (r>=(dtTarget.RowCount-10))
dtTarget.RemoveRows(RowSelection(selection))

1 个答案:

答案 0 :(得分:0)

对于下面的示例代码,我将Spotfire文件与以下内容配合使用:

Spotfire数据表名称=存储

保存日期= [Date]的数据列名称

数据是从Spotfire演示数据数据库中加载的。

如果只想在加载前清除表,则可以使用它。

from Spotfire.Dxp.Data import RowSelection, IndexSet    
table = Document.Data.Tables["Store"]
table.RemoveRows(RowSelection(IndexSet(table.RowCount, True)))

如果要删除上个月之前的所有内容,但要保留所有较新的内容,则可以这样做。将None传递给last_month函数将导致它从今天开始获取上个月。

from datetime import date, timedelta
from Spotfire.Dxp.Data import RowSelection

def last_month(from_date):
    if from_date is None:
        from_date = date.today()
    end_date = from_date.replace(day=1) - timedelta(days=1)
    start_date = date(end_date.year, end_date.month, 1)
    return (start_date, end_date)

table = Document.Data.Tables["Store"]
(start,end) = last_month(date(1994,12,6))
rows_to_delete = table.Select("[Date] <= Date('{}')".format(end.strftime("%x")))
table.RemoveRows(rows_to_delete)

您可以将实际表设置为ironpython脚本的输入参数,而不是像我一样直接在脚本中命名它。您可以对日期列名称进行相同的操作。