日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python sqlserver 列名_报表自动化,三流用Excel,二流用Python,一流用它

發(fā)布時(shí)間:2025/3/15 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python sqlserver 列名_报表自动化,三流用Excel,二流用Python,一流用它 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從事數(shù)據(jù)工作的人都知道,企業(yè)每天都要做很多報(bào)表,這個(gè)過程當(dāng)中會(huì)涉及到很多手工操作和常規(guī)性報(bào)表。為了減少人工介入,節(jié)省工作時(shí)間,我們會(huì)想辦法將一部分操作用工具或代碼來替代,這個(gè)過程就稱為報(bào)表自動(dòng)化。

報(bào)表自動(dòng)化如何實(shí)現(xiàn)?

報(bào)表自動(dòng)化的起點(diǎn)是能對(duì)接數(shù)據(jù)源,期間能自動(dòng)化的生成事先設(shè)計(jì)好格式的報(bào)表,最終通過郵件自動(dòng)推送。具體流程可以分為3個(gè)步驟:

1、對(duì)接數(shù)據(jù)源:從數(shù)據(jù)庫或數(shù)據(jù)倉庫中取數(shù),生成原始數(shù)據(jù)sheet或其他工具對(duì)接所需要的數(shù)據(jù)文件格式。

2、設(shè)計(jì)報(bào)表框架:要展示哪些數(shù)據(jù)指標(biāo),什么樣的表頭格式,是否需要用到圖表、函數(shù)、空間等,最好手動(dòng)設(shè)計(jì)好報(bào)表的版式。

3、自動(dòng)化過程實(shí)現(xiàn):自動(dòng)化分為兩塊,自動(dòng)化的數(shù)據(jù)處理和自動(dòng)化發(fā)送郵件。

用什么工具實(shí)現(xiàn)?

實(shí)現(xiàn)的路徑有很多。精通Excel的可以通過寫VB腳本來實(shí)現(xiàn),如果你會(huì)Python那更好不過,Python可以實(shí)現(xiàn)很多自動(dòng)化設(shè)計(jì),可以從讀取到輸出數(shù)據(jù)一步到位。更直接的,可以用報(bào)表工具來實(shí)現(xiàn)。所謂三流用Excel,二流用Python,一流直接用現(xiàn)成的報(bào)表工具!

我之前做數(shù)據(jù)報(bào)表的流程,一般是先打開數(shù)據(jù)庫,然后運(yùn)行一段寫好的 SQL 語句,把數(shù)據(jù)查詢出來,然后再把數(shù)據(jù)復(fù)制到 Excel 中并制作報(bào)表。后面用了 Python 之后,很多工作都可以自動(dòng)化。再到后面公司上了BI報(bào)表系統(tǒng),做報(bào)表就更加自動(dòng)化和專業(yè)化了。

這里簡述下后兩者實(shí)現(xiàn)報(bào)表自動(dòng)化的方法。

Python報(bào)表自動(dòng)化

一次自動(dòng)化的報(bào)表制作,通常需要經(jīng)歷這樣幾個(gè)步驟:

  • 連接并操作數(shù)據(jù)庫
  • 利用Pandas進(jìn)行數(shù)據(jù)清洗和處理
  • 操作Excel并開發(fā)報(bào)表
  • 設(shè)置定時(shí)郵件發(fā)送給相關(guān)人員

1、連接并操作數(shù)據(jù)庫

Python可以連接并操作各種數(shù)據(jù)庫,包括 Oracle、PostgreSQL、MySQL、SQL Server 等等。不同的數(shù)據(jù)庫,需要安裝不同的第三方模塊,比如說,要操作 Oracle,那么通常需要先安裝 cx_Oracle:

pip install cx_Oracle

在開始操作數(shù)據(jù)庫之前,需要先創(chuàng)建一個(gè)數(shù)據(jù)庫引擎,然后再連接數(shù)據(jù)庫:

from sqlalchemy import create_engine# 創(chuàng)建數(shù)據(jù)庫引擎engine = create_engine('oracle://user:password@ip_address:1521/orcl')# 連接數(shù)據(jù)庫con = engine.connect()

如果你有數(shù)據(jù)庫賬號(hào)擁有創(chuàng)建表的權(quán)限,那么就可以對(duì)數(shù)據(jù)庫進(jìn)行增刪改查的操作。

# 增con.execute("insert into usr(id, name) values(1, 'Jim')")con.execute("insert into usr(id, name) values(2, 'Joe')")# 刪con.execute('delete from usr where id = 1')# 改con.execute("update usr set name = 'Jack' where id = 2")# 查sql = 'select id, name from usr where id = :id'import pandas as pddf = pd.read_sql(sa.text(sql), engine, params={'id': 2})df

另外,利用Python去執(zhí)行各種SQL 語句,自動(dòng)完成更加復(fù)雜的數(shù)據(jù)庫操作。

2、數(shù)據(jù)處理+自動(dòng)化報(bào)表

在Python執(zhí)行SQL后,取出以下原始數(shù)據(jù):

想要實(shí)現(xiàn)的報(bào)表如下,這張日?qǐng)?bào)表是用來監(jiān)控每一天的銷售、發(fā)貨和用戶反饋情況。

代碼如下:

# PART2 自動(dòng)化報(bào)表data = pd.read_excel(r'C:甥敳獲cindy407Desktopdelivery_data.xlsx',sheet_name='原始數(shù)據(jù)')# pandas行和列全部展示pd.options.display.max_rows=Nonepd.options.display.max_columns=None# 1、訂單、銷售金額、發(fā)貨訂單數(shù)df1 = data.groupby(['銷售時(shí)間'])['訂單號(hào)'].count() # 銷售訂單數(shù)df2 = data.groupby(['銷售時(shí)間'])[['數(shù)量','銷售金額']].sum() # 銷量和金額df3 = data.groupby(['銷售時(shí)間'])['交貨時(shí)間'].count() # 交貨訂單數(shù)# 2、發(fā)貨天數(shù)分布# 日期相加減,需先轉(zhuǎn)變成日期格式,使用applydata['銷售時(shí)間1'] = data['銷售時(shí)間'].apply(lambda x:datetime.strptime(x.replace('/','-'),'%Y-%m-%d'))data['交貨時(shí)間'] = data['交貨時(shí)間'].apply(lambda x:datetime.strptime(x.replace('/','-'),'%Y-%m-%d'))data['送貨時(shí)間'] = (data['交貨時(shí)間'] - data['銷售時(shí)間1']).apply(lambda x: x.days)# 連續(xù)型字段分成多區(qū)間,用pd.cutbin = [0,14,30,60,90,120]data['送貨天數(shù)'] = pd.cut(data['送貨時(shí)間'] ,bins=bin)# 按銷售時(shí)間維度進(jìn)行統(tǒng)計(jì)df4 = data.groupby(['銷售時(shí)間','送貨天數(shù)'])['銷售時(shí)間'].count().unstack()# 3、用戶反饋情況df5 = data.groupby(['銷售時(shí)間','貨品用戶反饋'])['銷售時(shí)間'].count().unstack()# 4、數(shù)據(jù)按列拼接df = pd.concat([df1,df2,df3,df4,df5],axis=1)# 5、修改列名df.columns=['銷售訂單數(shù)','銷售件數(shù)','銷售金額','已交貨訂單數(shù)','30-60天交貨占比','90-120天交貨占比','60-90天交貨占比','拒收比例','質(zhì)量合格比例','返修比例']# 6、將數(shù)值轉(zhuǎn)化成百分比df['60-90天交貨占比'] = df['60-90天交貨占比']/df['已交貨訂單數(shù)']df['90-120天交貨占比'] = df['90-120天交貨占比']/df['已交貨訂單數(shù)']df['30-60天交貨占比'] = df['30-60天交貨占比']/df['已交貨訂單數(shù)']df['拒收比例'] = df['拒收比例']/df['已交貨訂單數(shù)']df['質(zhì)量合格比例'] = df['質(zhì)量合格比例']/df['已交貨訂單數(shù)']df['返修比例'] = df['返修比例']/df['已交貨訂單數(shù)']# 7、將匯總和明細(xì)存入同一個(gè)EXCELwriter =pd.ExcelWriter(r'C:甥敳獲cindy407Desktopdaily_report.xlsx')df.to_excel(writer,sheet_name='匯總數(shù)據(jù)')data.to_excel(writer,sheet_name='明細(xì)數(shù)據(jù)',index=False)writer.save()

3、設(shè)置定時(shí)郵件發(fā)送給相關(guān)人員

以上就是一個(gè)典型的日?qǐng)?bào)表,源數(shù)據(jù)不變,報(bào)表格式不變,就可以通過這段腳本自動(dòng)生成,生成的報(bào)表也可以實(shí)現(xiàn)推送,利用Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件,使用發(fā)送郵件的協(xié)議SMTP,可以在郵箱的設(shè)置頁面中開啟SMTP。

用QQ郵箱來舉例,自動(dòng)化發(fā)郵件的完整代碼如下:

import smtplibfrom email import encoders?from email.header import Header?from email.mime.text import MIMEText?from email.utils import parseaddr,formataddr?from email.mime.application import MIMEApplication?from email.mime.multipart import MIMElMultipart?from email.mime.base import MIMEBase?asender='XXX@qq.com'#發(fā)件人郵箱areceiver='XXX@qq.com'#收件人郵箱acc='XXX@qq.com'#抄送人郵箱asubject='2020年XX月XX日?qǐng)?bào)表'#郵件主題from_addr='XXX@qq.com'#郵件主題password='XXXX'授權(quán)碼#郵件設(shè)置msg=MIMEMultipart()msg['Subject']=asubject?msg['to']=areceiver?msg['Cc']=acc?msg['from']='數(shù)據(jù)分析不是個(gè)事兒'#郵件正文body='您好,這是今天的數(shù)據(jù),請(qǐng)查收'#添加郵件正文msg.attach(MIMEText(body,'plain','utf-8'))#添加附件x1sxpart=MIMEApplication(open(r"C:甥敳獲AdministratorDesktop今日數(shù)據(jù)情況.x1sx",'rb').read())xlsxpart.add header('Content-Disposition',? ? ? ? ? ? ? ? ? ? ’attachment',? ? ? ? ? ? ? ? ? ? filename='今日數(shù)據(jù)情況.x1sx’)msg.attach(xlsxpart)#設(shè)置郵箱服務(wù)器地址以及端口smtp_server='smtp.qq.com'server=smtplib.SIMTP(smtp_server,25)server.set_debuglevel(1)#登錄郵箱server.login(from_addr,password)#發(fā)送郵件server.sendmail(from_addr,? ? ? ? ? ? ? ? areceiver.split(',')+acc.split','),? ? ? ? ? ? ? ? msg.as_string())server.quit()

做表的過程是通過python操作excel,這是很基礎(chǔ)的用法,更高級(jí)的做法是用pandas替代excel進(jìn)行處理再存入Excel。

以上,利用Python可以解決企業(yè)日常60%的報(bào)表自動(dòng)化。那剩余的40%呢?

一方面,并不是所有報(bào)表都是需要或者適合做自動(dòng)化的。像日?qǐng)?bào),周報(bào),這種頻率性很強(qiáng)的東西,就需要自動(dòng)化。而那些不同活動(dòng)的效果數(shù)據(jù),每次都不一樣,這樣的做自動(dòng)化就沒有太大意義。

另一方面,一些復(fù)雜的報(bào)表,尤其是非數(shù)據(jù)類的報(bào)表用Python開發(fā)也不適合。比如圖1這種報(bào)表格式很復(fù)雜的,用代碼憑空構(gòu)思難度很大;圖2一些用于打印貨單的憑證,需要涉及到數(shù)據(jù)填報(bào)和讀取;還有圖3這種能夠用于分析聯(lián)動(dòng)鉆取的動(dòng)態(tài)報(bào)表,開發(fā)量很大。

圖1

圖2

圖3

再者,如果說企業(yè)數(shù)據(jù)量涉及千萬上億條數(shù)據(jù),python加載數(shù)據(jù)就會(huì)卡頓。數(shù)據(jù)量大的企業(yè)報(bào)表需求量也大,一年可能要做上千張報(bào)表,用Python開發(fā)基本就是招程序員堆人力,這樣的研發(fā)做著做著離職率也是極高的,整體的效率就會(huì)成問題。

隨著機(jī)器變得越來越智能,許多工作都變得越來越自動(dòng)化,也會(huì)推動(dòng)著我們尋求更加敏捷的工具。其實(shí)市面上有很成熟的報(bào)表工具、報(bào)表控件可以用來開發(fā)報(bào)表,一旦企業(yè)數(shù)據(jù)業(yè)務(wù)成熟到一定階段,都會(huì)上這一套系統(tǒng),典型如FineReport

相比較Python,不要寫代碼,報(bào)表設(shè)計(jì)有類似Excel的可視界面。相比較Excel,可直接對(duì)接數(shù)據(jù)庫讀取寫入,能操作大數(shù)據(jù)量,性能可隨數(shù)據(jù)量適配。

報(bào)表工具實(shí)現(xiàn)報(bào)表自動(dòng)化

企業(yè)級(jí)的系統(tǒng)追求效率,要讓絕大多數(shù)沒有技術(shù)基礎(chǔ)的人能用,所以他們?cè)陂_發(fā)工具的時(shí)候就會(huì)將很多功能零代碼封裝好。那FineReport是怎么實(shí)現(xiàn)報(bào)表自動(dòng)化的呢?

簡述幾個(gè)報(bào)表自動(dòng)化的功能點(diǎn)吧

  • SQL可視界面連接并操作數(shù)據(jù)源
  • 可視化報(bào)表模板設(shè)計(jì)器
  • 自動(dòng)化的數(shù)據(jù)分發(fā)與提醒

1、可視化SQL語句編輯界面連接操作數(shù)據(jù)源

操作數(shù)據(jù)源無論是連接數(shù)據(jù)庫還是Excel,Python每次都要寫一串代碼。FineReport操作數(shù)據(jù)庫有一個(gè)可視化SQL語句編輯面板,在與數(shù)據(jù)庫鏈接成功后能看到數(shù)據(jù)庫表和字段,然后拖拽數(shù)據(jù)表和字段到編輯頁面就可以生成SQL語句。其也能對(duì)接各種數(shù)據(jù)庫和數(shù)據(jù)倉庫。也能導(dǎo)入Excel數(shù)據(jù)集、Jason數(shù)據(jù)集等。

SQL做數(shù)據(jù)的人都懂,有些人習(xí)慣在SQL里處理一些數(shù)據(jù),那就可以在取數(shù)環(huán)節(jié)處理一部分表和數(shù)據(jù),就像一個(gè)內(nèi)置的navicat。

2、可視化報(bào)表模板設(shè)計(jì)器,三種制作模式覆蓋所有報(bào)表類型

讀完庫取完數(shù)之后就是作報(bào)表。Excel做的是一個(gè)個(gè)單張報(bào)表,FineReport做的是一個(gè)個(gè)報(bào)表哦模板,也就是說一些固定化格式的報(bào)表就可以設(shè)計(jì)統(tǒng)一的報(bào)表模板樣式,一勞永逸,后續(xù)只要維護(hù)維護(hù)模板就好。

如圖,FineReport的主面板就是表格模板設(shè)計(jì)器,表格式、功能操作、函數(shù)等都類似Excel,不同點(diǎn)在于Excel是對(duì)單個(gè)數(shù)據(jù)操作,這里是對(duì)數(shù)據(jù)字段操作,將需要的數(shù)據(jù)字段拖到表格中,再配以各種可視化的屬性設(shè)置。

設(shè)計(jì)器針對(duì)有三種報(bào)表設(shè)計(jì)模式:普通報(bào)表、聚合報(bào)表、決策報(bào)表。

普通報(bào)表模式最貼近Excel,用來做大部分報(bào)表包括基礎(chǔ)報(bào)表、中國式復(fù)雜報(bào)表,運(yùn)算上能多SHEET和跨SHEET計(jì)算,兼容EXCEL公式。聚合報(bào)表模式用來做一些不規(guī)則的報(bào)表,像運(yùn)單表,一些保險(xiǎn)單之類的,這種報(bào)表要頻繁的合并、拆分單元格,工作極其繁瑣。決策報(bào)表模式用來做可視化儀表板、駕駛艙、管理看板等,就像一個(gè)空白畫布,把各種可視化圖表拖拽到界面搭建儀表板。

拖拽制作復(fù)雜報(bào)表

固定報(bào)表的查詢,可導(dǎo)出

可視化報(bào)表

3、自動(dòng)化的數(shù)據(jù)分發(fā)與提醒

FineReport是有一個(gè)平臺(tái)的,上面可以掛在報(bào)表,也有一些平臺(tái)功能,比如自動(dòng)化里常用到的報(bào)表推送,就可以用它的定時(shí)調(diào)度與消息提醒功能,就定時(shí)生成報(bào)表結(jié)果,將每日/每月的生產(chǎn)報(bào)表推送給對(duì)應(yīng)的人員。發(fā)送方式有郵件、短信、平臺(tái)、微信、釘釘?shù)取8静恍枰獙懘a。

報(bào)表自動(dòng)化只是FineReport的一部分特性,SQL編輯、報(bào)表頁面設(shè)計(jì)、參數(shù)查詢?cè)O(shè)計(jì)、填報(bào)設(shè)置、多層鉆取等基本都是不要寫代碼。相比excel和Python開發(fā),更快速和高效,配置好數(shù)據(jù),1到2個(gè)小時(shí)就可開發(fā)出一張報(bào)表。

最后

最后,咱們數(shù)據(jù)從業(yè)者要想避免淪為“取數(shù)工具”、“表哥”、“表姐”,勢必是要將報(bào)表工作自動(dòng)化的,這樣才能有更多的時(shí)間去思考和解決業(yè)務(wù)相關(guān)的問題,而不是陷入重復(fù)使用工具的手動(dòng)操作。

對(duì)于制作數(shù)據(jù)報(bào)表這項(xiàng)工作而言,其最終價(jià)值也是賦能業(yè)務(wù),所以需要從實(shí)際業(yè)務(wù)應(yīng)用場景出發(fā),去高效制作一套數(shù)據(jù)管理模版,并推動(dòng)業(yè)務(wù)方大大利用。這需要一個(gè)數(shù)據(jù)平臺(tái)來承接,需要報(bào)表工具來承擔(dān),也是企業(yè)利用數(shù)據(jù)道路上不可阻擋的趨勢。

總結(jié)

以上是生活随笔為你收集整理的python sqlserver 列名_报表自动化,三流用Excel,二流用Python,一流用它的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。