利用物化视图和Excel数据透视表.docx

上传人:b****9 文档编号:23347355 上传时间:2023-05-16 格式:DOCX 页数:14 大小:348.30KB
下载 相关 举报
利用物化视图和Excel数据透视表.docx_第1页
第1页 / 共14页
利用物化视图和Excel数据透视表.docx_第2页
第2页 / 共14页
利用物化视图和Excel数据透视表.docx_第3页
第3页 / 共14页
利用物化视图和Excel数据透视表.docx_第4页
第4页 / 共14页
利用物化视图和Excel数据透视表.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

利用物化视图和Excel数据透视表.docx

《利用物化视图和Excel数据透视表.docx》由会员分享,可在线阅读,更多相关《利用物化视图和Excel数据透视表.docx(14页珍藏版)》请在冰豆网上搜索。

利用物化视图和Excel数据透视表.docx

利用物化视图和Excel数据透视表

利用物化视图和Excel数据透视表

实现一卡通数据查询

师职门诊一卡通试用以来,院领导常需要有关体系外师职干部门诊就诊情况的有关信息,进而需要体系内的军人就诊情况,甚至包括同比和环比相关就诊信息情况。

这些需求,需要的数据是固定的,但展现的形式是不定的。

因此,不适合在下发的程序中固定,其实更确切地讲,这是一个初步的BI要求。

下文中,主要介绍如何结合ORACLE的物化视图和Excel的数据透视表(图)功能,实现上述要求并提供扩展空间。

一.物化视图

ORACLE的物化视图(MaterialedView)可用于预先计算保存连接或聚集等耗时较多的操作的结果。

这和军卫一号中医务统计中的统计中间表功能类似,但更灵活。

关于军人门诊就诊和门诊费用的统计,我们也可以将有关统计生成为物化视图,方面查询使用。

下面脚本以ORACLE10G为例,其它版本可自行调整。

为不影响HIS系统,我选择单建用户和表空间以方便今后的删除。

以DBA用户执行:

---建立存储表空间

CREATETABLESPACETSP_INSURANCE_SUMDATAFILE

'D:

\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_TSP_INSU_75H7Z9VT_.DBF'SIZE100MAUTOEXTENDONNEXT5MMAXSIZEUNLIMITED

NOLOGGING

DEFAULTCOMPRESS

ONLINE

PERMANENT

EXTENTMANAGEMENTLOCALUNIFORMSIZE10M

BLOCKSIZE8K

SEGMENTSPACEMANAGEMENTMANUAL

FLASHBACKOFF;

 

---建立用户

 

CREATEUSER"CARDSUM"IDENTIFIEDBY"CARDSUM"

DEFAULTTABLESPACETSP_INSURANCE_SUM

TEMPORARYTABLESPACETEMP

GRANTCREATEMATERIALIZEDVIEWTOCARDSUM;

GRANTCREATEPROCEDURETOCARDSUMWITHADMINOPTION;

GRANTSELECTANYTABLETOCARDSUM;

GRANTUNLIMITEDTABLESPACETOCARDSUM;

 

GRANT"CONNECT"TO"CARDSUM";

ALTERUSER"CARDSUM"DEFAULTROLE"CONNECT";

ALTERUSERCARDSUMQUOTAUNLIMITEDONTSP_INSURANCE_SUM;

 

以cardsum用户执行:

---判断是否是体系内外,通过判断帐号的体系医院和本院代码

/*Formattedon2011/08/2720:

27(FormatterPlusv4.8.6)*/

CREATEORREPLACEFUNCTIONgetserviceclass(

a_visit_dateDATE,

a_insurance_noVARCHAR2

RETURNVARCHAR2

IS

v_serviceclassVARCHAR2(30);

v_hospital_codehospital_config.unit_code%TYPE;--±¾Ôº´úÂë

v_inservicelistVARCHAR2

(1);

v_service_classVARCHAR2(29);

/******************************************************************************

NAME:

GetServiceClass

PURPOSE:

获取指定帐号的身份信息

参数:

a_visit_date就诊时间

a_insurance_no帐号

返回值:

第一字符标明是体系内(0)还是体系外

(1),第二个字符标明身份

REVISIONS:

VerDateAuthorDescription

----------------------------------------------------------------------

1.02011-8-141.Createdthisfunction.

NOTES:

AutomaticallyavailableAutoReplaceKeywords:

ObjectName:

GetServiceClass

Sysdate:

2011-8-14

DateandTime:

2011-8-14,10:

52:

27,and2011-8-1410:

52:

27

Username:

TableName:

(setinthe"NewPL/SQLObject"dialog)

******************************************************************************/

BEGIN

SELECTunit_code

INTOv_hospital_code

FROMhospital_config;

SELECTDECODE(designated_hospital,v_hospital_code,0,1),identity_class

INTOv_inservicelist,v_service_class

FROMinsurance_accounts

WHEREinsurance_no=a_insurance_no;

IFv_inservicelist=1

THEN--外体系

BEGIN

SELECTservice_class

INTOv_service_class

FROMoutp_card_bill_items

WHEREvisit_date=a_visit_date

ANDinsurance_no=a_insurance_no

ANDROWNUM=1;

EXCEPTION

WHENNO_DATA_FOUND

THEN

NULL;

END;

ENDIF;

v_serviceclass:

=v_inservicelist||v_service_class;

RETURNv_serviceclass;

EXCEPTION

WHENNO_DATA_FOUND

THEN

RETURN'1其它';

WHENOTHERS

THEN

--Considerloggingtheerrorandthenre-raise

RETURN'1其它';

ENDgetserviceclass;

/

---创建门诊就诊的物化视图

CREATEMATERIALIZEDVIEWcardsum.mv_card_clinic

TABLESPACEtsp_insurance_sum

STORAGE(

INITIAL10m

NEXT5m

NOCACHE

NOLOGGING

COMPRESS

NOPARALLEL

BUILDDEFERRED

REFRESHFORCEONDEMAND

STARTWITHTO_DATE('2011082823:

00:

00','yyyymmddhh24:

mi:

ss')

NEXTTRUNC(SYSDATE)-TO_NUMBER(TO_CHAR(SYSDATE-1,'d'))+7

AS

SELECTDECODE(SUBSTR(service_class,1,1),

'0','体系内',

'体系外'

)"体系内外",

SUBSTR(service_class,2,LENGTH(service_class)-1)"身份",

trunc(visit_date,'MM')"时间",COUNT(visit_no)"人次"

FROM(

SELECTvisit_date,visit_no,patient_id,insurance_no,insurance_type,

getserviceclass(visit_date,insurance_no)service_class

FROMclinic_master

WHEREvisit_date>TO_DATE('20110601','YYYYMMDD')

ANDcharge_type='军队医改'ANDinsurance_noISNOTNULL)

GROUPBYtrunc(visit_date,'MM'),service_class;

需要说明的是:

BUILDDEFERRED表示该物化视图不是立即更新数据,因为更新数据需要消耗较多系统资源,因此建议到数据库闲时操作。

STARTWITHTO_DATE('2011082823:

00:

00','yyyymmddhh24:

mi:

ss')表示2011-08-2823点才第一次更新,这个日期可以设为当日的午夜

NEXTTRUNC(SYSDATE)-TO_NUMBER(TO_CHAR(SYSDATE-1,'d'))+7表示下次更新是每周周六的午夜。

上述语句中的charge_type='军队医改’是我认为挂号记录着费别为'军队医改’的就是军人。

由于各地费别名称设置不同,这里需要大家依据实际情况设置.

如果需要立即刷新,可执行:

execdbms_mview.refresh('mv_card_clinic');

创建门诊明细的物化视图:

CREATEMATERIALIZEDVIEWcardsum.MV_CARD_BILLITEMS

TABLESPACEtsp_insurance_sum

STORAGE(

INITIAL10m

NEXT5m

NOCACHE

NOLOGGING

COMPRESS

NOPARALLEL

BUILDDEFERRED

REFRESHFORCEONDEMAND

STARTWITHTO_DATE('2011082823:

00:

00','yyyymmddhh24:

mi:

ss')

NEXTTRUNC(SYSDATE)-TO_NUMBER(TO_CHAR(SYSDATE-1,'d'))+7

AS

SELECTDECODE(SUBSTR(service_class,1,1),

'0','体系内',

'体系外'

)"体系内外",

SUBSTR(service_class,2,LENGTH(service_class)-1)"身份",

TRUNC(visit_date,'DD')"日期",patient_name"姓名",

class_name"类型",item_name"名称",item_spec"规格",amount"数量",

units"单位",costs"金额"

FROM(SELECTgetserviceclass(a.visit_date,c.insurance_no)service_class,

c.NAMEpatient_name,a.visit_date,item_class,d.class_name,

item_name,item_spec,amount,units,costs

FROMoutp_bill_itemsa,

outp_order_descb,

insurance_accountsc,

bill_item_class_dictd

WHEREa.visit_date=b.visit_date

ANDa.visit_no=b.visit_no

ANDa.visit_date>=TO_DATE('20110601','YYYYMMDD')

ANDb.patient_id=c.patient_id

ANDc.insurance_type='免费医疗'

ANDa.item_class=d.class_code);

同样c.insurance_type='免费医疗'我假设insurance_accounts中insurance_type为'免费医疗'是军人,具体情况,可自行修改SQL

二.使用EXCEL数据透视表(图)

以门诊就诊为例,按下图步骤:

 

 

 

 

 

 

 

 

 

 

同理,也可做成相同的数据透视图和针对收费明细的数据透视表(图)

 

以上内容仅供参考。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1