Se não queres usar OLAP podes sempre usar ActionLinq
https://bitbucket.org/briangenisio/actionlinq/wiki/Home que permite-te
criar expressões.

Um concelho para obteres melhor performance:
1) Armazena o length numa variavel e faz a condição sobre essa variavel e
não ac.length (no loop)
2) não uses getItem e addItem, usa antes um Array e manipula-o esse e não o
ArrayCollection, no final podes sempre fazer unique = new
ArrayCollection([someArrayWithEntries]);





2013/5/3 Luis Costa <[email protected]>

> Obrigado João,
> Já consegui por AS3
> Quem estiver interessado no código (nem que seja só para cascar):
>
> <?xml version="1.0" encoding="utf-8"?>
> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
>                xmlns:s="library://ns.adobe.com/flex/spark"
>                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"
> minHeight="600">
>     <fx:Declarations>
>         <!-- Place non-visual elements (e.g., services, value objects)
> here -->
>     </fx:Declarations>
>
>     <fx:Script>
>         <![CDATA[
>             import mx.collections.ArrayCollection;
>
>             [Bindable]
>             public var arr1:ArrayCollection = new ArrayCollection([
>                 {Data:"2011",ID_Serie:"9",Valor:11},
>                 {Data:"2012",ID_Serie:"9",Valor:22},
>                 {Data:"2013",ID_Serie:"25",Valor:33},
>                 {Data:"2011",ID_Serie:"25",Valor:44},
>                 {Data:"2012",ID_Serie:"25",Valor:55},
>                 {Data:"2013",ID_Serie:"9",Valor:66}]);
>
>             [Bindable]
>             public var arr2:ArrayCollection = new ArrayCollection();
>
>             public var arrProp:ArrayCollection = new ArrayCollection();
>             public var arrUDatas:ArrayCollection = new ArrayCollection();
>
>             public function transformGrid():void
>             {
>                 var arrIDSerie:ArrayCollection = new ArrayCollection();
>                 for(var a:Number = 0; a<arr1.length; a++)
>                 {
>                     arrIDSerie.addItem(arr1[a].ID_Serie);
>                 }
>                 arrProp = getUniqueValues(arrIDSerie);
>
>                 callLater(populaDatas,null);
>
>             }
>
>             public function populaDatas():void
>             {
>                 var arrDatas:ArrayCollection = new ArrayCollection();
>                 for(var a:Number = 0; a<arr1.length; a++)
>                 {
>                     arrDatas.addItem(arr1[a].Data);
>                 }
>                 arrUDatas = getUniqueValues(arrDatas);
>                 callLater(populanovosdados,null);
>             }
>
>             public function populanovosdados():void
>             {
>                 var i:Number = 0;
>                 for(i=0; i<arrUDatas.length;i++)
>                 {
>                     var obj:Object = new Object();
>                     obj.Data = arrUDatas[i];
>
>                     for(var a:Number = 0; a<arrProp.length; a++)
>                     {
>                         var str:String = arrProp[a];
>
>                         for(var s:Number = 0; s<arr1.length; s++)
>                         {
>                             if(arrUDatas[i] == arr1[s].Data && str ==
> String(arr1[s].ID_Serie))
>                             {
>                                 obj[str] = arr1[s].Valor;
>                             }
>                         }
>                     }
>                     arr2.addItem(obj);
>                 }
>             }
>
>             public function getUniqueValues (collection :
> ArrayCollection):ArrayCollection {
>                 var length : Number = collection.length;
>                 var dic : Dictionary = new Dictionary();
>
>                 //this should be whatever type of object you have inside
> your AC
>                 var value : Object;
>                 for(var i:Number = 0; i < length; i++){
>                     value = collection.getItemAt(i);
>                     dic[value] = value;
>                 }
>                 //this bit goes through the dictionary and puts data into
> a new AC
>                 var unique:ArrayCollection = new ArrayCollection();
>                 for(var prop :String in dic){
>                     unique.addItem(dic[prop]);
>                 }
>                 return unique;
>             }
>
>         ]]>
>     </fx:Script>
>
>     <mx:DataGrid x="59" y="111" dataProvider="{arr1}"/>
>     <mx:DataGrid x="451" y="111" dataProvider="{arr2}"/>
>     <s:Button x="369" y="295" label="Transform" click="transformGrid()"/>
> </s:Application>
>
>
> 2013/5/3 João Fernandes <[email protected]>
>
>> Experimenta usar as classes de OLAP, devem de resolver o teu problema.
>>
>>
>> 2013/5/3 Luis Costa <[email protected]>
>>
>>> Boas, eu sei que este problema é só uma questão de algoritmo e que o
>>> posso descobrir sozinho, contudo também sei que estar a partir pedra em
>>> algo que pode ser demasiado simples mas estar a passar-me completamente ao
>>> lado.
>>>
>>> Tenho um resultado que me dá algo do estilo:
>>> Data - Serie - Valor
>>>
>>> 2011 - Lisboa - 21
>>> 2012 - Lisboa - 32
>>> 2013 - Lisboa - 43
>>> 2011 - Porto - 12
>>> 2012 - Porto - 33
>>> 2013 - Porto - 21
>>>
>>> Ou seja um resultado da pluviosidade (por exemplo) da série Porto e da
>>> série Lisboa e queria que isto convertesse a tabela de resultados para algo
>>> como
>>>
>>> Data - Lisboa - Porto
>>> 2011 - 21 - 12
>>> 2012 - 32 - 33
>>> 2013 - 43 - 21
>>>
>>> Eu tenho quase a certeza que até já fiz isto mas não encontro por nada
>>> Se alguém conseguir ajudar, agradeço
>>> Cumprimentos
>>>
>>>
>>>
>>>
>>> --
>>> Luís Medeiro Costa
>>>
>>> Flex Front-End Developer
>>> URL: http://www.luiscostaweb.com/
>>> E-mail: [email protected]
>>> MSN: [email protected]
>>> Twitter: http://twitter.com/LTostas
>>>
>>> --
>>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org"
>>> dos Grupos do Google.
>>>
>>> Para anular a subscrição deste grupo e parar de receber emails deste
>>> grupo, envie um email para [email protected].
>>> Para publicar uma mensagem neste grupo, envie um e-mail para
>>> [email protected].
>>> Visite este grupo em http://groups.google.com/group/riapt?hl=pt-PT.
>>> Para mais opções, consulte https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>
>>
>>
>> --
>>
>> João Fernandes
>>
>> --
>> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
>> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" dos
>> Grupos do Google.
>>
>> Para anular a subscrição deste grupo e parar de receber emails deste
>> grupo, envie um email para [email protected].
>> Para publicar uma mensagem neste grupo, envie um e-mail para
>> [email protected].
>> Visite este grupo em http://groups.google.com/group/riapt?hl=pt-PT.
>> Para mais opções, consulte https://groups.google.com/groups/opt_out.
>>
>>
>>
>
>
>
> --
> Luís Medeiro Costa
>
> Flex Front-End Developer
> URL: http://www.luiscostaweb.com/
> E-mail: [email protected]
> MSN: [email protected]
> Twitter: http://twitter.com/LTostas
>
> --
> Recebeu esta mensagem porque está inscrito no grupo "Mailing List da
> Comunidade Portuguesa de Rich Internet Applications - www.riapt.org" dos
> Grupos do Google.
>
> Para anular a subscrição deste grupo e parar de receber emails deste
> grupo, envie um email para [email protected].
> Para publicar uma mensagem neste grupo, envie um e-mail para
> [email protected].
> Visite este grupo em http://groups.google.com/group/riapt?hl=pt-PT.
> Para mais opções, consulte https://groups.google.com/groups/opt_out.
>
>
>



-- 

João Fernandes

-- 
Recebeu esta mensagem porque está inscrito no grupo "Mailing List da Comunidade 
Portuguesa de Rich Internet Applications - www.riapt.org" dos Grupos do Google.

Para anular a subscrição deste grupo e parar de receber emails deste grupo, 
envie um email para [email protected].
Para publicar uma mensagem neste grupo, envie um e-mail para 
[email protected].
Visite este grupo em http://groups.google.com/group/riapt?hl=pt-PT.
Para mais opções, consulte https://groups.google.com/groups/opt_out.


Responder a