cross-table : Сортировка, Выгрузка в Excel, пустые ячейки

Обсуждение Stimulsoft Reports.NET
Ответить
ka3yc
Сообщения: 18
Зарегистрирован: 07 авг 2008, 03:50
Откуда: Russia, Samara

cross-table : Сортировка, Выгрузка в Excel, пустые ячейки

Сообщение ka3yc »

Добрый день! Есть несколько вопросов по cross-table (см. вложенные файлы):

1) При выгрузке в эксель колонка Year_plan имеет непонятно какой тип - не срабатывает автосумирование при выделении ячеек (выделяем мышью диапазон ячеек - справа внизу должна высветиться сумма). Если попытаться убрать пробел после тысяч (уже в самом экселе), то все становится нормально.

Тут нашел временное решение: если в источнике данных у данной колонки указать тип "string", то (парадокс?) выгружается в эксель как число.

2) Я хочу отсортировать не по Department, а по Year_plan, по возрастанию. Что делать? Если отключить сортировку по Department, а по Year_plan включить - не срабатывает. Если поменять местами колонки, то все работает. Такое ощущение, что сортировать можно только по первой колонке в таблице.

3) Можно ли как-нибудь заполнить по желанию пустые ячейки нулями? Пробовал менять свойство "значение" на что-то типа IIF(ИсточникДанных1.Fact == null, "0", ИсточникДанных1.Fact) - не помогает. Видимо до этого кода и не доходит, потому что данных-то и нет

шаблон с данными
(файл с данными csv сунуть в D:\temp)
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

cross-table : Сортировка, Выгрузка в Excel, пустые ячейки

Сообщение Ivan »

Здравствуйте.
ka3yc писал(а):Добрый день! Есть несколько вопросов по cross-table (см. вложенные файлы):
1) При выгрузке в эксель колонка Year_plan имеет непонятно какой тип - не срабатывает автосумирование при выделении ячеек (выделяем мышью диапазон ячеек - справа внизу должна высветиться сумма). Если попытаться убрать пробел после тысяч (уже в самом экселе), то все становится нормально.
Тут нашел временное решение: если в источнике данных у данной колонки указать тип "string", то (парадокс?) выгружается в эксель как число.
Если число записано как строка, Excel может сам преобразовать строку в число. Но при этом он не понимает разделитель групп.
Если установить тип "string", число записывается в строку как есть, без разделителя групп, и преобразуется нормально.
Можно оставить тип данных "number", только снять галочку "Use group separator" в свойствах TextFormat.
ka3yc писал(а):2) Я хочу отсортировать не по Department, а по Year_plan, по возрастанию. Что делать? Если отключить сортировку по Department, а по Year_plan включить - не срабатывает. Если поменять местами колонки, то все работает. Такое ощущение, что сортировать можно только по первой колонке в таблице.
Сортировка работает по любой колонке. Есть только один нюанс: подразумевается, что названия колонок и строк - текстовые строки, поэтому и сравниваются они как строки. В вашем случае получаются строки "8000" и "10000" соответственно. При сравнении получается "10000" меньше чем "8000", так как цифра 1 меньше чем 8.
Чтобы сравнение отрабатывало правильно, надо добавить своё преобразование числа в строку: в выражении для сортировки вместо поля "Year_plan" вписать выражение

Код: Выделить всё

ИсточникДанных1.Year_plan.ToString("0000000000.000")
Количество нулей до запятой взято примерно, возможно надо будет увеличить при очень больших числах.
ka3yc писал(а):3) Можно ли как-нибудь заполнить по желанию пустые ячейки нулями? Пробовал менять свойство "значение" на что-то типа IIF(ИсточникДанных1.Fact == null, "0", ИсточникДанных1.Fact) - не помогает. Видимо до этого кода и не доходит, потому что данных-то и нет
В свойстве кросс-таба EmptyValue укажите 0.

Спасибо.
ka3yc
Сообщения: 18
Зарегистрирован: 07 авг 2008, 03:50
Откуда: Russia, Samara

cross-table : Сортировка, Выгрузка в Excel, пустые ячейки

Сообщение ka3yc »

Ivan писал(а):Здравствуйте.
ka3yc писал(а):Добрый день! Есть несколько вопросов по cross-table (см. вложенные файлы):
1) При выгрузке в эксель колонка Year_plan имеет непонятно какой тип - не срабатывает автосумирование при выделении ячеек (выделяем мышью диапазон ячеек - справа внизу должна высветиться сумма). Если попытаться убрать пробел после тысяч (уже в самом экселе), то все становится нормально.
Тут нашел временное решение: если в источнике данных у данной колонки указать тип "string", то (парадокс?) выгружается в эксель как число.
Если число записано как строка, Excel может сам преобразовать строку в число. Но при этом он не понимает разделитель групп.
Если установить тип "string", число записывается в строку как есть, без разделителя групп, и преобразуется нормально.
Можно оставить тип данных "number", только снять галочку "Use group separator" в свойствах TextFormat.
Да, галочка помогла, спасибо!
ka3yc писал(а):2) Я хочу отсортировать не по Department, а по Year_plan, по возрастанию. Что делать? Если отключить сортировку по Department, а по Year_plan включить - не срабатывает. Если поменять местами колонки, то все работает. Такое ощущение, что сортировать можно только по первой колонке в таблице.
Сортировка работает по любой колонке. Есть только один нюанс: подразумевается, что названия колонок и строк - текстовые строки, поэтому и сравниваются они как строки. В вашем случае получаются строки "8000" и "10000" соответственно. При сравнении получается "10000" меньше чем "8000", так как цифра 1 меньше чем 8.
Чтобы сравнение отрабатывало правильно, надо добавить своё преобразование числа в строку: в выражении для сортировки вместо поля "Year_plan" вписать выражение

Код: Выделить всё

ИсточникДанных1.Year_plan.ToString("0000000000.000")
Количество нулей до запятой взято примерно, возможно надо будет увеличить при очень больших числах.
А вот тут пример был неудачный, согласен. Высылаю тот, который более приближен к моим условиям.
Там, полагаю, уже не сработает даже то, о чем вы написали. Небольшой комментарий внутри шаблона.

Пример

ka3yc писал(а):3) Можно ли как-нибудь заполнить по желанию пустые ячейки нулями? Пробовал менять свойство "значение" на что-то типа IIF(ИсточникДанных1.Fact == null, "0", ИсточникДанных1.Fact) - не помогает. Видимо до этого кода и не доходит, потому что данных-то и нет
В свойстве кросс-таба EmptyValue укажите 0.

Спасибо.
Спасибо, тоже помогло
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

cross-table : Сортировка, Выгрузка в Excel, пустые ячейки

Сообщение Ivan »

Здравствуйте.
Как будто он создает группы из значений первого столбца, а внутри этих групп уже сортирует по значениям 2-й и других колонок.
И в случае, если мы захотим отсортировать по Volume - тоже ничего не получается
Все верно. Сортировка производится внутри группы. Так и задумана работа кросс-таба по определению. Если отсортировать по произвольной колонке - это будет уже не кросс-таб.
Скорее всего вам придется реализовывать всё с помощью обычных бэндов, группировок и подсчетов сумм с помощью скриптов.

Спасибо.
ka3yc
Сообщения: 18
Зарегистрирован: 07 авг 2008, 03:50
Откуда: Russia, Samara

cross-table : Сортировка, Выгрузка в Excel, пустые ячейки

Сообщение ka3yc »

Ivan писал(а):Здравствуйте.
Как будто он создает группы из значений первого столбца, а внутри этих групп уже сортирует по значениям 2-й и других колонок.
И в случае, если мы захотим отсортировать по Volume - тоже ничего не получается
Все верно. Сортировка производится внутри группы. Так и задумана работа кросс-таба по определению. Если отсортировать по произвольной колонке - это будет уже не кросс-таб.
Скорее всего вам придется реализовывать всё с помощью обычных бэндов, группировок и подсчетов сумм с помощью скриптов.

Спасибо.
В таком случае, ИМХО, нужно дать возможность указывать критерий группировки в кросс-табе. Иначе что же это за кросс-таб? ;)
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

cross-table : Сортировка, Выгрузка в Excel, пустые ячейки

Сообщение Ivan »

Здравствуйте.
ka3yc писал(а):В таком случае, ИМХО, нужно дать возможность указывать критерий группировки в кросс-табе. Иначе что же это за кросс-таб? ;)
По определению кросс-таб должен представлять данные в виде двух "деревьев", на пересечении ветвей которых считаются необходимые суммы.
Первая колонка каждого дерева - главный уровень группировки, вторая колонка - следующий уровень группировки, и т.д.
Каждый последующий уровень группируется в пределах предыдущего.

Группировка по другим правилам нарушает структуру деревьев, и соответственно теряется смысл самого кросс-таба.

Спасибо.
Ответить