#としじのPS その23~練習問題15:クロス集計~
#としじのPS その23~練習問題15:クロス集計~
PSでクロス集計、やったことない
ちょっとググったけどそれらしい記事も見当たらず、やりようはあるはずですけどね・・・
一旦パスします、あとで追記するかも、ひとまずやったところまで
あ、CSVの名前をスクリプトの名前と同じにしてるのでいちいち書き換えなくてもいいようにしてあります、本筋とは関係ないけども
cls; cd C:\PowerShell
$csvfilename = (ls $MyInvocation.MyCommand.Name).BaseName + ".csv"
$csv = Import-Csv $csvfilename -Encoding Default
$names = ($csv | group 支店).Name
$csv | group 分類
追記
力業で実装できたので記載しておきます
cls; cd C:\PowerShell
$csvfilename = (ls $MyInvocation.MyCommand.Name).BaseName + ".csv"
$csv = Import-Csv $csvfilename -Encoding Default
$分類 = ($csv | group 分類).Name | sort
$支店 = ($csv | group 支店).Name | sort
$arr = New-Object "object[,]" ($分類.Count+1),($支店.Count+1)
$arr[0,0]="分類"
1..$分類.Count | % { $arr[$_,0] = $分類[$_-1] }
1..$支店.Count | % { $arr[0,$_] = $支店[$_-1] }
$csv | % {
$arr[($分類.IndexOf($_.分類)+1),($支店.IndexOf($_.支店)+1)] += [int]$_.売上
}
.{
for ($i = 0; $i -le $分類.Count; $i++){
$line = ""
for ($j = 0; $j -le $支店.Count; $j++){
$line += ("`t" + $arr[$i,$j])
}
$line.Substring(1)
}
} | ConvertFrom-Csv -Delimiter "`t" | ogv -Title "クロス集計"
一応エクセルのピボットテーブルで確かめてみた、大丈夫そう
おまけ
表形式にまとめなくていいのであればこんなのがお手軽です
この記事が気に入ったらサポートをしてみませんか?