Изменить заголовок столбца в зависимости от отмеченной строки на Spotfire - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть две кросс-таблицы на одной странице.

Первая перекрестная таблица представляет собой сводку, в которой компоненты расположены по горизонтальной оси, а объекты - по вертикальной оси.Значения ячеек показывают цвета «КРАСНЫЙ», «ЖЕЛТЫЙ» или «NA».Вторая кросс-таблица - это развернутая строка отмеченной строки в сводной таблице с горизонтальной осью Компоненты и Тип на вертикальной оси.Значения ячеек являются функцией подсчета.

Мне нужно, чтобы цвет, который я отмечал, отображался под каждым компонентом в развертке.

Summary
+----------+--------+-------+--------+
| Facility | COMP1  | COMP2 | COMP3  |
+----------+--------+-------+--------+
| FAC1     | NA     | RED   | RED    |
| FAC2     | YELLOW | NA    | RED    |
| FAC3     | RED    | RED   | YELLOW |
+----------+--------+-------+--------+


Drilldown (If I mark the FAC2 row)
+-------+--------+-------+
| Type  | COMP1  | COMP3 |
+       + YELLOW +  RED  +
|-------|--------|-------|
| TYPE1 | 12     |       |
| TYPE2 | 11     | 4     |
+-------+--------+-------+

Кто-нибудь знает, возможно ли это?с кросс-таблицами?Любые советы о том, как это сделать?Я ценю помощь.

Спасибо, Джон

Редактировать: я делаю это, чтобы обойтись без возможности раскрасить заголовки столбцов кросс-таблицы, поэтому, если у кого-то есть альтернатива, ябыл бы признателен.

В настоящее время используется Spotfire 7.11

1 Ответ

0 голосов
/ 27 февраля 2019

Хорошо.Потерпи меня здесь, когда я взломал решение.Я скажу, я сделал некоторые предположения о вашей структуре данных.В зависимости от структуры ваших данных, ответ может потребоваться немного изменить.

Вот структура моих данных:

enter image description here

Шаг 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: Наблюдайте, как происходит волшебство.

enter image description here

enter image description here

...