Удалить предыдущий месяц, прежде чем добавлять новые данные - PullRequest
0 голосов
/ 20 мая 2019

Я настраиваю новую таблицу данных в SpotFire.С момента последнего обновления SpotFire X, Automation Service Job Builder доступен для нас.Поэтому я хочу создать график работы, который будет автоматически добавлять (новые) данные в мою существующую таблицу данных.Я довольно новичок в написании сценариев и программировании, поэтому любая помощь будет очень признательна.У меня есть запрос SAP BW, который связан с моими информационными панелями Spotfire.Этот запрос содержит только данные за последний месяц.Поскольку в Auto Builder Job Builder есть только недельный интервал, я хочу реализовать некоторые интеллектуальные возможности, прежде чем планировщик будет добавлять данные.Запрос будет обновляться не каждую неделю / день, а каждый месяц.Вот почему я хочу, чтобы сценарий сначала удалил (если это возможно) данные перед добавлением данных в таблицу данных, в противном случае я получу дубликаты в таблице данных.

Я пытался найти сценарии, но не смогне могу найти ничего полезного.Я нашел этот скрипт.

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

1 Ответ

0 голосов
/ 29 мая 2019

Для моего примера кода ниже я использовал файл Spotfire со следующим:

Имя источника данных Spotfire = Store

Имя столбца данных, содержащего дату = [Дата]

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

...