Difference between revisions of "TrackingDiagram"
Line 26: | Line 26: | ||
== Detail design == | == Detail design == | ||
− | 1. To refactor the generalization:<br> | + | '''1. '''<u>'''To refactor the generalization:'''</u><br> |
− | Diagram:<br> | + | '''Diagram:'''<br> |
New virtual method DataSeries[][] BuildData(DiagramInfo diagramInfo) (moved onto from CrossDiagram originally)<br> | New virtual method DataSeries[][] BuildData(DiagramInfo diagramInfo) (moved onto from CrossDiagram originally)<br> | ||
Line 36: | Line 36: | ||
<br> | <br> | ||
− | DiagramInfo:<br> | + | '''DiagramInfo:'''<br> |
New properties called SelfDefinedCriterias, containing the self-defined criterias (this assures other own criteria of further chart like : Cross, Campaign etc.). The properties should be initialized inside constructors of each chart whenever it needs to be used. In current scenario, it has just supported for Tracking with:<br> | New properties called SelfDefinedCriterias, containing the self-defined criterias (this assures other own criteria of further chart like : Cross, Campaign etc.). The properties should be initialized inside constructors of each chart whenever it needs to be used. In current scenario, it has just supported for Tracking with:<br> | ||
Line 45: | Line 45: | ||
<br> | <br> | ||
− | ChartLayoutInfo:<br> | + | '''ChartLayoutInfo:'''<br> |
New properties called SelfDefinedLayouts, containing the self-defined layouts (this assures other own layout of further chart like : Cross, Campaign etc.). The properties should be initialized inside constructors of each chart whenever it needs to be used. In current scenario, it has just supported for Tracking with:<br> | New properties called SelfDefinedLayouts, containing the self-defined layouts (this assures other own layout of further chart like : Cross, Campaign etc.). The properties should be initialized inside constructors of each chart whenever it needs to be used. In current scenario, it has just supported for Tracking with:<br> | ||
Line 54: | Line 54: | ||
<br> | <br> | ||
− | 2. Create new TrackingDiagramInfo:<br> | + | '''2. '''<u>'''Create new TrackingDiagramInfo:'''</u><br> |
[[Image:TrackingDiagramInfo.png]]<br> | [[Image:TrackingDiagramInfo.png]]<br> | ||
Line 71: | Line 71: | ||
<u>''Support:''</u> | <u>''Support:''</u> | ||
− | *Short format (Q1==1)<br> | + | *Short format (Q1==1)<br> |
− | *Not full format (count() where Q1==1)<br> | + | *Not full format (count() where Q1==1)<br> |
− | *Full format (=count() where Q1==1;)<br> | + | *Full format (=count() where Q1==1;)<br> |
*Complex expression (={ var x=1; var y=1; ...; return (x+y);})<br> | *Complex expression (={ var x=1; var y=1; ...; return (x+y);})<br> | ||
Line 84: | Line 84: | ||
<u></u><br> | <u></u><br> | ||
− | <u></u><br> | + | '''3. '''<u>'''Unit test'''</u><br> |
− | + | <br> | |
== Document revisions == | == Document revisions == |
Revision as of 07:51, 1 February 2010
New Report Design - 2009 => TrackingDiagram
Introduction
This page is detail design for detail implementation of tracking diagram, both on GUI and Business layers.
First feeling:
- There are lots of setting on GUI makes us feel that this diagram is not close to cross diagram, however basically the only different is in phase 1 (DataSeries generation), the remaining are nearly the same.
- Data cache must have StartDate and EndDate column to be used with tracking diagram
- Diagram's XML must be used (it is optional in CrossDiagram)
- There are 2 parts: static part (defined in XML - list of branches, list of target group, timeset, etc.), dynamic part (defined on GUI - which brand to draw on, values of target group, trend line, time period, etc.) => dynamic part MUST be saved for future requests
- Formulas are PRE-DEFINED by end user
- Time periods and target groups in fact are additional filters
- Trend line is just another data series to draw
Design decisions
GUI:
- Split into user controls with MVP implementation => must have some unit test for this
- Support skin => default skin is just like the default one of CrossDiagram
XML:
- We focus on the viewer part instead of editing part => reuse the old XML format, however there must be an FORMAT ADAPTOR that is capable of parsing both old and new (might be defined later) format
Business:
- TrackingDiagramInfo has the same role as CrossDiagramInfo for cross diagram
Detail design
1. To refactor the generalization:
Diagram:
New virtual method DataSeries[][] BuildData(DiagramInfo diagramInfo) (moved onto from CrossDiagram originally)
New property called Calculator (type ICalculator) will be initialized whenever method BuildData is called
DiagramInfo:
New properties called SelfDefinedCriterias, containing the self-defined criterias (this assures other own criteria of further chart like : Cross, Campaign etc.). The properties should be initialized inside constructors of each chart whenever it needs to be used. In current scenario, it has just supported for Tracking with:
- Chart is auto-generate initialized or not
- Chart is initialized with criteria hidden or not
ChartLayoutInfo:
New properties called SelfDefinedLayouts, containing the self-defined layouts (this assures other own layout of further chart like : Cross, Campaign etc.). The properties should be initialized inside constructors of each chart whenever it needs to be used. In current scenario, it has just supported for Tracking with:
- Chart is generated with one more Trend-line or not
- Chart is generated with style of each series (brand) applied by their order or not
2. Create new TrackingDiagramInfo:
TrackingDiagramInfo contains a DynamicExpressionResolver 2-D array (which each element is a brand item value)
DynamicExpressionResolver :
Purpose to exist:
- Assure the flexibility of brand item value. Tracking diagram hasn't got concrete Axis object like Cross, just values of brand item as expressions. Expression might be realized as DynamicExpressionResolver in short format (filter format) like : Q1 == [1] or, in full format like : count() where Q1 == [1]
- Handle validity of brand item value better (might be used in further Tracking/Campaign editor rebuilding)
Support:
- Short format (Q1==1)
- Not full format (count() where Q1==1)
- Full format (=count() where Q1==1;)
- Complex expression (={ var x=1; var y=1; ...; return (x+y);})
Limitation:
DynamicExpressionResolver hasn't support fully for cgscript (refer older engine's and FilterInfo's also). For example, user don't input as usual, but a cgscript function (like in Spreadsheet : = { var sht... ; return sht; }, then our current filter-appending-in-last bussiness can dive into a rock when generated expression will be : = { var sht... ; return sht } && Q1==[1].
Solution might be use functions alike in Interpreter (where expression is parsed, get condition, math enumarator from AST etc.), or these existing Interpreter's functions would be set public.
3. Unit test
Document revisions
Version No. | Date | Changed By | Description | Svn revision |
0.1 | 31.12.2009 | Nguyen Trung Chinh | Create the first version | 59167 |
0.1.1 | 15.01.2009 | Nguyễn Điển Nghĩa | Initialize basic class |