Crystal Reports

bleyman

Есть кросстаб. В клеточках - среднее значение некоего поля неких записей. Как заставить его не учитывать те записи, в которых значение этого поля нулевое или отрицательное?
То есть один способ я нашёл - поставить фильтр на весь репорт. Но блин, так эти записи проходят мимо всего репорта, а хотелось бы их именно локально отфильтровать, чтобы в соседнем кросстабе вывести как раз сумму по тем записям, в которых оно отрицательное.
Можно суммировать не записи, а формулу от записей, которая их подпатчит. К сожалению, мне нужна не сумма а avg, поэтому нулевые значения не катят. Мб можно как-нибудь вернуть null?
Или можно как-нибудь написать собственную функцию для суммирования, типа avg, но не учитывающую нулевые элементы? А какие у неё параметры?

noss

А нельзя посчитать сумму всех, количество всех, кол-во нулевых и на основе этих данных найти среднее (по каждому полю)?

xz_post

Вариант - создать вычисляемый столбец типа formula = if (col > 0) then col else 0 endif
и суммирование вести по нему. Ну если юзается все данные берутся прямо из сиквел запроса - написать sum(case ....bla-bla-bla)

bleyman

>> написать sum(case ....bla-bla-bla)
эээ, а где такое написать?
В кросстаб эксперте можно только указать summarized fields, способ вычисления "суммы", и поле/формулу, над которой ведётся суммирование. Как так?
читаю я не прямо из базы, а из датасета, по поводу чего есть сильное желание сгенерить себе совершенно другой датасет, в котором всю эту фигню попредвычислять, и мучаться больше.

xz_post

в field explorer создай новое вычисляемое поле на основе if. Потом скажи change summary operation - и выбери свое новое выч. поле

bleyman

А.
Так чувак, я ж говорю, мне нужно не сумму брать, а среднее, при этом 0 ващееее не катят. Вот еслиб можно было null вернуть, тогда да.

xz_post

а count(1) или sum(1) не судьба заюзать ?

bleyman

Где заюзать-то? Я ж говорю - речь о ячейках кросстаба. Я не вижу, как там можно что-нибудь прописать текстом.
Блиа, я что-то перестал понимать.
Если у меня организация базы такая (приблизительно): таблицы A, B, C; B references A.Id, C references A.Id, при этом встречаются только кортежи вида AB и AC (ну то есть как бы у объекта из таблицы А может быть свойство B или свойство С, возможно, не одно так вот, мне кажется, или когда я в репорт добавляю список AB, а потом список AC, это говно выбирает из базы только те кортежи, в которых есть и B, и C (то есть пустое множество)?! А как с этим побороться?

xz_post

>>Где заюзать-то? Я ж говорю - речь о ячейках кросстаба. Я не вижу, как там можно что->>нибудь прописать текстом.
сначала создай отчет в визарде, закрой его потом нафиг... правый клик по полю в дизайнере -> change summary operation -> Тут можно выбрать формулу и поле. В качестве поля можно указать вычисялемое, но его надо предварительно создать (field explorer -> new formula field).
Если нужно среднее значение:
a | b | c
10 | 10 | 1
-10| 0 | 0
20 | 20| 1
------------------
---| 30| 2 SUM -> AVG = 15 это то что требовалось ?
Оставить комментарий
Имя или ник:
Комментарий: