add Coefficient of Variation to statistics data on data table tab and value metric on charts of insights explorer

This commit is contained in:
MaysWind
2026-03-08 17:24:08 +08:00
parent 282b74c95e
commit 0b7471879d
22 changed files with 45 additions and 10 deletions
+3 -1
View File
@@ -268,7 +268,8 @@ export enum TransactionExplorerValueMetricType {
SourceAmountRange = 'sourceAmountRange', SourceAmountRange = 'sourceAmountRange',
SourceAmountInterquartileRange = 'sourceAmountInterquartileRange', SourceAmountInterquartileRange = 'sourceAmountInterquartileRange',
SourceAmountVariance = 'sourceAmountVariance', SourceAmountVariance = 'sourceAmountVariance',
SourceAmountStandardDeviation = 'sourceAmountStandardDeviation' SourceAmountStandardDeviation = 'sourceAmountStandardDeviation',
SourceAmountCoefficientOfVariation = 'sourceAmountCoefficientOfVariation'
} }
export class TransactionExplorerValueMetric implements NameValue { export class TransactionExplorerValueMetric implements NameValue {
@@ -286,6 +287,7 @@ export class TransactionExplorerValueMetric implements NameValue {
public static readonly SourceAmountInterquartileRange = new TransactionExplorerValueMetric('Interquartile Range (Q3 - Q1)', TransactionExplorerValueMetricType.SourceAmountInterquartileRange, true, true); public static readonly SourceAmountInterquartileRange = new TransactionExplorerValueMetric('Interquartile Range (Q3 - Q1)', TransactionExplorerValueMetricType.SourceAmountInterquartileRange, true, true);
public static readonly SourceAmountVariance = new TransactionExplorerValueMetric('Variance', TransactionExplorerValueMetricType.SourceAmountVariance, false, false); public static readonly SourceAmountVariance = new TransactionExplorerValueMetric('Variance', TransactionExplorerValueMetricType.SourceAmountVariance, false, false);
public static readonly SourceAmountStandardDeviation = new TransactionExplorerValueMetric('Standard Deviation', TransactionExplorerValueMetricType.SourceAmountStandardDeviation, false, false); public static readonly SourceAmountStandardDeviation = new TransactionExplorerValueMetric('Standard Deviation', TransactionExplorerValueMetricType.SourceAmountStandardDeviation, false, false);
public static readonly SourceAmountCoefficientOfVariation = new TransactionExplorerValueMetric('Coefficient of Variation', TransactionExplorerValueMetricType.SourceAmountCoefficientOfVariation, false, false);
public static readonly Default = TransactionExplorerValueMetric.SourceAmountSum; public static readonly Default = TransactionExplorerValueMetric.SourceAmountSum;
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Kontoliste", "Account List": "Kontoliste",
"This Week": "Diese Woche", "This Week": "Diese Woche",
"This Month": "Dieser Monat", "This Month": "Dieser Monat",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Account List", "Account List": "Account List",
"This Week": "This Week", "This Week": "This Week",
"This Month": "This Month", "This Month": "This Month",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Lista de Cuentas", "Account List": "Lista de Cuentas",
"This Week": "Esta Semana", "This Week": "Esta Semana",
"This Month": "Este Mes", "This Month": "Este Mes",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Liste des comptes", "Account List": "Liste des comptes",
"This Week": "Cette semaine", "This Week": "Cette semaine",
"This Month": "Ce mois", "This Month": "Ce mois",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Elenco account", "Account List": "Elenco account",
"This Week": "Questa settimana", "This Week": "Questa settimana",
"This Month": "Questo mese", "This Month": "Questo mese",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "口座リスト", "Account List": "口座リスト",
"This Week": "今週", "This Week": "今週",
"This Month": "今月", "This Month": "今月",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "ಖಾತೆಗಳ ಪಟ್ಟಿ", "Account List": "ಖಾತೆಗಳ ಪಟ್ಟಿ",
"This Week": "ಈ ವಾರ", "This Week": "ಈ ವಾರ",
"This Month": "ಈ ತಿಂಗಳು", "This Month": "ಈ ತಿಂಗಳು",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "계좌 목록", "Account List": "계좌 목록",
"This Week": "이번 주", "This Week": "이번 주",
"This Month": "이번 달", "This Month": "이번 달",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Rekeningenlijst", "Account List": "Rekeningenlijst",
"This Week": "Deze week", "This Week": "Deze week",
"This Month": "Deze maand", "This Month": "Deze maand",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Lista de Contas", "Account List": "Lista de Contas",
"This Week": "Esta Semana", "This Week": "Esta Semana",
"This Month": "Este Mês", "This Month": "Este Mês",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Список счетов", "Account List": "Список счетов",
"This Week": "На этой неделе", "This Week": "На этой неделе",
"This Month": "В этом месяце", "This Month": "В этом месяце",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Seznam računov", "Account List": "Seznam računov",
"This Week": "Ta teden", "This Week": "Ta teden",
"This Month": "Ta mesec", "This Month": "Ta mesec",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "கணக்குகளின் பட்டியல்", "Account List": "கணக்குகளின் பட்டியல்",
"This Week": "இந்த வாரம்", "This Week": "இந்த வாரம்",
"This Month": "இந்த மாதம்", "This Month": "இந்த மாதம்",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "รายการบัญชี", "Account List": "รายการบัญชี",
"This Week": "สัปดาห์นี้", "This Week": "สัปดาห์นี้",
"This Month": "เดือนนี้", "This Month": "เดือนนี้",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Hesap Listesi", "Account List": "Hesap Listesi",
"This Week": "Bu Hafta", "This Week": "Bu Hafta",
"This Month": "Bu Ay", "This Month": "Bu Ay",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Список рахунків", "Account List": "Список рахунків",
"This Week": "Цього тижня", "This Week": "Цього тижня",
"This Month": "Цього місяця", "This Month": "Цього місяця",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "Interquartile Range (Q3 - Q1)",
"Variance": "Variance", "Variance": "Variance",
"Standard Deviation": "Standard Deviation", "Standard Deviation": "Standard Deviation",
"Coefficient of Variation": "Coefficient of Variation",
"Account List": "Danh sách tài khoản", "Account List": "Danh sách tài khoản",
"This Week": "Tuần này", "This Week": "Tuần này",
"This Month": "Tháng này", "This Month": "Tháng này",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "四分位距 (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "四分位距 (Q3 - Q1)",
"Variance": "方差", "Variance": "方差",
"Standard Deviation": "标准差", "Standard Deviation": "标准差",
"Coefficient of Variation": "变异系数",
"Account List": "账户列表", "Account List": "账户列表",
"This Week": "本周", "This Week": "本周",
"This Month": "本月", "This Month": "本月",
+1
View File
@@ -1792,6 +1792,7 @@
"Interquartile Range (Q3 - Q1)": "四分位距 (Q3 - Q1)", "Interquartile Range (Q3 - Q1)": "四分位距 (Q3 - Q1)",
"Variance": "變異數", "Variance": "變異數",
"Standard Deviation": "標準差", "Standard Deviation": "標準差",
"Coefficient of Variation": "變異係數",
"Account List": "帳戶清單", "Account List": "帳戶清單",
"This Week": "本週", "This Week": "本週",
"This Month": "本月", "This Month": "本月",
+17 -7
View File
@@ -128,6 +128,7 @@ export interface InsightsExplorerTransactionStatisticData {
interquartileRange: number; interquartileRange: number;
variance?: number; variance?: number;
standardDeviation?: number; standardDeviation?: number;
coefficientOfVariation?: number;
} }
export const useExplorersStore = defineStore('explorers', () => { export const useExplorersStore = defineStore('explorers', () => {
@@ -623,7 +624,8 @@ export const useExplorersStore = defineStore('explorers', () => {
range: 0, range: 0,
interquartileRange: 0, interquartileRange: 0,
variance: undefined, variance: undefined,
standardDeviation: undefined standardDeviation: undefined,
coefficientOfVariation: undefined
}; };
const sourceAmounts: number[] = []; const sourceAmounts: number[] = [];
@@ -701,6 +703,7 @@ export const useExplorersStore = defineStore('explorers', () => {
const sumOfSquaredDifferences: number = sourceAmounts.reduce((sum, amount) => sum + Math.pow(amount / 100.0 - averageAmountForVarianceCalculation, 2), 0); const sumOfSquaredDifferences: number = sourceAmounts.reduce((sum, amount) => sum + Math.pow(amount / 100.0 - averageAmountForVarianceCalculation, 2), 0);
statisticData.variance = sumOfSquaredDifferences / sourceAmounts.length; statisticData.variance = sumOfSquaredDifferences / sourceAmounts.length;
statisticData.standardDeviation = Math.sqrt(statisticData.variance); statisticData.standardDeviation = Math.sqrt(statisticData.variance);
statisticData.coefficientOfVariation = averageAmountForVarianceCalculation !== 0 ? statisticData.standardDeviation / averageAmountForVarianceCalculation : undefined;
} }
return statisticData; return statisticData;
@@ -851,14 +854,21 @@ export const useExplorersStore = defineStore('explorers', () => {
} else { } else {
value = 0; value = 0;
} }
} else if (valueMetric === TransactionExplorerValueMetric.SourceAmountVariance) { } else if (valueMetric === TransactionExplorerValueMetric.SourceAmountVariance || valueMetric === TransactionExplorerValueMetric.SourceAmountStandardDeviation || valueMetric === TransactionExplorerValueMetric.SourceAmountCoefficientOfVariation) {
const averageSourceAmountInDefaultCurrency = allSourceAmountsInDefaultCurrency.length > 0 ? totalSourceAmountSumInDefaultCurrency / allSourceAmountsInDefaultCurrency.length / 100.0 : 0; if (allSourceAmountsInDefaultCurrency.length > 0) {
const averageSourceAmountInDefaultCurrency = totalSourceAmountSumInDefaultCurrency / allSourceAmountsInDefaultCurrency.length / 100.0;
const sumOfSquaredDifferences = allSourceAmountsInDefaultCurrency.reduce((sum, amount) => sum + Math.pow(amount / 100.0 - averageSourceAmountInDefaultCurrency, 2), 0); const sumOfSquaredDifferences = allSourceAmountsInDefaultCurrency.reduce((sum, amount) => sum + Math.pow(amount / 100.0 - averageSourceAmountInDefaultCurrency, 2), 0);
value = allSourceAmountsInDefaultCurrency.length > 0 ? sumOfSquaredDifferences / allSourceAmountsInDefaultCurrency.length : 0;
if (valueMetric === TransactionExplorerValueMetric.SourceAmountVariance) {
value = sumOfSquaredDifferences / allSourceAmountsInDefaultCurrency.length
} else if (valueMetric === TransactionExplorerValueMetric.SourceAmountStandardDeviation) { } else if (valueMetric === TransactionExplorerValueMetric.SourceAmountStandardDeviation) {
const averageSourceAmountInDefaultCurrency = allSourceAmountsInDefaultCurrency.length > 0 ? totalSourceAmountSumInDefaultCurrency / allSourceAmountsInDefaultCurrency.length / 100.0 : 0; value = Math.sqrt(sumOfSquaredDifferences / allSourceAmountsInDefaultCurrency.length);
const sumOfSquaredDifferences = allSourceAmountsInDefaultCurrency.reduce((sum, amount) => sum + Math.pow(amount / 100.0 - averageSourceAmountInDefaultCurrency, 2), 0); } else if (valueMetric === TransactionExplorerValueMetric.SourceAmountCoefficientOfVariation) {
value = allSourceAmountsInDefaultCurrency.length > 0 ? Math.sqrt(sumOfSquaredDifferences / allSourceAmountsInDefaultCurrency.length) : 0; value = averageSourceAmountInDefaultCurrency !== 0 ? Math.sqrt(sumOfSquaredDifferences / allSourceAmountsInDefaultCurrency.length) / averageSourceAmountInDefaultCurrency : 0;
}
} else {
value = 0;
}
} }
dataItems.push({ dataItems.push({
@@ -104,6 +104,10 @@
<td>{{ tt('Standard Deviation') }}</td> <td>{{ tt('Standard Deviation') }}</td>
<td class="text-end">{{ isDefined(filteredTransactionsStatistic.standardDeviation) ? formatNumberToLocalizedNumerals(filteredTransactionsStatistic.standardDeviation, 2) : '-' }}</td> <td class="text-end">{{ isDefined(filteredTransactionsStatistic.standardDeviation) ? formatNumberToLocalizedNumerals(filteredTransactionsStatistic.standardDeviation, 2) : '-' }}</td>
</tr> </tr>
<tr>
<td>{{ tt('Coefficient of Variation') }}</td>
<td class="text-end">{{ isDefined(filteredTransactionsStatistic.coefficientOfVariation) ? formatNumberToLocalizedNumerals(filteredTransactionsStatistic.coefficientOfVariation, 2) : '-' }}</td>
</tr>
</tbody> </tbody>
</v-table> </v-table>
</v-tooltip> </v-tooltip>