Как в UniQuery узнать количество уникальных значений, найденных при выполнении BREAK.ON
Я знаю, что могу подсчитать количество отдельных записей в каждой уникальной группе записей с помощью следующего.
LIST CUSTOMER BREAK-ON CITY TOTAL EVAL "1" COL.HDG "Customer Count" TOTAL CUR_BALANCE BY CITY
И я получаю что-то вроде этого.
Cust...... City...... Customer Count Currently Owes
6 Arvada 1 4.54
********** -------------- --------------
Arvada 1 4.54
190 Boulder 1 0.00
1 Boulder 1 13.65
********** -------------- --------------
Boulder 2 13.65
...
============== ==============
TOTAL 29 85.28
29 records listed
Что становится этим после того, как мы уберем детали и сосредоточимся на самих группах.
City...... Customer Count Currently Owes
Arvada 1 4.54
Boulder 2 13.65
Chicago 3 4.50
Denver 6 0.00
...
============== ==============
TOTAL 29 85.28
29 records listed
Но могу ли я подсчитать, сколько уникальных группировок содержится в одном отчете? Что-то вроде этого.
City...... Customer Count Currently Owes City Count
Arvada 1 4.54 1
Boulder 2 13.65 1
Chicago 3 4.50 1
Denver 6 0.00 1
...
============== ============== ==========
TOTAL 29 85.28 17
29 records listed
По сути, я хочу, чтобы счетчик уникальных значений был интегрирован в другой отчет, чтобы мне не приходилось создавать дополнительный отчет только для чего-то настолько простого.
SELECT CUSTOMER SAVING UNIQUE CITY
17 records selected to list 0.
3 ответа
Клянусь, это должно быть проще. Я вижу в документации различные @-переменные, которые намекают на возможность сделать это легко, но я никогда не собирался заставлять одну из них работать.
Если ваши данные структурированы таким образом, что ваш идентификатор - это то, по чему вы будете группировать, а данные, которые вы хотите, хранятся в поле с разделителями значений, и вы не хотите включать или исключать что-либо, вы можете использовать что-то вроде следующего.
В UniVerse, используя таблицу CUSTOMER в демонстрационной учетной записи HS.SALES, установленной во многих системах, вы можете сделать это. CUSTID - это запись @ID, а атрибут 13 - это место, где PRICE хранится в массиве с разделителями значений.
LIST CUSTOMER BREAK-ON CUSTID TOTAL EVAL "DCOUNT(@RECORD<13>,@VM)" TOTAL PRICE AS P.PRICE BY CUSTID DET.SUP
Что выводит это.
DCOUNT(@RECORD<13>,@
Customer ID VM)................. P.PRICE
1 1 $4,200
2 3 $19,500
3 1 $4,250
4 1 $16,500
5 2 $3,800
6 0 $0
7 2 $5,480
8 2 $12,900
9 0 $0
10 3 $10,390
11 0 $0
12 0 $0
==================== =======
15 $77,020
Это немного сока для сильного отжима, но я надеюсь, что вы сочтете его полезным.
Удачи!
Я не предлагаю решение, но хочу отметить, что ключевое слово RetrieVe для счетчика — ENUM. TOTAL EVAL «1» — это ненужный мусор, по крайней мере, в U2.
LIST CUSTOMER BREAK.ON CITY ENUM @ID
Поскольку системная переменная @NB устанавливается только для итоговых строк, это позволит вашему счетчику рассчитать количество ИТОГО строк, которые встречаются для каждого уникального города, за исключением общей суммы.
LIST CUSTOMER BREAK-ON CITY TOTAL EVAL "IF @NB < 127 THEN 1 ELSE 0" COL.HDG "Customer Count" TOTAL CUR_BALANCE BY CITY
У меня нет системы, чтобы примерить это, но это мое понимание переменной.