Question Somme et regroupement de donnée dans un CSV

Plus d'informations
il y a 8 ans 1 mois #24955 par Ruff
Bonjour,

Novice, je mets en place un système de facturation des impressions par service, je passe par PS, j'y suis presque au but final mais là j'arrive à court d'idée, je bloque :\

Est-ce que quelqu'un aurait un idée pleease :)?

Je souhaite que le résultat final me donne le nombre d'impression couleur par service et le nombre d'impression NB par service...

Le plus simple est de voir en image :


## Voici ce que contient le CSV d'Origine :

\"User\";\"Company\";\"Type d'impression\";\"Compteur\"
\"tutu.toto\";\"Comptabilite\";\"Couleur\";\"1\"
\"albert.dupontel\";\"Informatique\";\"Couleur\";\"4\"
\"albert.dupontel\";\"Informatique\";\"Couleur\";\"1\"
\"alain.delon\";\"Informatique\";\"Couleur\";\"1\"
\"toto.tutu\";\"Comptabilite\";\"Couleur\";\"1\"
\"albert.dupontel\";\"Informatique\";\"N&B\";\"4\"

## Ce qui est souhaité pour le fichier final :

\"Service\";Type d'impression\";\"Compteur\"
Informatique;Couleur;6
Informatique;N&B;4
Comptabilite;Couleur;2
Comptabilite;N&B;0

Merci bien :)

Xnyp

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #24959 par Laurent Dardenne
Salut,
une piste :
[code:1]
@'
\"User\";\"Company\";\"Type d'impression\";\"Compteur\"
\"tutu.toto\";\"Comptabilite\";\"Couleur\";\"1\"
\"albert.dupontel\";\"Informatique\";\"Couleur\";\"4\"
\"albert.dupontel\";\"Informatique\";\"Couleur\";\"1\"
\"alain.delon\";\"Informatique\";\"Couleur\";\"1\"
\"toto.tutu\";\"Comptabilite\";\"Couleur\";\"1\"
\"albert.dupontel\";\"Informatique\";\"N&B\";\"4\"
'@ > c:\temp\data.csv
$datas=import-csv c:\temp\data.csv -Delimiter ';'
$result=$datas|group company,\"Type d'impression\"

$result
#
# Count Name Group
#
----
# 2 Comptabilite, Couleur {@{User=tutu.toto; Company=Comptabilite; Type d'impression=Couleur; Compt
# 3 Informatique, Couleur {@{User=albert.dupontel; Company=Informatique; Type d'impression=Couleur;
# 1 Informatique, N&B {@{User=albert.dupontel; Company=Informatique; Type d'impression=N&B; Com

$result[0].Group

# User Company Type d'impression Compteur
# ----


# tutu.toto Comptabilite Couleur 1
# toto.tutu Comptabilite Couleur 1

[/code:1]
Reste à faire la somme pour chaque groupe

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #24960 par Laurent Dardenne
En passant, je me suis demandé comment faire la somme de manière concise, une solution basée sur Linq :
[code:1]
[Linq.Enumerable]::«»Sum([int[]]($result[1].Group.Compteur))
[/code:1]
Du coup comment faciliter l'écriture du rapport :
[code:1]
$result=$datas|
group-object Company,\"Type d'impression\"|
Foreach {
$_
Add-Member -inputobject $_.Group -MemberType ScriptMethod -Name SommeCompteur -Value {[Linq.Enumerable]::«»Sum([int[]]($this.Compteur))} -Force
}
# usage
$result[1].Group.SommeCompteur()
#6
[/code:1]
Mais l'objectif étant de construire un rapport basé sur des regroupements, on crée plutot un objet pour chaque regroupement
[code:1]
$Result=$datas|
group-object company,\"Type d'impression\"|
Add-Member -MemberType ScriptMethod -Name ToRapportImpressionsParService -Value {
$service,$TypeImpression= ($This.Name -split ',').Trim()
[pscustomobject]@{
PSTypeName='RapportImpressionsParService'

Service=$Service

\"Type d'impression\"=$TypeImpression

\"Compteur\"=[Linq.Enumerable]::«»Sum([int[]]($this.Group.Compteur))
}
} -Force -PassThru

$Result.ToRapportImpressionsParService()
#
# Service Type d'impression Compteur
#


# Comptabilite Couleur 2
# Informatique Couleur 6
# Informatique N&B 4

#todo ajouter la ligne : \"User.un\";\"Comptabilite\";\"N&B\";\"1\"
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 3 semaines #25047 par Ruff
Hello!

Désolé j'étais parti en vacances :)

Merci Laurent pour ton aide, c'est nickel cela fonctionne!!!

A +

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.043 secondes
Propulsé par Kunena