Динамические кросс-таблицы из выпадающего списка - PullRequest
0 голосов
/ 27 февраля 2012

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

1 http://img689.imageshack.us/img689/1812/crosstabs.jpg

Мне также нужно отображать только выбранные столбцы и кросс-таблицы.Например, если выбран только один столбец и одна кросс-таблица, они должны отображаться только.Я попытался SQL Pivot и сетки, но я не могу заставить его правильно отформатировать с двумя категориями столбцов, сложенных сверху.Я также пробовал отчеты Crystal, но нет способа скрыть кросс-таблицы, когда они не выбраны.Я попробовал элемент управления отчетами Telerik, но не могу получить кросс-таблицы для динамического создания с выпадающим.Я ищу любые советы о том, как подойти к этому.Кроме того, если кто-то создал что-то подобное или есть идея, как, пожалуйста, поделитесь.Заранее спасибо.

1 Ответ

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

Я никогда не использовал Telerik, поэтому следующий совет относится только к Crystal.

В Crystal можно условно скрыть кросс-таблицы как минимум двумя способами:

  1. В диалоговом окне «Формат» (, а не эксперт кросс-таблиц) - щелкните правой кнопкой мыши по кросс-таблице, выберите «Формат кросс-таблицы» в меню, нажмите кнопку x-2 рядом с «Подавить». на вкладке «Общие» диалогового окна «Редактор формата» и введите соответствующую формулу (например, {?crosstab1s1}="n/a").
  2. Поместив кросс-таблицу в ее собственный подраздел и сделав подраздел условно подавленным, щелкните правой кнопкой мыши серую область слева от области макета отчета на вкладке "Конструктор отчетов" в соответствующем подразделе и выберите В разделе «Эксперт ...» нажмите кнопку x-2 рядом с «Подавить (без детализации)» на вкладке «Общие» диалогового окна «Эксперт раздела» и введите соответствующую формулу.

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

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

Несколько других комментариев:

  • Параметры Crystal гораздо менее гибки, чем то, что может быть достигнуто в ASP, поэтому, если возможно, сделайте весь выбор параметров в ASP и передайте параметры Crystal.
  • Кристалл обрабатывает нулевые значения несколько неудобно, поэтому передайте определенное значение, указывающее, что кросс-таблица не требуется, вместо того, чтобы полагаться на оценку параметра как нулевого.
  • Ваши параметры кросс-таблицы в настоящее время упорядочены как кросс-таблица 1 и кросс-таблица 2, каждый из которых содержит разделы 1, 2 и 3 или в них. Неясно, означает ли это, что всего должно быть до шести кросс-таблиц или только два:
    • Если первое, то неясно, как указывать группирование строк, столбцов и суммированные поля.
    • Если последнее, то я предлагаю переименовать Разделы 1, 2 и 3 в Группу строк, Группу столбцов и Суммированное поле (поскольку я предполагаю, что это то, что они должны представлять).
  • В настоящее время у вас есть параметры Показать итоги группы и Показать проценты - они, похоже, применяются к кросс-таблицам. Эти параметры можно указать в Crystal, но не обязательно в конструкторе отчетов.
    • Если вы можете получить доступ к Crystal API, у вас должна быть возможность установить эти параметры программно во время выполнения.
    • В противном случае единственным вариантом, если вы хотите включить обе опции для каждой кросс-таблицы, будет добавление в отчет четырех версий каждой кросс-таблицы, каждая из которых условно подавляется в зависимости от того, какие параметры выбраны. (Я бы не рекомендовал такой подход, если у вас нет альтернативы.)
  • Crystal не может обрабатывать динамические структуры данных (т. Е. Структура данных должна быть известна при разработке отчета), поэтому я предлагаю генерировать набор результатов в хранимой процедуре SQL на основе указанных параметров со структурой, похожей на:

Dataset structure

crosstab1Row
crosstab1Column
crosstab1SumValue
crosstab2Row
crosstab2Column
crosstab2SumValue
reportColumn1
reportColumn2
reportColumn3
reportColumn4
reportColumn5
...