Анализ использования полей в базе данных
Функция GetDatabaseStat (исходный код приведен ниже) позволяет произвести анализ использования полей в заданной таблице на конкретной базе данных. На вход функции передается имя таблицы, на выходе имеем файл в формате HTML.
По умолчанию, файл создается в каталоге c:/temp и имеет имя result.html. Изменив значение локальной переменной FileName можно указать другое место размещения файла и его имя.
Ниже приведено описание колонок таблицы:
- Field name -- имя поля;
- IC -- Количество индексов по данному полю. Следует помнить, что создавать индекс имеет смысл, если колонка содержит множество уникальных значений;
- Distinct count -- Количество уникальных значений;
- NULL count -- Количество значений NULL;
- NULL % -- Процент пустых значений от общего количества записей. Неиспользуемые поля только засоряют базу данных;
- Most frequent value -- Значение, которое встречается чаще других;
- Most frequent count -- Количество записей с наиболее часто встречающимся значением;
- % -- Процент записей с наиболее часто встречающимся значением от общего количества непустых записей.
Ниже приведены данные для основных таблиц из реальной базы данных. Размер базы 2.5 Гб.
GD_GOOD
Record count: 567857
Field name | IC | Distinct count | NULL count | NULL % | Most frequent value | Most frequent count | % |
ACHAG | 0 | 5 | 0 | 0 | -4097 | 503959 | 89 |
AFULL | 0 | 5 | 0 | 0 | -4097 | 503959 | 89 |
ALIAS | 0 | 907 | 555325 | 98 | 8708999800 | 830 | 7 |
AVIEW | 0 | 5 | 0 | 0 | -4097 | 503959 | 89 |
BARCODE | 0 | 0 | 567857 | 100 | 0 | 0 | |
DESCRIPTION | 0 | 1 | 567856 | 100 | 1 | 1 | 100 |
DISABLED | 0 | 1 | 348 | 0 | 0 | 567509 | 100 |
DISCIPLINE | 0 | 2 | 558558 | 98 | F | 9298 | 100 |
EDITIONDATE | 0 | 29930 | 109299 | 19 | 17.11.1858 | 424550 | 93 |
EDITORKEY | 1 | 37 | 533840 | 94 | 148520664 | 9343 | 27 |
GROUPKEY | 1 | 23 | 0 | 0 | 147000008 | 539653 | 95 |
ID | 1 | 567857 | 0 | 0 | 147008659 | 1 | 0 |
ISASSEMBLY | 0 | 2 | 567851 | 100 | 0 | 3 | 50 |
NAME | 1 | 567799 | 0 | 0 | Административно-производственный корпус | 4 | 0 |
RESERVED | 0 | 2 | 29374 | 5 | 0 | 522079 | 97 |
SHORTNAME | 0 | 22 | 567629 | 100 | клей для стекол | 206 | 90 |
TNVDKEY | 1 | 2 | 567855 | 100 | 151570952 | 1 | 50 |
USR$COSTPOST | 0 | 58426 | 96131 | 17 | 572.46 | 1092 | 0 |
USR$CUSTOMNAME | 0 | 10059 | 537988 | 95 | Болт | 774 | 3 |
USR$DANGER | 0 | 2 | 567052 | 100 | 0 | 803 | 100 |
USR$DEMNAME | 1 | 39269 | 7839 | 1 | ABDECKUNG | 24992 | 4 |
USR$DISCOUNTGROUPE | 1 | 9 | 95509 | 17 | 160295983 | 334722 | 71 |
USR$DRT | 0 | 2 | 564784 | 99 | 1 | 2273 | 74 |
USR$FACTORY | 1 | 6 | 36298 | 6 | 147681262 | 269254 | 51 |
USR$INV_OLDCODE | 1 | 227 | 563406 | 99 | 01 | 3380 | 76 |
USR$INV_PERCKEY | 1 | 1 | 62990 | 11 | 152517521 | 504867 | 100 |
USR$INV_WEIGHT | 0 | 7767 | 28455 | 5 | 0 | 98401 | 18 |
USR$LAGORT | 0 | 347 | 559303 | 98 | 000 | 206 | 2 |
USR$LP | 1 | 61823 | 7860 | 1 | 438.6 | 1559 | 0 |
USR$MINCOUNT | 0 | 19 | 567209 | 100 | 10 | 241 | 37 |
USR$NOTINLP | 0 | 2 | 9689 | 2 | 0 | 487736 | 87 |
USR$PLASTICPACK | 1 | 3 | 42 | 0 | 2 | 567585 | 100 |
USR$RABATTGRUPPE | 1 | 9 | 7655 | 1 | 147681264 | 452720 | 81 |
USR$REGAL | 0 | 25 | 559340 | 99 | 01 | 1209 | 14 |
USR$RUSNAME | 0 | 9780 | 537686 | 95 | Болт | 810 | 3 |
USR$SEARCH | 1 | 564238 | 0 | 0 | Ключ комбинированный | 44 | 0 |
USR$SORT | 1 | 565475 | 0 | 0 | Ключ комбинированный | 44 | 0 |
USR$SPARTE | 1 | 8 | 16923 | 3 | 147682002 | 251855 | 46 |
USR$STAND | 0 | 36 | 559125 | 98 | 10 | 4389 | 50 |
USR$TNVED_POL | 0 | 3 | 567854 | 100 | 8415 | 1 | 33 |
USR$VP1 | 0 | 0 | 567857 | 100 | 0 | 0 | |
USR$VP2 | 0 | 0 | 567857 | 100 | 0 | 0 | |
USR$WC_DURABILITY | 0 | 0 | 567857 | 100 | 0 | 0 | |
VALUEKEY | 1 | 47 | 0 | 0 | 152125191 | 563752 | 99 |
INV_CARD
Record count: 889748
Field name | IC | Distinct count | NULL count | NULL % | Most frequent value | Most frequent count | % |
COMPANYKEY | 1 | 1 | 0 | 0 | 147000007 | 889748 | 100 |
DOCUMENTKEY | 1 | 826644 | 0 | 0 | 159754444 | 17 | 0 |
FIRSTDATE | 0 | 1895 | 0 | 0 | 31.08.2000 | 49208 | 6 |
FIRSTDOCUMENTKEY | 1 | 138768 | 0 | 0 | 150739700 | 1728 | 0 |
GOODKEY | 2 | 37502 | 0 | 0 | 147012725 | 3264 | 0 |
ID | 3 | 889748 | 0 | 0 | 148135910 | 1 | 0 |
PARENT | 1 | 567064 | 160576 | 18 | 151402497 | 922 | 0 |
RESERVED | 0 | 1 | 889352 | 100 | 99 | 396 | 100 |
USR$CHANGEGOOD | 1 | 2115 | 859222 | 97 | 148544677 | 338 | 1 |
USR$CLAIMKEY | 1 | 22659 | 184005 | 21 | 164916160 | 7189 | 1 |
USR$CODELIST | 1 | 4 | 844779 | 95 | 148507884 | 27580 | 61 |
USR$CONTRACTPRICE | 0 | 12915 | 276567 | 31 | 0.29 | 3541 | 1 |
USR$COUNTRYKEY | 1 | 59 | 783393 | 88 | 158702652 | 77070 | 72 |
USR$CURRATE | 0 | 472 | 374443 | 42 | 0 | 17328 | 3 |
USR$CUSTOM100 | 0 | 54714 | 235963 | 27 | 0 | 112549 | 17 |
USR$CUSTOM110 | 0 | 26296 | 235963 | 27 | 0 | 366312 | 56 |
USR$CUSTOM200 | 0 | 59063 | 235920 | 27 | 0 | 155494 | 24 |
USR$CUSTOM680 | 0 | 309 | 382079 | 43 | 0 | 502444 | 99 |
USR$CUSTOMERKEY | 1 | 7064 | 56799 | 6 | 148561340 | 508565 | 61 |
USR$DANGER | 0 | 6 | 374620 | 42 | 0 | 515111 | 100 |
USR$DIL_PRICE | 0 | 4142 | 851692 | 96 | 0.42 | 177 | 0 |
USR$EN_ORDERKEY | 0 | 6 | 629664 | 71 | 154412503 | 217764 | 84 |
USR$FA_AMORTTERM | 0 | 63 | 871846 | 98 | 10 | 4387 | 25 |
USR$FA_COMPLECTKEY | 2 | 0 | 889748 | 100 | 0 | 0 | |
USR$FA_CORRECTCOEFF | 0 | 3 | 877159 | 99 | 1 | 12579 | 100 |
USR$FA_DESTINATIONKEY | 1 | 2 | 877161 | 99 | 152120887 | 12484 | 99 |
USR$FA_GROUPKEY | 1 | 67 | 877161 | 99 | 152341679 | 3325 | 26 |
USR$FA_INVCARDKEY | 1 | 563 | 877189 | 99 | 152123743 | 51 | 0 |
USR$FA_METHODKEY | 1 | 3 | 877161 | 99 | 152115147 | 12349 | 98 |
USR$FA_OVERWEAR | 0 | 1 | 877159 | 99 | 0 | 12589 | 100 |
USR$FA_OWNINGKEY | 1 | 2 | 877161 | 99 | 152120894 | 12585 | 100 |
USR$FA_PRICENCU | 0 | 1006 | 877159 | 99 | 62930 | 380 | 3 |
USR$FA_REPAIRPERC | 0 | 26 | 877159 | 99 | 10 | 4721 | 38 |
USR$FA_RESOURCE | 0 | 1 | 889671 | 100 | 0 | 77 | 100 |
USR$FA_TYPEKEY | 1 | 3 | 877161 | 99 | 152120891 | 11982 | 95 |
USR$FA_USAGEKEY | 1 | 2 | 877161 | 99 | 152120896 | 12478 | 99 |
USR$FA_WEARACCKEY | 1 | 5 | 871846 | 98 | 156279675 | 9339 | 52 |
USR$FA_WEARCREDITACC | 1 | 3 | 871846 | 98 | 300201 | 12006 | 67 |
USR$FA_WEARSUMNCU | 0 | 13971 | 871844 | 98 | 0 | 654 | 4 |
USR$INSURANCE | 0 | 418 | 374617 | 42 | 0 | 450009 | 87 |
USR$INVOICECLKEY | 1 | 36032 | 747861 | 84 | 162064588 | 132 | 0 |
USR$INVOICEKEY | 1 | 1417 | 270250 | 30 | 150088780 | 49379 | 8 |
USR$INV_ACCOUNTKEY | 1 | 31 | 789846 | 89 | 156279715 | 62839 | 63 |
USR$INV_ADDLINEKEY | 1 | 97388 | 289869 | 33 | 150739700 | 1728 | 0 |
USR$INV_ADDNDS | 0 | 5 | 174726 | 20 | 20 | 355133 | 50 |
USR$INV_BILLLINEKEY | 1 | 10474 | 870816 | 98 | 165317742 | 19 | 0 |
USR$INV_BUYNDSNCU | 0 | 64392 | 329324 | 37 | 0 | 24773 | 4 |
USR$INV_CERTKEY | 1 | 0 | 889748 | 100 | 0 | 0 | |
USR$INV_COSTACCNCU | 0 | 58960 | 210726 | 24 | 0 | 19728 | 3 |
USR$INV_COSTBUYNCU | 0 | 58441 | 222872 | 25 | 0 | 19219 | 3 |
USR$INV_COSTFULLNCU | 0 | 26466 | 513852 | 58 | 2360 | 8469 | 2 |
USR$INV_COSTGLASSNCU | 0 | 1 | 889746 | 100 | 4.56 | 2 | 100 |
USR$INV_COSTNCU | 0 | 57614 | 652537 | 73 | 950 | 1585 | 1 |
USR$INV_COSTNDSNCU | 0 | 23941 | 780753 | 88 | 190 | 1136 | 1 |
USR$INV_COSTOILTAX | 0 | 0 | 889748 | 100 | 0 | 0 | |
USR$INV_COSTOPTNCU | 0 | 30815 | 233687 | 26 | 0 | 35586 | 5 |
USR$INV_COSTPROVIDER | 0 | 174 | 886634 | 100 | 3205 | 1728 | 55 |
USR$INV_COSTRETAILNCU | 1 | 13797 | 218510 | 25 | 0 | 36258 | 5 |
USR$INV_COSTSALETAX | 0 | 0 | 889748 | 100 | 0 | 0 | |
USR$INV_COSTTRADENCU | 0 | 14626 | 248125 | 28 | 0 | 36427 | 6 |
USR$INV_COSTTRWITHNDS | 0 | 14795 | 218714 | 25 | 0 | 36431 | 5 |
USR$INV_COSTWITHNDSNCU | 0 | 26710 | 662487 | 74 | 2248 | 3183 | 1 |
USR$INV_DATERECEIVE | 1 | 1354 | 277482 | 31 | 31.08.2000 | 49591 | 8 |
USR$INV_MOVEDOCKEY | 1 | 3673 | 884371 | 99 | 157157111 | 70 | 1 |
USR$INV_OPTDELIVERYKEY | 1 | 0 | 889748 | 100 | 0 | 0 | |
USR$INV_OPTPERC | 0 | 46 | 883865 | 99 | 0 | 5459 | 93 |
USR$INV_PACKKEY | 1 | 0 | 889748 | 100 | 0 | 0 | |
USR$INV_PERCPROVIDER | 0 | 29 | 889099 | 100 | 11.1111 | 326 | 50 |
USR$INV_PERCSELL | 0 | 46562 | 757592 | 85 | 29.98 | 2418 | 2 |
USR$INV_PROVIDER | 1 | 418 | 164510 | 18 | 148661301 | 490445 | 68 |
USR$INV_QUALITYKEY | 1 | 0 | 889748 | 100 | 0 | 0 | |
USR$INV_QUANTINPACK | 0 | 0 | 889748 | 100 | 0 | 0 | |
USR$INV_SELLNDS | 0 | 4 | 194996 | 22 | 18 | 377491 | 54 |
USR$INV_TAXSALE | 0 | 3 | 200258 | 23 | 5 | 678538 | 98 |
USR$INV_TRADEPERC | 0 | 5329 | 218716 | 25 | 29.98 | 290293 | 43 |
USR$KULANS | 0 | 0 | 889748 | 100 | 0 | 0 | |
USR$NOTFORSALE | 0 | 2 | 888834 | 100 | 0 | 734 | 80 |
USR$NUMPLACE | 0 | 408 | 570708 | 64 | 000 | 13664 | 4 |
USR$ORDERKEY | 1 | 5141 | 307721 | 35 | 164918679 | 6932 | 1 |
USR$ORDERSEQ | 1 | 239 | 307868 | 35 | 1 | 20913 | 4 |
USR$PRICEAIR | 0 | 1427 | 330473 | 37 | 0 | 506177 | 91 |
USR$PRICECLAIM | 0 | 7336 | 678693 | 76 | 0 | 5214 | 2 |
USR$PRICECURR | 0 | 19902 | 272504 | 31 | 0 | 20560 | 3 |
USR$PRICEPACK | 0 | 177 | 374620 | 42 | 0 | 509861 | 99 |
USR$PRICETOAVIA | 0 | 311 | 374620 | 42 | 0 | 489487 | 95 |
USR$PRICE_DC | 0 | 15 | 889729 | 100 | 137421.4618 | 3 | 16 |
USR$REGAL | 0 | 36 | 569496 | 64 | 06 | 44217 | 14 |
USR$REPORDERKEY | 2 | 22223 | 678207 | 76 | 160113774 | 864 | 0 |
USR$SALEPRICECURR | 0 | 1154 | 885558 | 100 | 0.84 | 89 | 2 |
USR$STAND | 0 | 48 | 562969 | 63 | 10 | 170565 | 52 |
USR$TNVDKEY | 1 | 0 | 889748 | 100 | 0 | 0 | |
USR$TOREPAIRKEY | 1 | 24252 | 732542 | 82 | 157424005 | 250 | 0 |
USR$WC_ACCOUNTINGMETHOD | 0 | 2 | 884433 | 99 | 4 | 4626 | 87 |
USR$WC_CARDNUM | 0 | 2 | 884436 | 99 | б/н | 2838 | 53 |
USR$WC_DISTRIBUTEDATE | 0 | 31 | 884433 | 99 | 31.03.2004 | 1086 | 20 |
USR$WC_STARTUPDOCKEY | 1 | 992 | 884433 | 99 | 159669676 | 65 | 1 |
GD_DOCUMENT
Record count: 1674651
Field name | IC | Distinct count | NULL count | NULL % | Most frequent value | Most frequent count | % |
ACHAG | 0 | 33 | 0 | 0 | -4097 | 501434 | 30 |
AFULL | 0 | 33 | 0 | 0 | -4097 | 501434 | 30 |
AVIEW | 0 | 26 | 0 | 0 | -4097 | 565354 | 34 |
COMPANYKEY | 1 | 1 | 0 | 0 | 147000007 | 1674651 | 100 |
CREATIONDATE | 0 | 1081716 | 0 | 0 | 10.09.2004 12:20:24 | 5692 | 0 |
CREATORKEY | 1 | 53 | 0 | 0 | 650002 | 449066 | 27 |
CURRKEY | 1 | 4 | 1608262 | 96 | 200010 | 66331 | 100 |
DELAYED | 0 | 2 | 1521417 | 91 | 0 | 147204 | 96 |
DESCRIPTION | 0 | 1400 | 1667425 | 100 | Сумма налога | 220 | 3 |
DISABLED | 0 | 2 | 1086 | 0 | 0 | 1673545 | 100 |
DOCUMENTDATE | 2 | 2196 | 0 | 0 | 19.04.2003 | 8969 | 1 |
DOCUMENTTYPEKEY | 4 | 81 | 0 | 0 | 152397963 | 205558 | 12 |
EDITIONDATE | 0 | 859029 | 0 | 0 | 02.10.2003 14:59:01 | 2456 | 0 |
EDITORKEY | 1 | 52 | 0 | 0 | 650002 | 455851 | 27 |
ID | 2 | 1674651 | 0 | 0 | 148135892 | 1 | 0 |
NUMBER | 1 | 217877 | 0 | 0 | 63885 | 4 | |
PARENT | 2 | 309473 | 433747 | 26 | 153038538 | 8684 | 1 |
PRINTDATE | 0 | 1606 | 1612536 | 96 | 14.03.2005 | 324 | 1 |
RESERVED | 0 | 0 | 1674651 | 100 | 0 | 0 | |
SUMCURR | 0 | 0 | 1674651 | 100 | 0 | 0 | |
SUMEQ | 0 | 1 | 343035 | 20 | 0 | 1331616 | 100 |
SUMNCU | 0 | 1073 | 1669563 | 100 | 0 | 404 | 8 |
TRANSACTIONKEY | 1 | 100 | 1324612 | 79 | 152427288 | 88768 | 25 |
TRTYPEKEY | 1 | 0 | 1674651 | 100 | 0 | 0 |
AC_RECORD
Record count: 347704
Field name | IC | Distinct count | NULL count | NULL % | Most frequent value | Most frequent count | % |
ACHAG | 0 | 20 | 0 | 0 | -1 | 197172 | 57 |
AFULL | 0 | 20 | 0 | 0 | -1 | 197172 | 57 |
AVIEW | 0 | 15 | 0 | 0 | -1 | 205147 | 59 |
COMPANYKEY | 1 | 1 | 0 | 0 | 147000007 | 347704 | 100 |
CREDITCURR | 0 | 1653 | 0 | 0 | 0 | 345573 | 99 |
CREDITNCU | 0 | 101429 | 0 | 0 | 18000 | 1514 | 0 |
DEBITCURR | 0 | 1795 | 0 | 0 | 0 | 345360 | 99 |
DEBITNCU | 0 | 101477 | 0 | 0 | 18000 | 1514 | 0 |
DELAYED | 0 | 1 | 0 | 0 | 0 | 347704 | 100 |
DESCRIPTION | 0 | 108288 | 69639 | 20 | Работы по ремонтному заказу | 15040 | 5 |
DISABLED | 0 | 1 | 0 | 0 | 0 | 347704 | 100 |
DOCUMENTKEY | 2 | 252943 | 0 | 0 | 167527882 | 9 | 0 |
ID | 2 | 347704 | 0 | 0 | 156297555 | 1 | 0 |
INCORRECT | 0 | 2 | 0 | 0 | 0 | 346019 | 100 |
MASTERDOCKEY | 1 | 131375 | 0 | 0 | 157030874 | 886 | 0 |
RECORDDATE | 1 | 1090 | 0 | 0 | 30.04.2004 | 2555 | 1 |
RESERVED | 0 | 0 | 347704 | 100 | 0 | 0 | |
TRANSACTIONKEY | 1 | 99 | 0 | 0 | 152531062 | 55298 | 16 |
TRRECORDKEY | 1 | 87 | 0 | 0 | 156356257 | 55296 | 16 |
INV_MOVEMENT
Record count: 1802716
Field name | IC | Distinct count | NULL count | NULL % | Most frequent value | Most frequent count | % |
CARDKEY | 2 | 839215 | 0 | 0 | 151402497 | 923 | 0 |
CONTACTKEY | 5 | 11969 | 0 | 0 | 148477348 | 524784 | 29 |
CREDIT | 0 | 1301 | 0 | 0 | 0 | 900100 | 50 |
DEBIT | 0 | 1298 | 0 | 0 | 0 | 903039 | 50 |
DISABLED | 0 | 2 | 0 | 0 | 0 | 1802686 | 100 |
DOCUMENTKEY | 1 | 887573 | 0 | 0 | 159754444 | 34 | 0 |
GOODKEY | 2 | 33808 | 0 | 0 | 147012725 | 7440 | 0 |
ID | 1 | 1802716 | 0 | 0 | 148135913 | 1 | 0 |
MOVEMENTDATE | 4 | 2178 | 0 | 0 | 31.08.2002 | 16848 | 1 |
MOVEMENTKEY | 2 | 910104 | 0 | 0 | 148135911 | 2 | 0 |
RESERVED | 0 | 0 | 1802716 | 100 | 0 | 0 |
GetDatabaseStat
option explicit ' Входящий параметр ATableName строковый! sub GetDatabaseStat(ATableName) ' изменить значение переменной, если ' Вы хотите, чтобы результат выполнения ' функции располагался в другом месте Dim FileName FileName = "c:\temp\result.html" ATableName = UCase(ATableName) Dim Fields call gdcBaseManager.ExecSingleQueryResult(_ "SELECT f.rdb$field_name FROM rdb$relation_fields f " &_ " JOIN rdb$fields d ON d.rdb$field_name = f.rdb$field_source " &_ "WHERE f.rdb$relation_name = :RN AND d.rdb$computed_blr IS NULL AND d.rdb$segment_length IS NULL " &_ "ORDER BY 1",_ ATableName, Fields, nil) if IsEmpty(Fields) then exit sub Dim Field, Stat, FieldStat, Res, TotalCount call gdcBaseManager.ExecSingleQueryResult(_ "SELECT COUNT(*) FROM " & ATableName, 0, Res, nil) TotalCount = Res(0, 0) Set Stat = CreateObject("Scripting.Dictionary") For Each Field in Fields Set FieldStat = CreateObject("Scripting.Dictionary") call gdcBaseManager.ExecSingleQueryResult(_ "SELECT COUNT(s.rdb$index_name) FROM rdb$index_segments s " &_ " JOIN rdb$indices i ON i.rdb$index_name = s.rdb$index_name " &_ "WHERE s.rdb$field_name = :FN AND i.rdb$relation_name = :RN", _ Array(Field, ATableName), Res, nil) FieldStat.Add "IC", Res(0, 0) call gdcBaseManager.ExecSingleQueryResult(_ "SELECT COUNT(DISTINCT " & Field & ") FROM " & ATableName,_ 0, Res, nil) FieldStat.Add "DC", Res(0, 0) call gdcBaseManager.ExecSingleQueryResult(_ "SELECT COUNT(*) FROM " & ATableName & " WHERE " & Field & " IS NULL ",_ 0, Res, nil) FieldStat.Add "NC", Res(0, 0) FieldStat.Add "NP", CInt(Res(0, 0) / TotalCount * 100) call gdcBaseManager.ExecSingleQueryResult(_ "SELECT FIRST 1 " & Field & ", COUNT(" & Field & ") FROM " & ATableName &_ " GROUP BY " & Field & " ORDER BY 2 DESC ",_ 0, Res, nil) FieldStat.Add "FV", Res(0, 0) FieldStat.Add "FC", Res(1, 0) if Res(1, 0) = 0 then FieldStat.Add "FP", 0 else FieldStat.Add "FP", CInt(Res(1, 0) / (TotalCount - FieldStat.Item("NC")) * 100) end if Stat.Add Field, FieldStat Next Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile= fso.CreateTextFile(FileName, True) MyFile.WriteLine("<html><head></head><body>") MyFile.WriteLine("<h1>" & ATableName & "</h1>") MyFile.WriteLine("Record count: " & TotalCount & "<p/>") MyFile.WriteLine("<table border=""1""><tr><td>Field name</td><td>IC</td><td>Distinct count</td><td>NULL count</td><td>NULL %</td><td>Most frequent value</td><td>Most frequent count</td><td>%</td></tr>") Dim S, F, R, I For Each F In Stat S = "<tr><td>" & F & "</td>" Set I = Stat.Item(F) For Each R In I S = S & "<td>" & I.Item(R) & "</td>" Next S = S & "</tr>" MyFile.WriteLine(S) Next MyFile.WriteLine("</table></body></html>") MyFile.Close end sub
06.11.2006