<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" layout="horizontal" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.charts.HitData;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable] public var territoryRevenue:ArrayCollection;
[Bindable] public var productlineRevenue:Object;
[Bindable] public var topTenCustomersRevenue:Object;
private var _selectedTerritory:String = "*";
private var _selectedProductLine:String = "*";
private function initApp():void
{
productlineRevenue = new Object();
topTenCustomersRevenue = new Object();
tSrv.send();
updateProductLineRevenue();
updateTopTenCustomersRevenue();
}
public function set selectedTerritory(territory:String):void
{
_selectedTerritory = territory;
updateProductLineRevenue();
updateTopTenCustomersRevenue();
}
[Bindable] public function get selectedTerritory():String
{
return _selectedTerritory;
}
public function set selectedProductLine(productLine:String):void
{
_selectedProductLine = productLine;
updateTopTenCustomersRevenue();
}
[Bindable] public function get selectedProductLine():String
{
return _selectedProductLine;
}
private function updateProductLineRevenue():void
{
if (productlineRevenue[_selectedTerritory] == undefined)
{
productlineRevenue[_selectedTerritory] = new ArrayCollection();
var p:Object = new Object();
if (_selectedTerritory != "*")
{
p.territory = _selectedTerritory;
}
plSrv.send(p);
}
else
{
plPie.dataProvider = productlineRevenue[_selectedTerritory];
}
}
private function updateTopTenCustomersRevenue():void
{
if (topTenCustomersRevenue[_selectedTerritory + '_' + _selectedProductLine] == undefined)
{
topTenCustomersRevenue[_selectedTerritory + '_' + _selectedProductLine] = new ArrayCollection();
var p:Object = new Object();
if (_selectedTerritory != "*")
{
p.territory = _selectedTerritory;
}
if (_selectedProductLine != "*")
{
p.productline = _selectedProductLine;
}
ttcSrv.send(p);
}
else
{
ttcBar.dataProvider = topTenCustomersRevenue[_selectedTerritory + '_' + _selectedProductLine];
}
}
private function handleTResult(event:ResultEvent):void
{
territoryRevenue = new ArrayCollection();
tPie.dataProvider = territoryRevenue;
var hdr:ArrayCollection = event.result.Envelope.Body.ExecuteActivityResponse.swresult['COLUMN-HDR-ROW']['COLUMN-HDR-ITEM'];
for each (var pl:Object in event.result.Envelope.Body.ExecuteActivityResponse.swresult['DATA-ROW'])
{
var spl:Object = new Object();
spl[hdr[0]] = pl['DATA-ITEM'][0];
spl[hdr[1]] = pl['DATA-ITEM'][1];
territoryRevenue.addItem(spl);
}
}
private function handlePLResult(event:ResultEvent):void
{
var hdr:ArrayCollection = event.result.Envelope.Body.ExecuteActivityResponse.swresult['COLUMN-HDR-ROW']['COLUMN-HDR-ITEM'];
for each (var pl:Object in event.result.Envelope.Body.ExecuteActivityResponse.swresult['DATA-ROW'])
{
var spl:Object = new Object();
spl[hdr[0]] = pl['DATA-ITEM'][0];
spl[hdr[1]] = (pl['DATA-ITEM'][1] * (Math.random() + .5)); productlineRevenue[_selectedTerritory].addItem(spl);
}
plPie.dataProvider = productlineRevenue[_selectedTerritory];
}
private function handleTTCResult(event:ResultEvent):void
{
var hdr:ArrayCollection = event.result.Envelope.Body.ExecuteActivityResponse.swresult['ROW-HDR-ROW'];
var pl:ArrayCollection = event.result.Envelope.Body.ExecuteActivityResponse.swresult['DATA-ROW'];
for (var i:int = 0; i < pl.length; i++)
{
var spl:Object = new Object();
spl.name = hdr[i]['ROW-HDR-ITEM'][0];
spl.sales = (pl[i]['DATA-ITEM'] * (Math.random() + .5)); topTenCustomersRevenue[_selectedTerritory + '_' + _selectedProductLine].addItemAt(spl,0);
}
ttcBar.dataProvider = topTenCustomersRevenue[_selectedTerritory + '_' + _selectedProductLine];
}
private function formatTPieDataTip(hitdata:HitData):String
{
return "<b>" + hitdata.item.TERRITORY + "</b><br>" + cf.format(hitdata.item.SOLD_PRICE);
}
]]>
</mx:Script>
<mx:HTTPService id="tSrv" url="Sales_by_Territory.xaction" result="handleTResult(event)"/>
<mx:HTTPService id="plSrv" url="Sales_by_Productline.xaction" result="handlePLResult(event)"/>
<mx:HTTPService id="ttcSrv" url="topnmdxquery.xaction" result="handleTTCResult(event)"/>
<mx:CurrencyFormatter id="cf" precision="0"/>
<mx:SeriesInterpolate id="plEffect"/>
<mx:SeriesSlide id="ttcSlide" direction="right"/>
<mx:VBox height="100%" width="40%">
<mx:Panel width="100%" height="100%" title="Revenue By Territory">
<mx:PieChart id="tPie" width="100%" height="100%" showDataTips="true" dataTipFunction="formatTPieDataTip">
<mx:itemClick>
selectedTerritory = event.hitData.item.TERRITORY;
var explodeData:Array = [];
explodeData[territoryRevenue.getItemIndex(event.hitData.item)] = 0.15;
tPie.series[0].perWedgeExplodeRadius = explodeData;
</mx:itemClick>
<mx:series>
<mx:PieSeries nameField="TERRITORY" field="SOLD_PRICE" labelPosition="insideWithCallout" labelField="TERRITORY"/>
</mx:series>
</mx:PieChart>
</mx:Panel>
<mx:Panel width="100%" height="100%" title="Revenue By Product Line (Territory = {selectedTerritory})">
<mx:PieChart id="plPie" width="100%" height="100%" showDataTips="true">
<mx:itemClick>
selectedProductLine = event.hitData.item.PRODUCTLINE;
var explodeData:Array = [];
explodeData[productlineRevenue[_selectedTerritory].getItemIndex(event.hitData.item)] = 0.15;
plPie.series[0].perWedgeExplodeRadius = explodeData;
</mx:itemClick>
<mx:series>
<mx:PieSeries nameField="PRODUCTLINE" field="REVENUE" labelPosition="insideWithCallout" showDataEffect="{plEffect}" labelField="PRODUCTLINE"/>
</mx:series>
</mx:PieChart>
</mx:Panel>
</mx:VBox>
<mx:Panel width="100%" height="100%" title="Top 10 Customers (Territory = {selectedTerritory} | Product Line = {selectedProductLine})">
<mx:BarChart id="ttcBar" width="100%" height="100%" showDataTips="true">
<mx:series>
<mx:BarSeries xField="sales" showDataEffect="{ttcSlide}"/>
</mx:series>
<mx:verticalAxis>
<mx:CategoryAxis categoryField="name"/>
</mx:verticalAxis>
</mx:BarChart>
</mx:Panel>
</mx:Application>