Группировать по и добавлять или вычитать в зависимости от индикатора - PullRequest
0 голосов
/ 27 марта 2019

У меня есть файл, в котором есть транзакция транзакции, транзакция транзакции и дебит кредитования. Я хочу написать программу, которая показывает для каждой даты общее количество и общую сумму.

Общая сумма рассчитывается следующим образом -

если debit_credit_indicator равен 'C', добавить еще, если 'D' вычесть.

Я добрался до группировки по показателям, но не знаю, как действовать после подопечных.

Мой вывод выглядит так

TRANSACTION_DATE    DEBIT_CREDIT_INDICA         TotalAmount Count              
                    TOR                                                        
----------------    -------------------         ----------- -----              
2019-02-26          C                                  1478                    
2019-02-25          D                                   100                    
2019-02-26          D                                   200 

param([string]$inputFileName=30)


(Get-Content $inputFileName) -replace '\|', ',' | Set-Content c:\learnpowershell\test.csv


$transactionData = Import-csv c:\learnpowershell\test.csv | Group-Object -Property TRANSACTION_DATE, DEBIT_CREDIT_INDICATOR 

[Array] $newsbData += foreach($gitem in $transactionData)
{
$gitem.group | Select -Unique TRANSACTION_DATE, DEBIT_CREDIT_INDICATOR,  `
@{Name = ‘TotalAmount’;Expression = {(($gitem.group) | measure -Property TRANSACTION_AMOUNT -sum).sum}},
@{Name = ‘Count’;Expression = {(($gitem.group) | Measure-Object -count).count}}
};



write-output $newsbData

1 Ответ

0 голосов
/ 27 марта 2019

Полагаю, вы хотите заменить '|' на ',' потому что вы не знаете опцию -delimiter, иначе вы сохраните свой код для замены. Теперь я предлагаю свой код для вашей проблемы:

#import en group by date
import-csv "c:\learnpowershell\test.csv" -Delimiter '|' | group TRANSACTION_DATE | %{
$TotalCredit=0
$TotalDebit=0
$CountRowCredit=0
$CountRowDebit=0
$HasProblem=$false

#calculation by date for every group

$_.Group | %{
                if ($_.DEBIT_CREDIT_INDICATOR -EQ 'C')
                {
                   $TotalCredit+=$_.transaction_amount
                   $CountRowCredit++ 
                }
                elseif ($_.DEBIT_CREDIT_INDICATOR -EQ 'D')
                {
                   $TotalDebit+=$_.transaction_amount 
                   $CountRowDebit++
                }
                else
                {
                   $HasProblem=$true
                }
}

#output result
[pscustomobject]@{
TRANSACTION_DATE=$_.Name
CountRow=$_.Count
Credit_Total=$TotalCredit
Credit_CountRow=$CountRowCredit
Debit_Total=-$TotalDebit
Debit_CountRow=$CountRowDebit
Total_DebitCredit=$TotalCredit - $TotalDebit
HasProblem=$HasProblem
}


}

Вы можете добавить '| Format-Table ', если вы хотите, чтобы результат печати был отформатирован в таблице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...