168 lines
6.1 KiB
SQL
168 lines
6.1 KiB
SQL
CREATE OR REPLACE VIEW analytics_1c.v_financial_reporting_readiness AS
|
|
SELECT
|
|
max(be.ts) AS last_event_at,
|
|
if(
|
|
countIf(be.event_kind = 'posting' OR be.debit_account != '' OR be.credit_account != '') > 0,
|
|
maxIf(be.ts, be.event_kind = 'posting' OR be.debit_account != '' OR be.credit_account != ''),
|
|
CAST(NULL, 'Nullable(DateTime)')
|
|
) AS last_ledger_event_at,
|
|
count() AS business_events_total,
|
|
countIf(be.document_type = 'CompanyActivitySnapshot' AND be.event_kind = 'document_snapshot') AS proxy_events_total,
|
|
countIf(be.event_kind = 'posting' OR be.debit_account != '' OR be.credit_account != '') AS ledger_events_total,
|
|
countIf(be.debit_account != '' OR be.credit_account != '') AS account_lines_total,
|
|
(SELECT count() FROM analytics_1c.postings) AS postings_table_rows,
|
|
(SELECT if(count() > 0, max(ts), CAST(NULL, 'Nullable(DateTime)')) FROM analytics_1c.postings) AS postings_table_last_ts,
|
|
multiIf(
|
|
countIf(be.event_kind = 'posting' OR be.debit_account != '' OR be.credit_account != '') > 0 OR (SELECT count() FROM analytics_1c.postings) > 0,
|
|
'ledger_ready',
|
|
countIf(be.document_type = 'CompanyActivitySnapshot' AND be.event_kind = 'document_snapshot') > 0,
|
|
'proxy_only',
|
|
'empty'
|
|
) AS readiness_status
|
|
FROM analytics_1c.business_events AS be;
|
|
|
|
CREATE OR REPLACE VIEW analytics_1c.v_financial_daily AS
|
|
SELECT
|
|
d,
|
|
infobase,
|
|
organization_name AS organization,
|
|
source_kind,
|
|
events_total,
|
|
documents_total,
|
|
amount_total
|
|
FROM
|
|
(
|
|
SELECT
|
|
toDate(ts) AS d,
|
|
infobase,
|
|
if(organization != '', organization, infobase) AS organization_name,
|
|
'ledger' AS source_kind,
|
|
count() AS events_total,
|
|
uniqExact(document_id) AS documents_total,
|
|
sum(amount) AS amount_total
|
|
FROM analytics_1c.business_events
|
|
WHERE event_kind = 'posting' OR debit_account != '' OR credit_account != ''
|
|
GROUP BY d, infobase, organization_name
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
toDate(ts) AS d,
|
|
infobase,
|
|
if(organization != '', organization, infobase) AS organization_name,
|
|
'proxy' AS source_kind,
|
|
count() AS events_total,
|
|
uniqExact(document_id) AS documents_total,
|
|
sum(amount) AS amount_total
|
|
FROM analytics_1c.business_events
|
|
WHERE event_kind = 'document_snapshot'
|
|
AND document_type = 'CompanyActivitySnapshot'
|
|
GROUP BY d, infobase, organization_name
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW analytics_1c.v_financial_company_current AS
|
|
SELECT
|
|
daily.infobase AS infobase,
|
|
argMax(ifNull(nullIf(companies.company_name, ''), daily.infobase), daily.d) AS company_name,
|
|
argMax(ifNull(nullIf(companies.organization, ''), daily.organization), daily.d) AS organization,
|
|
argMax(ifNull(nullIf(companies.owner_user, ''), ''), daily.d) AS owner_user,
|
|
sumIf(daily.amount_total, daily.source_kind = 'ledger' AND daily.d >= today() - 30) AS ledger_amount_30d,
|
|
sumIf(daily.events_total, daily.source_kind = 'ledger' AND daily.d >= today() - 30) AS ledger_events_30d,
|
|
sumIf(daily.documents_total, daily.source_kind = 'ledger' AND daily.d >= today() - 30) AS ledger_documents_30d,
|
|
sumIf(daily.amount_total, daily.source_kind = 'proxy' AND daily.d >= today() - 30) AS proxy_amount_30d,
|
|
sumIf(daily.events_total, daily.source_kind = 'proxy' AND daily.d >= today() - 30) AS proxy_events_30d,
|
|
sumIf(daily.documents_total, daily.source_kind = 'proxy' AND daily.d >= today() - 30) AS proxy_documents_30d,
|
|
if(
|
|
countIf(daily.source_kind = 'ledger' AND daily.d >= today() - 30) > 0,
|
|
maxIf(daily.d, daily.source_kind = 'ledger' AND daily.d >= today() - 30),
|
|
maxIf(daily.d, daily.source_kind = 'proxy' AND daily.d >= today() - 30)
|
|
) AS last_financial_day,
|
|
multiIf(
|
|
countIf(daily.source_kind = 'ledger' AND daily.d >= today() - 30) > 0, 'ledger_ready',
|
|
countIf(daily.source_kind = 'proxy' AND daily.d >= today() - 30) > 0, 'proxy_only',
|
|
'empty'
|
|
) AS readiness_status,
|
|
ifNull(changes.changes_30d, 0) AS changes_30d,
|
|
ifNull(changes.risky_changes_30d, 0) AS risky_changes_30d
|
|
FROM analytics_1c.v_financial_daily AS daily
|
|
LEFT JOIN analytics_1c.v_companies_current AS companies ON companies.infobase = daily.infobase
|
|
LEFT JOIN
|
|
(
|
|
SELECT
|
|
infobase,
|
|
count() AS changes_30d,
|
|
countIf(risk_tag != '') AS risky_changes_30d
|
|
FROM analytics_1c.document_change_events
|
|
WHERE ts >= now() - INTERVAL 30 DAY
|
|
GROUP BY infobase
|
|
) AS changes ON changes.infobase = daily.infobase
|
|
GROUP BY daily.infobase, ifNull(changes.changes_30d, 0), ifNull(changes.risky_changes_30d, 0);
|
|
|
|
CREATE OR REPLACE VIEW analytics_1c.v_financial_document_types_30d AS
|
|
SELECT
|
|
source_kind,
|
|
document_type,
|
|
operation_type,
|
|
count() AS events_total,
|
|
uniqExact(infobase) AS infobases_total,
|
|
sum(amount) AS amount_total
|
|
FROM
|
|
(
|
|
SELECT
|
|
ts,
|
|
infobase,
|
|
document_type,
|
|
operation_type,
|
|
amount,
|
|
'ledger' AS source_kind
|
|
FROM analytics_1c.business_events
|
|
WHERE ts >= now() - INTERVAL 30 DAY
|
|
AND (event_kind = 'posting' OR debit_account != '' OR credit_account != '')
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
ts,
|
|
infobase,
|
|
document_type,
|
|
operation_type,
|
|
amount,
|
|
'proxy' AS source_kind
|
|
FROM analytics_1c.business_events
|
|
WHERE ts >= now() - INTERVAL 30 DAY
|
|
AND event_kind = 'document_snapshot'
|
|
AND document_type = 'CompanyActivitySnapshot'
|
|
)
|
|
GROUP BY source_kind, document_type, operation_type;
|
|
|
|
CREATE OR REPLACE VIEW analytics_1c.v_financial_accounts_30d AS
|
|
SELECT
|
|
side,
|
|
account,
|
|
count() AS entries_total,
|
|
uniqExact(infobase) AS infobases_total,
|
|
sum(amount) AS amount_total
|
|
FROM
|
|
(
|
|
SELECT
|
|
infobase,
|
|
amount,
|
|
'debit' AS side,
|
|
debit_account AS account
|
|
FROM analytics_1c.business_events
|
|
WHERE ts >= now() - INTERVAL 30 DAY
|
|
AND debit_account != ''
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
infobase,
|
|
amount,
|
|
'credit' AS side,
|
|
credit_account AS account
|
|
FROM analytics_1c.business_events
|
|
WHERE ts >= now() - INTERVAL 30 DAY
|
|
AND credit_account != ''
|
|
)
|
|
GROUP BY side, account;
|