The following code generates pie chart.And the pie chart can be drilldown based on adding Levels in the following Zoomintoseries().
<?xml version="1.0" encoding="utf-8"?>
<!-- dpcontrols/adg/myComponents/ChartRenderer.mxml -->
<mx:VBox height="180" width="100%" xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" xmlns:layout="org.alivepdf.layout.*">
<mx:Script>
<![CDATA[
import mx.charts.HitData;
import mx.charts.events.ChartItemEvent;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.soap.WebService;
private var ws:WebService;
private var Level:int = 0;
private var Cdtxt:String = "";
private var LocCd:String = "";
private var Cd:String = "";
[Bindable]
public var dpac:ArrayCollection = new ArrayCollection
public var initSeriesArray:Array = new Array();
public var level:Number = 1;
public var newSeries:Array;
[Bindable]
public var dp:ArrayCollection = dpac;
[Bindable]
public var drillDownDataSet:ArrayCollection;
override public function set data(value:Object):void
{
super.data = value;
if (value.hasOwnProperty("detail"))
dp = value.detail;
dpac = dp
}
private function displayName(data:Object, field:String, index:Number, percentValue:Number):String
{
return data.CUST + ":" + data.amount + '\n';
}
private function initApp():void
{
initSeriesArray = pie.series;
}
private function zoomIntoSeries(e:ChartItemEvent):void
{
e.stopImmediatePropagation();
var hitData:HitData = e.hitData;
if (Level==0)
{
Cdtxt = "DRILL1"
LocCd = hitData.item.CUST;
Cd = "";
}
else if (Level==1)
{
Cdtxt = "DRILL2"
LocCd = hitData.item.LOC;
Cd = hitData.item.CUST;
}
else
{
Cdtxt = "DRILL"
LocCd = hitData.item.LOC;
Cd = "";
}
ws = new WebService();
ws.wsdl="http://localhost/ds/Service1.asmx?WSDL";
ws.addEventListener("result", echoResultHandler);
ws.addEventListener("fault", faultHandler);
ws.loadWSDL();
ws.search("Test_Test", Cdtxt, Cd, "", LocCd, "", "", "");
}
private function echoResultHandler(event:ResultEvent):void
{
var pietmpArr:ArrayCollection = new ArrayCollection();
var TmpArr:ArrayCollection = new ArrayCollection();
pietmpArr = event.result.Tables.Table.Rows;
for (var i:int=0; i<=pietmpArr.length-1;i++)
{
var TmpObj:Object = new Object();
TmpObj['CUST'] = pietmpArr[i].ACT
TmpObj['amount'] = pietmpArr[i].VAL
TmpObj['LOC'] = pietmpArr[i].CD
TmpArr.addItem(TmpObj);
}
dp = TmpArr
if (Cdtxt == "DRILL")
{
Level = 0
}
else
{
Level = Level + 1
}
}
private function faultHandler(event:FaultEvent):void
{
Alert.show("Bye")
}
]]>
</mx:Script>
<mx:SeriesSlide id="slideIn" duration="1000" direction="down"/>
<mx:SeriesSlide id="slideOut" duration="1000" direction="up"/>
<mx:PieChart id="pie"
dataProvider="{dp}"
width="100%"
height="178"
x="1"
y="311"
showDataTips="true"
itemClick="zoomIntoSeries(event)">
<mx:series>
<mx:PieSeries id="s1"
labelPosition="callout"
field="amount"
nameField="CUST"
labelField="CUST"
hideDataEffect="slideOut"
showDataEffect="slideIn"
/>
</mx:series>
</mx:PieChart>
</mx:VBox>
<?xml version="1.0" encoding="utf-8"?>
<!-- dpcontrols/adg/myComponents/ChartRenderer.mxml -->
<mx:VBox height="180" width="100%" xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" xmlns:layout="org.alivepdf.layout.*">
<mx:Script>
<![CDATA[
import mx.charts.HitData;
import mx.charts.events.ChartItemEvent;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.soap.WebService;
private var ws:WebService;
private var Level:int = 0;
private var Cdtxt:String = "";
private var LocCd:String = "";
private var Cd:String = "";
[Bindable]
public var dpac:ArrayCollection = new ArrayCollection
public var initSeriesArray:Array = new Array();
public var level:Number = 1;
public var newSeries:Array;
[Bindable]
public var dp:ArrayCollection = dpac;
[Bindable]
public var drillDownDataSet:ArrayCollection;
override public function set data(value:Object):void
{
super.data = value;
if (value.hasOwnProperty("detail"))
dp = value.detail;
dpac = dp
}
private function displayName(data:Object, field:String, index:Number, percentValue:Number):String
{
return data.CUST + ":" + data.amount + '\n';
}
private function initApp():void
{
initSeriesArray = pie.series;
}
private function zoomIntoSeries(e:ChartItemEvent):void
{
e.stopImmediatePropagation();
var hitData:HitData = e.hitData;
if (Level==0)
{
Cdtxt = "DRILL1"
LocCd = hitData.item.CUST;
Cd = "";
}
else if (Level==1)
{
Cdtxt = "DRILL2"
LocCd = hitData.item.LOC;
Cd = hitData.item.CUST;
}
else
{
Cdtxt = "DRILL"
LocCd = hitData.item.LOC;
Cd = "";
}
ws = new WebService();
ws.wsdl="http://localhost/ds/Service1.asmx?WSDL";
ws.addEventListener("result", echoResultHandler);
ws.addEventListener("fault", faultHandler);
ws.loadWSDL();
ws.search("Test_Test", Cdtxt, Cd, "", LocCd, "", "", "");
}
private function echoResultHandler(event:ResultEvent):void
{
var pietmpArr:ArrayCollection = new ArrayCollection();
var TmpArr:ArrayCollection = new ArrayCollection();
pietmpArr = event.result.Tables.Table.Rows;
for (var i:int=0; i<=pietmpArr.length-1;i++)
{
var TmpObj:Object = new Object();
TmpObj['CUST'] = pietmpArr[i].ACT
TmpObj['amount'] = pietmpArr[i].VAL
TmpObj['LOC'] = pietmpArr[i].CD
TmpArr.addItem(TmpObj);
}
dp = TmpArr
if (Cdtxt == "DRILL")
{
Level = 0
}
else
{
Level = Level + 1
}
}
private function faultHandler(event:FaultEvent):void
{
Alert.show("Bye")
}
]]>
</mx:Script>
<mx:SeriesSlide id="slideIn" duration="1000" direction="down"/>
<mx:SeriesSlide id="slideOut" duration="1000" direction="up"/>
<mx:PieChart id="pie"
dataProvider="{dp}"
width="100%"
height="178"
x="1"
y="311"
showDataTips="true"
itemClick="zoomIntoSeries(event)">
<mx:series>
<mx:PieSeries id="s1"
labelPosition="callout"
field="amount"
nameField="CUST"
labelField="CUST"
hideDataEffect="slideOut"
showDataEffect="slideIn"
/>
</mx:series>
</mx:PieChart>
</mx:VBox>
No comments:
Post a Comment