Страница 1 из 1

Как сделать отчёт?

Добавлено: 27 фев 2009, 07:29
Igor M. Sharafutdinov
Подскажите, пожалуйста, как проще и правильнее сделать такой отчёт:
Есть некий набор записей и у каждой записи есть некое свойство(поле), которое выставляется либо в "0", либо в "1", а ещё одно свойства обозначает тип записи.
То есть что-то типа:

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

ID   Type    Flag
==================
001 Тип1    0
002 Тип2    0
003 Тип3    1
004 Тип2    1
005 Тип1    1
006 Тип2    0
007 Тип3    0
008 Тип1    1
009 Тип1    0
010 Тип3    1
В отчёте нужно сгруппировать записи по типам и выдать статистику по каждому типу:

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

Тип    Flag=0    Flag=1     Total
======================================
Тип1  2            2              4
Тип2  2            1              3
Тип3  1            2              3
--------------------------------------
Итого      5          5             10

Как сделать отчёт?

Добавлено: 27 фев 2009, 08:12
ppvlad
а кросс отчёт не спасёт? вроде это он и есть.

Как сделать отчёт?

Добавлено: 02 мар 2009, 06:12
Igor M. Sharafutdinov
ppvlad писал(а):а кросс отчёт не спасёт? вроде это он и есть.
Спасибо! Оно самое, но вот ещё бы заголовки колонок как-то подписать самому, т.к. это флаги, имеющие определённое смысловое значение. То есть вместо "0" написать что-нибудь типа "Выкл.", а вместо "1" соответственно "Вкл." (ну к примеру).

Как сделать отчёт?

Добавлено: 02 мар 2009, 07:36
ppvlad
можно или сразу источник данных для кросса сформировать уже с названиями значений или
задать свойство "Отображаемое значение" ("Display Value") нужной колонки например как-то так:

{Choose(myTable.Flag, "ноль", "один", "два", "три" ...)}


там ещё функция Switch есть на эту тему, но у меня чего-то сразу choose не заработало (ошибка в генераторе? - если функция возвращает null отчёт не формируется), а разбираться сейчас некогда (там походу он пытается сортировать колонки по имени, а когда имя null - ему крышу срывает)

обдурил я его так:

"Отображаемое значение" ("Display Value"): {getCrossValue(myTable.Flag)}

и в коде дописал

private string getCrossValue(int flag) {
switch (flag) {
case 0: return "ноль";
case 1: return "один";
case 2: return "два";
case 3: return "три";
case 4: return "четыре";
case 5: return "пять";
case 6: return "шесть";
case 7: return "семь";
case 8: return "восемь";
case 9: return "девять";
default: return "def";
}
}

так - работает, только колонки сортированные по алфавиту выглядят несколько странно, но тут уж или шашечки или ехать...