Хорошо.Потерпи меня здесь, когда я взломал решение.Я скажу, я сделал некоторые предположения о вашей структуре данных.В зависимости от структуры ваших данных, ответ может потребоваться немного изменить.
Вот структура моих данных:
Шаг 1: Создайте два свойства документа для хранения значений заголовка.Я создал два свойства документа с именами «tableTitle1» и «tableTitle2» (по одному для каждого столбца в перекрестной таблице сведений).Создайте одно свойство документа для хранения значения DateTime, которое нам передаст скрипт r (об этом позже).Я назвал мое "время".
Шаг 2: Создайте перекрестные таблицы, как они у вас есть.Убедитесь, что на первом кросс-столе используется маркировка «Маркировка», а вторая ограничена маркировкой «Маркировка».Во второй перекрестной таблице убедитесь, что заголовки выглядят примерно так: Count([Comp1]) as [Comp1 ${tableTitle1}], Count([Comp3]) as [Comp2 ${tableTitle2}]
.Вам необходимо использовать свойства документа, созданные на шаге 1.
Шаг 3: Создать скрипт Python.Код выглядит следующим образом:
from System.Collections.Generic import List
from Spotfire.Dxp.Data import *
# Create a cursor for the table column to get the values from.
# Add a reference to the data table in the script.
dataTable = Document.Data.Tables["SOTest"]
cursor = DataValueCursor.CreateFormatted(dataTable.Columns["Comp1"])
# Retrieve the marking selection
markings = Document.Data.Markings["Marking"].GetSelection(dataTable).AsIndexSet()
# Create a List object to store the retrieved data marking selection
markedata = List [str]();
# Iterate through the data table rows to retrieve the marked rows
for row in dataTable.GetRows(markings, cursor):
value = cursor.CurrentValue
if value <> str.Empty:
markedata.Add(value)
# Get only unique values
valData = List [str](set(markedata))
# Store in a document property
Document.Properties["tableTitle1"] = ', '.join(valData)
####DO IT AGAIN FOR THE SECOND COLUMN#####
# Create a cursor for the table column to get the values from.
# Add a reference to the data table in the script.
cursor = DataValueCursor.CreateFormatted(dataTable.Columns["Comp2"])
# Create a List object to store the retrieved data marking selection
markedata = List [str]();
# Iterate through the data table rows to retrieve the marked rows
for row in dataTable.GetRows(markings, cursor):
value = cursor.CurrentValue
if value <> str.Empty:
markedata.Add(value)
# Get only unique values
valData = List [str](set(markedata))
# Store in a document property
Document.Properties["tableTitle2"] = ', '.join(valData)
Шаг 4: Создайте сценарий R, который запускает сценарий Python при маркировке данных.Это будет очень простой R Script.Код выглядит следующим образом:
markedTable <- inputTable
time <- Sys.time()
Флажок для разрешения кэширования должен быть снят.Время выходного параметра должно указывать на время свойства документа.входной параметр inputTable должен быть вашим датабельным, все столбцы и должен быть ограничен маркировкой.Убедитесь, что флажок функции обновления автоматически установлен.
Шаг 5: Сопоставьте скрипт python со свойством документа времени.В диалоговом окне «Редактирование»> «Свойства документа» в разделе «Свойства» назначьте созданный нами сценарий python свойству документа.Скрипт R будет изменять текущую дату и время каждый раз, когда изменяется маркировка на таблице, таким образом, запуская наш скрипт на python для нас.
Шаг 6: Наблюдайте, как происходит волшебство.