Hoe programmeer je een draaitabel?

Alles over programmeren en development binnen de IT-wereld
Plaats reactie
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

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
hashtable.png (8.94 KiB) 3090 keer bekeken
Ik zou dat nu moeten transformeren zodat ik een output à la dit krijg:
hashtable_pivot.png
Ik ben niet per sé op zoek naar de hele uitkomst (al mag dat natuurlijk wél :angel: ), 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 :-) .
Gebruikersavatar
Sasuke
userbase crew
userbase crew
Berichten: 5772
Lid geworden op: 13 aug 2003, 20:25
Locatie: Vlaanderen
Uitgedeelde bedankjes: 251 keer
Bedankt: 552 keer
Recent bedankt: 2 keer
Provider
Te Koop forum

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.
Who the fxxk is General Failure and why is he reading my hard disk ?
Afbeelding
Gebruikersavatar
Trojan
Elite Poster
Elite Poster
Berichten: 3239
Lid geworden op: 13 aug 2009, 21:10
Locatie: Kontich
Uitgedeelde bedankjes: 114 keer
Bedankt: 243 keer

Ik denk dat dit hetgeen is wat jij zoekt: http://powershell.org/wp/2012/07/05/pow ... ot-tables/
De posts van deze gebruiker weerspiegelen op geen enkel moment de mening van Belgacom NV/SA.
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

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 :)
Gebruikersavatar
cptKangaroo
Elite Poster
Elite Poster
Berichten: 3312
Lid geworden op: 18 dec 2004, 14:33
Locatie: 053 Aalst
Uitgedeelde bedankjes: 765 keer
Bedankt: 253 keer
Recent bedankt: 1 keer
Provider
Te Koop forum

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?
Gebruikersavatar
Trojan
Elite Poster
Elite Poster
Berichten: 3239
Lid geworden op: 13 aug 2009, 21:10
Locatie: Kontich
Uitgedeelde bedankjes: 114 keer
Bedankt: 243 keer

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.
De posts van deze gebruiker weerspiegelen op geen enkel moment de mening van Belgacom NV/SA.
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

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!
Plaats reactie

Terug naar “Development”