2015-03-05 2 views
1

У меня есть страница отчета, в которой отображается кросс-таблица. Это фильтруется 5 параметрами. Эти параметры представлены пользователем через подсказки на странице.Cognos 10 Report Studio: на странице Prompts & Performance

Требование состоит в том, чтобы вернуть данные со всеми значениями во всех параметрах, выбранных при первом запуске. Если я оставлю выбор по умолчанию пустым, это будет достигнуто, но все флажки не отмечены, что дает неверную обратную связь пользователю.

В качестве альтернативы я вручную задал все значения в выборе по умолчанию. Однако это влияет на производительность.

Есть ли у кого-нибудь альтернативные предложения?

Я искал способ привязки кнопки reprompt к списку значений, поэтому только те параметры обновляются (а не целая страница), но еще ничего не нашли.

Спасибо заранее, даже если ответ «нет, и это плохой способ».

ответ

2

Один из вариантов - использовать JavaScript для проверки всех флажков после отображения страницы без применения фильтрации. Для этого все фильтры должны быть установлены как необязательные. Страница отображается со всеми данными и не отмеченными флажками. JavaScript запускает и проверяет все флажки, чтобы состояние запросов соответствовало состоянию данных. Это происходит так быстро, что пользователь, скорее всего, не узнает, что флажки сначала не были проверены. Кнопка reprompt при нажатии будет принудительно выполнять любые варианты, которые пользователь делает после этого.

Начиная с версии 10.2, Cognos предоставил довольно простой JavaScript API, позволяющий манипулировать элементами управления представлением времени. Надеюсь, вы работаете с 10.2 или новее, иначе код не будет работать. Вот немного кода JavaScript, который будет перебрать все подсказками и выбрать все значения в них:

var report = cognos.Report.getReport("_THIS_"); 
var prompts = report.prompt.getControls(); 

if (typeof firstrun == "undefined") { 
    var values; 
    for (var i=0;i<prompts.length;i++) { 
     values = prompts[i].getValues(true); 
     prompts[i].addValues(values); 
    } 
    var firstrun = false; 
} 

Примечания:

значение Все подсказки ведут себя так же, как в отношении строки API 10.2+ JavaScript. Неважно, выбираете ли вы раскрывающийся список, список, флажок или интерфейс переключателя. То, как мы кодируем для всех этих вариантов, одинаково. Предоставленный код будет работать также со списком, как с флажками.

Убедитесь, что вы завершаете свой код в тегах сценариев и что объект HTML-объекта, который вы размещаете на своей странице для хранения кода, отображается под всеми элементами управления. Если он размещен в другом месте, он не сможет найти элементы управления подсказками, поскольку они не будут отображаться при выполнении кода.

Код предполагает, что на экране отображаются только те флажки, которые вы хотите проверить. Если на странице есть другие приглашения, вам необходимо настроить таргетинг на отдельные приглашения, используя функцию getControlByName(), предоставленную в API, вместо того, чтобы перебирать все подсказки. Более подробную информацию о API-интерфейсе JavaScript Cognos можно найти here.

Ключевыми битами кода являются функции API-функций getValues ​​() и addValues ​​() Cognos JavaScript Prompt. getValues ​​(true) возвращает объект в формате JSON, представляющий все значения, выбранные или отсутствующие, из приглашения. addValues ​​(значения) принимает объект в формате JSON, представляющий значения, которые нужно выбрать, и выбирает их. Таким образом, это вопрос захвата всех значений, а затем передача их для выбора.

Причина для блока if заключается в том, что мы хотим, чтобы этот код запускался только при визуализации первой страницы. Когда пользователь сначала запускает отчет, мы хотим, чтобы все флажки были отмечены, но после этого мы хотим, чтобы флажки сохраняли состояние. Если бы мы не использовали блок if, выбор пользователя был бы перезаписан после reprompt. Для получения дополнительной информации об этом методе ознакомьтесь с этим уроком в своем блоге: JavaScript: Running Code Only Once.

Добавление

Если вы не хотите, любые фильтры, которые будут применяться, когда все флажки в разделе, даже после того, как последующее reprompts вы можете сделать это путем настройки фильтра.

Предположим, что мы проверяем элемент на основе модели [Item1]. У нас есть текущий фильтр: [Item1] в параметре? ?. У нас также есть четыре флажка со значениями «Choice1», «Choice2», «Choice3» и «Choice4».

Следующий модифицированный фильтр будет применяться только флажков фильтра, когда все четыре не проверяются:

(
'Choice1' in ?parameter1? 
AND 
'Choice2' in ?parameter1? 
AND 
'Choice3' in ?parameter1? 
AND 
'Choice4' in ?parameter1? 
) 
OR 
[Item1] in ?parameter1? 

Если все четыре галочки проверяются, то первая часть OR выполняется и все строки будут возвращаться. Он также должен быть быстрым, потому что большинство языков, включая итерации SQL, не будут проверять второй компонент OR, если первый компонент удовлетворен.

+0

Спасибо - это действительно полезно и приятное решение! –

+0

Еще одна мысль - знаете ли вы, как остановить студию отчетов, представляя все значения в reprompt? Два списка значений - это «Национальность» и «Домицили». Так, например, если пользователь повторно отправляет страницу со всеми этими проверками, это огромный успех. Аналогично (и, возможно, более вероятно), если пользователь решает снять отметку с двух из списка Национальности, список домицилей представляется с использованием каждого значения. Имеет ли это смысл? Это по-прежнему огромное улучшение, так же как и спасибо! –

+0

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

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