Pagina 1 van 1
Hoe programmeer je een draaitabel?
Geplaatst: 21 jan 2016, 18:23
door meon
Ik probeer hier iets te automatiseren (lees: automatisch transformeren) in
PowerShell.
Concreet roep ik iets van een webservice op, rommel daar wat mee en krijg uiteindelijk een hashtable dat er ongeveer zo uit ziet qua inhoud:

- hashtable.png (8.94 KiB) 3098 keer bekeken
Ik zou dat nu moeten transformeren zodat ik een output à la dit krijg:
Ik ben niet per sé op zoek naar de hele uitkomst (al mag dat natuurlijk wél

), maar eerder conceptueel hoe dat er uit zou kunnen zien, pseudo-code-gewijs.
Het is dus een vorm van groeperen op "message" en de values dan samentellen.
Ik weet dat een Excel-draaitabel een optie kan zijn, maar ik wil de output ook nog terug automatiseren zodat dat een andere webservice in kan.
Voor dat laatste doel besef ik net dat de output niet per sé er uit moet zien zoals een Excel-draaitabel (het gaat me om de resulterende x/y-resultaten).
Oh ja; Group-Object in PowerShell levert alvast niet het gewenste resultaat op

.
Re: Hoe programmeer je een draaitabel?
Geplaatst: 21 jan 2016, 18:41
door Sasuke
Errm, als ge dat inleest als een array vanuit ne csv kan je toch doen wat je wil want je hebt headers en arrays ... Bvb foreach-object where (header.value -eq 'zip-111' ) { do something} niet ? Of simplifieer ik te veel ? Ben op iPad en gewoon ff aan het freewheelen.
Re: Hoe programmeer je een draaitabel?
Geplaatst: 21 jan 2016, 19:18
door Trojan
Re: Hoe programmeer je een draaitabel?
Geplaatst: 21 jan 2016, 19:43
door meon
Dat zou wel eens héél erg de oplossing kunnen zijn, merci!
De links in die blog zijn dood, maar ik heb het script op GitHub gevonden:
https://github.com/jdhitsolutions/PSPivotTable . Ik ga meteen eens proberen, merci!
Ik heb er simpelweg niet bij stilgestaan dat iemand hier een algemene oplossing voor gemaakt zou kunnen hebben, ik was al bijna via COM Excel aan te sturen

Re: Hoe programmeer je een draaitabel?
Geplaatst: 21 jan 2016, 20:08
door cptKangaroo
Ik gebruik in .NET vrijwel altijd LINQ met lambdas om collecties te manipuleren, maar Powershell heeft blijkbaar nog geen LINQ doch LINQPad kan je misschien helpen:
linksken?
Re: Hoe programmeer je een draaitabel?
Geplaatst: 21 jan 2016, 20:19
door Trojan
meon schreef:Ik heb er simpelweg niet bij stilgestaan dat iemand hier een algemene oplossing voor gemaakt zou kunnen hebben, ik was al bijna via COM Excel aan te sturen

Je kan het zot niet bedenken of iemand heeft uw probleem al wel eens gehad. Stackexchange heeft mij al vele malen uit de nood geholpen.
Wat betreft COM en Excel: Blijft.daar.van.weg!
Als je het echt wil automatiseren kan je beter gebruik maken van iets zoals NPOI, deze zijn niet van Excel afhankelijk. Excel via COM aansturen heeft een groot probleem dat op het einde de resources niet (goed) worden vrij gegeven en Excel in de achtergrond blijft draaien.
Re: Hoe programmeer je een draaitabel?
Geplaatst: 21 jan 2016, 20:36
door meon
cptKangaroo schreef:Ik gebruik in .NET vrijwel altijd LINQ met lambdas om collecties te manipuleren, maar Powershell heeft blijkbaar nog geen LINQ doch LINQPad kan je misschien helpen:
linksken?
Behalve de term LINQ heb ik daar eigenlijk nog nooit iets mee gedaan (en ken d'er bijgevolg niks van). M'n probleemstelling was inderdaad ook via een SQL-like statement op te lossen, ik neem aan dat dit een oplossing hiervoor zou zijn?
Trojan schreef:Wat betreft COM en Excel: Blijft.daar.van.weg!
Als je het echt wil automatiseren kan je beter gebruik maken van iets zoals NPOI, deze zijn niet van Excel afhankelijk. Excel via COM aansturen heeft een groot probleem dat op het einde de resources niet (goed) worden vrij gegeven en Excel in de achtergrond blijft draaien.
Ja, als het die richting uit zou gaan zou ik dat ook vermijden. Misschien had ik nog iets creatiefs met LogParser 2.2 kunnen verzinnen.
't Is uiteindelijk gelukt met New-PSPivotTable:
Code: Selecteer alles
New-PSPivotTable -Data (Get-TTMyEvents | select date, task, hours_duration) -xlabel date -yProperty task -Sum hours_duration | ft -AutoSize
D'er zit nog wel een error in wegens een "leeg record", maar dat lijkt een issue te zijn in de aangeleverde data dat ik er uit moet halen.
Coolio!