Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
838efd1
Docs: add basic usage snippets to framework integration guides
marcin-kordas-hoc Apr 9, 2026
3afa99b
Implement DCOUNT database function
marcin-kordas-hoc Apr 10, 2026
6884afe
ci: retrigger
marcin-kordas-hoc Apr 10, 2026
f29ad00
ci: retrigger after tests PR created
marcin-kordas-hoc Apr 10, 2026
007a62f
Implement DSUM, DCOUNTA, DPRODUCT database functions
marcin-kordas-hoc Apr 10, 2026
2ea85fa
fixup! Implement DAVERAGE, DMAX, DMIN, DGET database functions
marcin-kordas-hoc Apr 10, 2026
3ae09c8
Implement DSTDEV, DSTDEVP, DVAR, DVARP database functions
marcin-kordas-hoc Apr 10, 2026
8470ad0
Implement all 12 database functions (D-functions family)
marcin-kordas-hoc Apr 10, 2026
70906ef
fix: remove unnecessary type assertions in DatabasePlugin (lint)
marcin-kordas-hoc Apr 10, 2026
b4fe776
Docs: add Database section to built-in-functions.md and nuances to kn…
marcin-kordas-hoc Apr 15, 2026
e630479
refactor: extract shared boilerplate in DatabasePlugin (DRY)
marcin-kordas-hoc Apr 16, 2026
e8cc25c
fix: remove Excel mention from known-limitations, trailing space
marcin-kordas-hoc Apr 16, 2026
e9560a0
ci: retrigger after tests repo rebase
marcin-kordas-hoc Apr 16, 2026
78f1daf
fix: Czech DCOUNT translation and boolean field coercion
marcin-kordas-hoc Apr 17, 2026
7498108
fix: guard resolveFieldIndex against non-finite indices
marcin-kordas-hoc Apr 17, 2026
96034e8
fix: propagate CellError from field and criteria arguments
marcin-kordas-hoc Apr 17, 2026
ad18e29
fix: Dutch DCOUNTA translation typo (DBAAANTALC -> DBAANTALC)
marcin-kordas-hoc Apr 17, 2026
b77c822
fix: Norwegian DCOUNT translation (ANTALLDB -> DANTALL)
marcin-kordas-hoc Apr 17, 2026
e599eae
fix: propagate CellError from field cells in D-function aggregations
marcin-kordas-hoc Apr 17, 2026
1dd7b10
fix: propagate CellError from field cells in DCOUNT and DCOUNTA too
marcin-kordas-hoc Apr 17, 2026
32ba518
fix: Polish diacritics + DGET CellError explicit guard
marcin-kordas-hoc Apr 17, 2026
b7a15f2
fix: correct D-function translations for cs, tr, da, pt per Microsoft…
marcin-kordas-hoc Apr 17, 2026
2b08000
fix: DGET multiple-match check takes priority over field CellError
marcin-kordas-hoc Apr 17, 2026
936496a
Fix: HF-85 revert framework integration guide changes (out of scope)
marcin-kordas-hoc Apr 28, 2026
bead1c3
Fix: HF-85 remove DGET/DMAX/DMIN/DPRODUCT bullets — these match Excel
marcin-kordas-hoc Apr 28, 2026
09a0585
Fix: HF-85 Russian DCOUNTA missing yo letter
marcin-kordas-hoc Apr 29, 2026
74c4397
Fix: HF-85 propagate CellError from criteria header cells
marcin-kordas-hoc Apr 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

### Added

- Added 12 database functions: DCOUNT, DSUM, DAVERAGE, DMAX, DMIN, DGET, DPRODUCT, DCOUNTA, DSTDEV, DSTDEVP, DVAR, DVARP. [#1652](https://github.com/handsontable/hyperformula/pull/1652)
- Added new functions: PERCENTILE, PERCENTILE.INC, PERCENTILE.EXC, QUARTILE, QUARTILE.INC, QUARTILE.EXC. [#1650](https://github.com/handsontable/hyperformula/pull/1650)
- Added `maxPendingLazyTransformations` configuration option to control memory usage by limiting accumulated transformations before cleanup. [#1629](https://github.com/handsontable/hyperformula/issues/1629)
- Added a new function: TEXTJOIN. [#1640](https://github.com/handsontable/hyperformula/pull/1640)
Expand Down
21 changes: 19 additions & 2 deletions docs/guide/built-in-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ The latest version of HyperFormula has an extensive collection of
**{{ $page.functionsCount }}** functions grouped into categories:

- [Array manipulation](#array-manipulation)
- [Database](#database)
- [Date and time](#date-and-time)
- [Engineering](#engineering)
- [Information](#information)
Expand All @@ -40,8 +41,7 @@ The latest version of HyperFormula has an extensive collection of
- [Statistical](#statistical)
- [Text](#text)

_Some categories such as compatibility, cube, and database are yet to be
supported._
_Some categories such as compatibility and cube are yet to be supported._

::: tip
You can modify the built-in functions or create your own, by adding a [custom function](custom-functions).
Expand Down Expand Up @@ -91,6 +91,23 @@ Total number of functions: **{{ $page.functionsCount }}**
| YEAR | Returns the year as a number according to the internal calculation rules. | YEAR(Number) |
| YEARFRAC | Computes the difference between two date values, in fraction of years. | YEARFRAC(Date2, Date1[, Format]) |

### Database

| Function ID | Description | Syntax |
|:------------|:----------------------------------------------------------------------------------------------------------------|:----------------------------------|
| DAVERAGE | Returns the average of all values in a database field that match the given criteria. | DAVERAGE(Database, Field, Criteria) |
| DCOUNT | Counts the cells containing numbers in a database field that match the given criteria. | DCOUNT(Database, Field, Criteria) |
| DCOUNTA | Counts the non-empty cells in a database field that match the given criteria. | DCOUNTA(Database, Field, Criteria) |
| DGET | Returns the single value from a database field that matches the given criteria. Returns #VALUE! if no records match, and #NUM! if more than one record matches. | DGET(Database, Field, Criteria) |
| DMAX | Returns the maximum value in a database field that matches the given criteria. | DMAX(Database, Field, Criteria) |
| DMIN | Returns the minimum value in a database field that matches the given criteria. | DMIN(Database, Field, Criteria) |
| DPRODUCT | Returns the product of all values in a database field that match the given criteria. | DPRODUCT(Database, Field, Criteria) |
| DSTDEV | Returns the sample standard deviation of all values in a database field that match the given criteria. | DSTDEV(Database, Field, Criteria) |
| DSTDEVP | Returns the population standard deviation of all values in a database field that match the given criteria. | DSTDEVP(Database, Field, Criteria) |
| DSUM | Returns the sum of all values in a database field that match the given criteria. | DSUM(Database, Field, Criteria) |
| DVAR | Returns the sample variance of all values in a database field that match the given criteria. | DVAR(Database, Field, Criteria) |
| DVARP | Returns the population variance of all values in a database field that match the given criteria. | DVARP(Database, Field, Criteria) |

### Engineering

| Function ID | Description | Syntax |
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/csCZ.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'ROK360',
DAYS: 'DAYS',
DB: 'ODPIS.ZRYCH',
DAVERAGE: 'DPRŮMĚR',
DCOUNT: 'DPOČET',
DCOUNTA: 'DPOČET2',
DGET: 'DZÍSKAT',
DMAX: 'DMAX',
DMIN: 'DMIN',
DPRODUCT: 'DSOUČIN',
DSTDEV: 'DSMODCH.VÝBĚR',
DSTDEVP: 'DSMODCH',
DSUM: 'DSUMA',
DVAR: 'DVAR.VÝBĚR',
DVARP: 'DVAR',
DDB: 'ODPIS.ZRYCH2',
DEC2BIN: 'DEC2BIN',
DEC2HEX: 'DEC2HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/daDK.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DAGE360',
DAYS: 'DAGE',
DB: 'DB',
DAVERAGE: 'DMIDDEL',
DCOUNT: 'DTÆL',
DCOUNTA: 'DTÆLV',
DGET: 'DHENT',
DMAX: 'DMAKS',
DMIN: 'DMIN',
DPRODUCT: 'DPRODUKT',
DSTDEV: 'DSTDAFV',
DSTDEVP: 'DSTDAFVP',
DSUM: 'DSUM',
DVAR: 'DVARIANS',
DVARP: 'DVARIANSP',
DDB: 'DSA',
DEC2BIN: 'DEC.TIL.BIN',
DEC2HEX: 'DEC.TIL.HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/deDE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'TAGE360',
DAYS: 'TAGE',
DB: 'GDA2',
DAVERAGE: 'DBMITTELWERT',
DCOUNT: 'DBANZAHL',
DCOUNTA: 'DBANZAHL2',
DGET: 'DBAUSZUG',
DMAX: 'DBMAX',
DMIN: 'DBMIN',
DPRODUCT: 'DBPRODUKT',
DSTDEV: 'DBSTDABW',
DSTDEVP: 'DBSTDABWN',
DSUM: 'DBSUMME',
DVAR: 'DBVARIANZ',
DVARP: 'DBVARIANZEN',
DDB: 'GDA',
DEC2BIN: 'DEZINBIN',
DEC2HEX: 'DEZINHEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/enGB.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DAYS360',
DAYS: 'DAYS',
DB: 'DB',
DAVERAGE: 'DAVERAGE',
DCOUNT: 'DCOUNT',
DCOUNTA: 'DCOUNTA',
DGET: 'DGET',
DMAX: 'DMAX',
DMIN: 'DMIN',
DPRODUCT: 'DPRODUCT',
DSTDEV: 'DSTDEV',
DSTDEVP: 'DSTDEVP',
DSUM: 'DSUM',
DVAR: 'DVAR',
DVARP: 'DVARP',
DDB: 'DDB',
DEC2BIN: 'DEC2BIN',
DEC2HEX: 'DEC2HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/esES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ export const dictionary: RawTranslationPackage = {
DAYS360: 'DIAS360',
DAYS: 'DÍAS',
DB: 'DB',
DAVERAGE: 'BDPROMEDIO',
DCOUNT: 'BDCONTAR',
DCOUNTA: 'BDCONTARA',
DGET: 'BDEXTRAER',
DMAX: 'BDMAX',
DMIN: 'BDMIN',
DPRODUCT: 'BDPRODUCTO',
DSTDEV: 'BDDESVEST',
DSTDEVP: 'BDDESVESTP',
DSUM: 'BDSUMA',
DVAR: 'BDVAR',
DVARP: 'BDVARP',
DDB: 'DDB',
DEC2BIN: 'DEC.A.BIN',
DEC2HEX: 'DEC.A.HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/fiFI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'PÄIVÄT360',
DAYS: 'PV',
DB: 'DB',
DAVERAGE: 'TKESKIARVO',
DCOUNT: 'TLASKE',
DCOUNTA: 'TLASKE.A',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Finnish DCOUNTA translation has incorrect dot separator

Medium Severity

The Finnish translation for DCOUNTA is 'TLASKE.A' (with a dot), but the correct Excel Finnish function name is 'TLASKEA' (without a dot). Users typing the correct Finnish name won't get the function recognized, and the registered name doesn't match Excel Desktop.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 465321f. Configure here.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False positive — Finnish Excel uses dot syntax in function names (e.g., LASKE.A for COUNTA, KESKIARVO.JOS for AVERAGEIF, LASKE.TYHJÄT for COUNTBLANK). TLASKE.A for DCOUNTA is consistent with this convention and matches Microsoft's official Finnish translation. The dot is intentional, not a separator typo.

DGET: 'TNOUDA',
DMAX: 'TMAKS',
DMIN: 'TMIN',
DPRODUCT: 'TTULO',
DSTDEV: 'TKESKIHAJONTA',
DSTDEVP: 'TKESKIHAJONTAP',
DSUM: 'TSUMMA',
DVAR: 'TVARIANSSI',
DVARP: 'TVARIANSSIP',
DDB: 'DDB',
DEC2BIN: 'DESBIN',
DEC2HEX: 'DESHEKSA',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/frFR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'JOURS360',
DAYS: 'JOURS',
DB: 'DB',
DAVERAGE: 'BDMOYENNE',
DCOUNT: 'BDNB',
DCOUNTA: 'BDNBVAL',
DGET: 'BDLIRE',
DMAX: 'BDMAX',
DMIN: 'BDMIN',
DPRODUCT: 'BDPRODUIT',
DSTDEV: 'BDECARTYPE',
DSTDEVP: 'BDECARTYPEP',
DSUM: 'BDSOMME',
DVAR: 'BDVAR',
DVARP: 'BDVARP',
DDB: 'DDB',
DEC2BIN: 'DECBIN',
DEC2HEX: 'DECHEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/huHU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DAYS360',
DAYS: 'NAPOK',
DB: 'DB',
DAVERAGE: 'AB.ÁTLAG',
DCOUNT: 'AB.DARAB',
DCOUNTA: 'AB.DARAB2',
DGET: 'AB.MEZŐ',
DMAX: 'AB.MAX',
DMIN: 'AB.MIN',
DPRODUCT: 'AB.SZORZAT',
DSTDEV: 'AB.SZÓRÁS',
DSTDEVP: 'AB.SZÓRÁS2',
DSUM: 'AB.SZUM',
DVAR: 'AB.VAR',
DVARP: 'AB.VAR2',
DDB: 'KCSA',
DEC2BIN: 'DEC.BIN',
DEC2HEX: 'DEC.HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/itIT.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'GIORNO360',
DAYS: 'GIORNI',
DB: 'AMMORT.FISSO',
DAVERAGE: 'DB.MEDIA',
DCOUNT: 'DB.CONTA.NUMERI',
DCOUNTA: 'DB.CONTA.VALORI',
DGET: 'DB.VALORI',
DMAX: 'DB.MAX',
DMIN: 'DB.MIN',
DPRODUCT: 'DB.PRODOTTO',
DSTDEV: 'DB.DEV.ST',
DSTDEVP: 'DB.DEV.ST.POP',
DSUM: 'DB.SOMMA',
DVAR: 'DB.VAR',
DVARP: 'DB.VAR.POP',
DDB: 'AMMORT',
DEC2BIN: 'DECIMALE.BINARIO',
DEC2HEX: 'DECIMALE.HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/nbNO.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DAGER360',
DAYS: 'DAGER',
DB: 'DAVSKR',
DAVERAGE: 'DGJENNOMSNITT',
DCOUNT: 'DANTALL',
DCOUNTA: 'DANTALLA',
DGET: 'DHENT',
DMAX: 'DMAKS',
DMIN: 'DMIN',
DPRODUCT: 'DPRODUKT',
DSTDEV: 'DSTDAV',
DSTDEVP: 'DSTDAVP',
DSUM: 'DSUMMER',
DVAR: 'DVARIANS',
DVARP: 'DVARIANSP',
DDB: 'DEGRAVS',
DEC2BIN: 'DESTILBIN',
DEC2HEX: 'DESTILHEKS',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/nlNL.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DAGEN360',
DAYS: 'DAGEN',
DB: 'DB',
DAVERAGE: 'DBGEMIDDELDE',
DCOUNT: 'DBAANTAL',
DCOUNTA: 'DBAANTALC',
DGET: 'DBLEZEN',
DMAX: 'DBMAX',
DMIN: 'DBMIN',
DPRODUCT: 'DBPRODUKT',
DSTDEV: 'DBSTDAFWIJKING',
DSTDEVP: 'DBSTDAFWIJKINGP',
DSUM: 'DBSOM',
DVAR: 'DBVAR',
DVARP: 'DBVARP',
DDB: 'DDB',
DEC2BIN: 'DEC.N.BIN',
DEC2HEX: 'DEC.N.HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/plPL.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DNI.360',
DAYS: 'DNI',
DB: 'DB',
DAVERAGE: 'BD.ŚREDNIA',
DCOUNT: 'BD.ILE.REKORDÓW',
DCOUNTA: 'BD.ILE.REKORDÓW.A',
DGET: 'BD.POLE',
DMAX: 'BD.MAX',
DMIN: 'BD.MIN',
DPRODUCT: 'BD.ILOCZYN',
DSTDEV: 'BD.ODCH.STANDARD',
DSTDEVP: 'BD.ODCH.STANDARD.POPUL',
DSUM: 'BD.SUMA',
DVAR: 'BD.WARIANCJA',
DVARP: 'BD.WARIANCJA.POPUL',
DDB: 'DDB',
DEC2BIN: 'DZIES.NA.DWÓJK',
DEC2HEX: 'DZIES.NA.SZESN',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/ptPT.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DIAS360',
DAYS: 'DIAS',
DB: 'BD',
DAVERAGE: 'BDMÉDIA',
DCOUNT: 'BDCONTAR',
DCOUNTA: 'BDCONTAR.VAL',
DGET: 'BDOBTER',
DMAX: 'BDMÁX',
DMIN: 'BDMÍN',
DPRODUCT: 'BDMULTIPL',
DSTDEV: 'BDDESVPAD',
DSTDEVP: 'BDDESVPADP',
DSUM: 'BDSOMA',
DVAR: 'BDVAR',
DVARP: 'BDVARP',
DDB: 'BDD',
DEC2BIN: 'DECABIN',
DEC2HEX: 'DECAHEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/ruRU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'ДНЕЙ360',
DAYS: 'ДНИ',
DB: 'ФУО',
DAVERAGE: 'БДСРЕДНЕЕ',
DCOUNT: 'БСЧЁТ',
DCOUNTA: 'БСЧЁТА',
DGET: 'БИЗВЛЕЧЬ',
DMAX: 'БДМАКС',
DMIN: 'БДМИН',
DPRODUCT: 'БДПРОИЗВЕД',
DSTDEV: 'БДСТАНДОТКЛ',
DSTDEVP: 'БДСТАНДОТКЛП',
DSUM: 'БДСУММ',
DVAR: 'БДДИСП',
DVARP: 'БДДИСПП',
DDB: 'ДДОБ',
DEC2BIN: 'ДЕС.В.ДВ',
DEC2HEX: 'ДЕС.В.ШЕСТН',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/svSE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'DAGAR360',
DAYS: 'DAYS',
DB: 'DB',
DAVERAGE: 'DMEDEL',
DCOUNT: 'DANTAL',
DCOUNTA: 'DANTALV',
DGET: 'DHÄMTA',
DMAX: 'DMAX',
DMIN: 'DMIN',
DPRODUCT: 'DPRODUKT',
DSTDEV: 'DSTDAV',
DSTDEVP: 'DSTDAVP',
DSUM: 'DSUMMA',
DVAR: 'DVARIANS',
DVARP: 'DVARIANSP',
DDB: 'DEGAVSKR',
DEC2BIN: 'DEC.TILL.BIN',
DEC2HEX: 'DEC.TILL.HEX',
Expand Down
12 changes: 12 additions & 0 deletions src/i18n/languages/trTR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ const dictionary: RawTranslationPackage = {
DAYS360: 'GÜN360',
DAYS: 'GÜNSAY',
DB: 'AZALANBAKİYE',
DAVERAGE: 'VSEÇORT',
DCOUNT: 'VSEÇSAY',
DCOUNTA: 'VSEÇSAYDOLU',
DGET: 'VAL',
DMAX: 'VSEÇMAK',
DMIN: 'VSEÇMİN',
DPRODUCT: 'VSEÇÇARP',
DSTDEV: 'VSEÇSTDSAPMA',
DSTDEVP: 'VSEÇSTDSAPMAS',
DSUM: 'VSEÇTOPLA',
DVAR: 'VSEÇVAR',
DVARP: 'VSEÇVARS',
DDB: 'ÇİFTAZALANBAKİYE',
DEC2BIN: 'DEC2BIN',
DEC2HEX: 'DEC2HEX',
Expand Down
Loading
Loading