Зависит от агрегированной функции BIRT

#birt

#birt

Вопрос:

У меня проблема, я работаю над более старой версией birt (2.5), и в ней есть ошибка со стандартным отклонением, когда, если все введенные значения одинаковы, они вернут NaN, я полностью понимаю это, и мне потребовалось немного времени, чтобы разобраться, но я знаю, что этомоя проблема.

теперь мне нужно создать условие в ячейке, чтобы сделать его нулевым, если оно равно NaN, и с моим ограниченным опытом работы с birt я не уверен, как это сделать.

вот ячейка:

 <cell id="1337">
                                        <property name="backgroundColor">#CFAFCF</property>
                                        <property name="textAlign">center</property>
                                        <data id="1170">
                                            <structure name="numberFormat">
                                                <property name="category">Fixed</property>
                                                <property name="pattern">#,##0.00</property>
                                            </structure>
                                            <list-property name="visibility">
                                                <structure>
                                                    <property name="format">all</property>
                                                    <expression name="valueExpr" type="javascript">var points = row["CELL_POINTS"];amp;#13;
var minPoints = row["CELL_MIN_POINTS"];amp;#13;
var maxPoints = row["CELL_MAX_POINTS"];amp;#13;
points == null amp;amp;amp;amp; (minPoints == null || maxPoints == null)</expression>
                                                </structure>
                                            </list-property>
                                            <property name="resultSetColumn">stddev</property>
                                        </data>
                                    </cell>
 

не спрашивайте, что означает valueExpr в этом, я понятия не имею, почему они это делают, но лучше оставить это в покое для меня 🙂

Я не могу опубликовать все это как 1, это огромно и сложно, и 2, это для работы.

вот агрегация stddev

 <structure>
                                <property name="name">stddev</property>
                                <text-property name="displayName">stddev</text-property>
                                <property name="dataType">float</property>
                                <simple-property-list name="aggregateOn">
                                    <value>grpGeneric</value>
                                </simple-property-list>
                                <property name="aggregateFunction">STDDEV</property>
                                <list-property name="arguments">
                                    <structure>
                                        <property name="name">Expression</property>
                                        <expression name="value" type="javascript">dataSetRow["ASSIGNED_POINTS"]</expression>
                                    </structure>
                                </list-property>
                                <expression name="filterExpr" type="javascript">dataSetRow["EVAL_COUNT"] == 1</expression>
                            </structure>
 

по сути, я хочу, чтобы, если данные ячейки возвращают значение NaN, чтобы оно равнялось 0, в противном случае сделайте его возвращаемым значением.

Спасибо.

Ответ №1:

Я уже решил это, добавив метод OnRender в ячейку

1) Перейдите на вкладку «Макет» для birt 2) Перейдите на вкладку «контур» для представления birt 3) Щелкните ячейку, для которой я хочу использовать метод OnRender 4) Перейдите на вкладку «Сценарий» 5) Выберите «OnRender» вверху 6) добавьте код, который я хочу, в моем случае:

 if (this.getValue().toString().toLowerCase() == "nan"){
        this.setDisplayValue(0);
} else {
       this.setDisplayValue(this.getValue());
}