2014-12-23 2 views
1

Я пытаюсь запрограммировать простой скрипт IronPython, чтобы установить диапазон дат моего оси X-оси в Spotfire на основе пользовательских входов управления свойствами. Я не могу найти документацию или примеры этого, так вот что я догадался, но это не работает:Установить диапазон осей графика Spotfire Программно

from Spotfire.Dxp.Application.Visuals import LineChart 
from Spotfire.Dxp.Application.Visuals import ScaleAxis 

plot1= plot1.As[LineChart]() 
plot1.XAxis.Min = StartDate 
plot1.XAxis.Max = EndDate 

Я вошел в визуализацию и контроль свойств в качестве параметров сценария в окне редактирования сценариев. Кто-нибудь знает, как сделать эту работу? Благодаря!

Примечание. Я не хочу использовать ползунки масштабирования.


Обновление: Я делаю Sum ([Колонка]) OVER (AllPrevious ([Date])), поэтому я не могу фильтровать любые даты вне для расчета Y. Мне просто нужно их отфильтрованы диапазон X-оси. Исходная таблица структурирована следующим образом: | Продукт | Дата | Фаза |

И я вычислил колонки для каждого из фаз с формулами: Если ([Фаза] = «Фаза А», 1,0)

По существу, график показывает, сколько продуктов прошли каждую стадию с течением времени, поэтому мне нужно всегда знать дату завершения каждой фазы, чтобы подсчитать количество продуктов на этом этапе в любую конкретную дату. Я хочу видеть только определенный диапазон дат на оси X, хотя из-за того, что у меня есть другие графики, размещенные выше/ниже из двух других таблиц, чтобы сравнить продажи и затраты, и их легче анализировать на основе количества продуктов на каждом этапе, когда оси показывают те же даты. Извините, я не могу загружать фотографии, поэтому я надеюсь, что это имеет смысл.

Мы заботимся о самых последних продажах/расходах, и я ограничиваю эти даты фильтрами, используя Data on Demand для таблиц продаж и затрат, чтобы графики автоматически отображали то, что я хочу. Теперь единственная проблема заключается в фильтрации диапазона для графика «Количество продуктов», потому что даты в столбцах фазы могут возвращаться в прошлое годы, и нам нужно знать, сколько всего продуктов в каждой фазе, но мы не хотим видеть график с начала времени ... Я могу добиться этого с помощью ползунка масштабирования или жесткого кодирования min/max на этом графике, но я действительно надеялся на что-то автоматическое, поэтому нам не нужно постоянно его корректировать.

ответ

3

Я нашел автоматическое решение, и вы можете настроить его на использование слайдеров масштабирования или нет. Вы должны вводить свойства StartDate и EndDate в качестве параметров скрипта, и вы также должны вводить каждую визуализацию в качестве параметра скрипта (так что мне понадобилось 5 баллов для моего скрипта). Код размещен ниже - надеюсь, что это поможет кому-то!

NO ZOOM SLIDERS:

#Import the necessary namespaces 
from Spotfire.Dxp.Application.Visuals import VisualContent 
from Spotfire.Dxp.Application.Visuals import AxisRange 
from Spotfire.Dxp.Data import DataPropertyClass 

#Define variables 
min = Document.Properties["StartDate"] 
max = Document.Properties["EndDate"] 

#Cast visual as specific plot type 
#Note use of VisualContent for any chart type 
plot1= plot1.As[VisualContent]() 
plot2= plot2.As[VisualContent]() 
plot3= plot3.As[VisualContent]() 

#Set visualization parameters 
plot1.XAxis.Range = AxisRange(min,max); 
plot2.XAxis.Range = AxisRange(min,max); 
plot3.XAxis.Range = AxisRange(min,max); 

С ZOOM ползунки:

#Import the necessary namespaces 
from Spotfire.Dxp.Application.Visuals import VisualContent 
from Spotfire.Dxp.Application.Visuals import AxisRange 
from Spotfire.Dxp.Data import DataPropertyClass 

#Define variables 
min = Document.Properties["StartDate"] 
max = Document.Properties["EndDate"] 

#Cast visual as specific plot type 
#Note use of VisualContent for any chart type 
plot1= plot1.As[VisualContent]() 
plot2= plot2.As[VisualContent]() 
plot3= plot3.As[VisualContent]() 

#Set visualization parameters 
plot1.XAxis.ManualZoom = True 
plot2.XAxis.ManualZoom = True 
plot3.XAxis.ManualZoom = True 
plot1.XAxis.ZoomRange = AxisRange(min,max); 
plot2.XAxis.ZoomRange = AxisRange(min,max); 
plot3.XAxis.ZoomRange = AxisRange(min,max); 
1

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

Чтобы справиться с этим, я создал фиктивный набор данных по продажам продуктов по регионам. Я сделал линейную диаграмму с Sum (Sales) по оси Y и по дате продажи по оси X.

enter image description here

Далее я добавил новую область ввода текста и добавлены два входа управления поля объектов. Я назвал свойства документа DateBegin и dateEnd, каждый из типов данных Date.

Property Control Setup

Теперь я могу попасть в нужный диапазон дат.

Date Range Entry Fields

Теперь мне нужно сделать мой X-оси (Sales Дата) отражают только диапазон дат, которые пользователь вошел. Я решил воспользоваться возможностями фильтрации Spotfire. Я вставил Boolean Calculated Column, который я назвал RowInDateRange.

Edit Calculated Column

В случае, если это слишком трудно читать изображения, вот обычай выражение:

CASE WHEN [Sales Date] >= Date("${dateBegin}") AND [Sales Date] <= Date("${dateEnd}") THEN True ELSE False END 

Так что теперь у меня есть столбец (RowInDateRange), который говорит мне, является ли данная строка в введенный пользователем диапазон дат, и я могу легко отфильтровать строки, которые нет.

Filter out rows not in date range

визуализации в настоящее время динамически отражает введенную пользователя диапазон дат. Я сохранил образец DXP, который вы можете проверить: Six Months Sales by Region.dxp

Надеюсь, это было полезно.

+0

Спасибо за быстрый ответ. Это хорошее решение для большинства графиков. Я добавил дополнительную информацию о моем случае в исходный вопрос, потому что, к сожалению, подход фильтра повлияет на значения, которые мне нужно показать на графике. Извините, я больше не рассказывал, почему я шел по маршруту IronPython - я определенно открыт для других вариантов, хотя до тех пор, пока я получаю конечный результат с общим количеством продуктов! – SeeingSpots

Смежные вопросы