Ⅰ java導出報表70多個欄位sql比較復雜,有沒有什麼好的實現工具,能保證報錶速度(排除sql外)
您好,用SSAS吧,都有.
我們公司系統是這樣實現的.
1.用一個函數得到一個明細表,該明細表包括用戶感興趣的各個維度,並且該函數的參數是用戶感興趣的查詢條件.
2.按用戶要求先將用戶需要的維度列出來,比如說按時間斷,按商品類型,按門店,地區等等.然後給每一種方式在第1步的基礎上動態生成SQL語句.至於交叉,就要先從第一步中獲取交叉值列表,比如說按地區交叉,則先從第一步的表中將所有的地區查出,再用case when生成動態的行列轉換語句.
3.一般來說,用前兩步就已經能達到用戶的要求,我們公司還有一個數據分析的圖形化工具,也是在第一步的基礎上,由用戶自定義維度和深度的,實現方法就不知道了,應該是mdx來的
簡單舉個例子,比如說要對公司銷售數據進行統計,維度包括 時間,地區,商品品牌,查詢銷量,銷售金額
那可以用一個函數 fn_getSales(beginday,endday,area,matgroup),四個參數由用戶在界面上選擇或輸入,函數從銷售明細表中返回一個表,包含 時間(day),區域(area),商品品牌(brand),銷量(digit),銷售金額(totalmoney)的明細數據表.
統計的話,比如說要按商品品牌分組,那隻要生成動態語句:
select matgroup,sum(digit),sum(totalmoney) from fn_getSales(beginday,endday,area,matgroup) group by matgroup即可.
如果要按地區進行交叉,按商品品牌分組的統計數據,則先取得地區列表
select area from fn_getSales(beginday,endday,area,matgroup) group by area
將得到的area記錄下來,到一個數組,或到一個臨時表都行
然後拼裝行列轉換的SQL語句
select matgroup,
sum(case 地區1 then digit else 0 end) as 地區1銷量,
sum(case 地區1 then totalmoney else 0 end) as 地區1銷售金額,
sum(case 地區2 then digit else 0 end) as 地區2銷量,
sum(case 地區2 then totalmoney else 0 end) as 地區2銷售金額,
....循環將所有的地區這樣列出
from fn_getSales(beginday,endday,area,matgroup)
這樣就得到了每一種商品在每個地區的銷量和銷售金額分布情況
如果這種東西寫多了你就會發現完全可以將拼裝方法固定下來,都是有規律的,你可以寫一個專門用於拼裝SQL的類,這時候就會很容易了。
Ⅱ 現有MYSQL資料庫,如果要製作復雜的EXCEL報表改怎麼辦
如果你會製作復雜的EXCEL報表,那剩下的問題就是怎樣把MYSQL資料庫的數據導到EXCEL里了,這一般需要編寫一個程序將把MYSQL資料庫的數據導到EXCEL里(要是這個程序不會寫那就上網搜搜看能不能搜到,或者再發一個問題問,或者請會的人寫)。
如果你把MYSQL資料庫的數據導到EXCEL里之後還是不會製作復雜的EXCEL報表,那你就要好好學學EXCEL報表的製作了。
Ⅲ 快逸報表中復雜sql怎麼使用參數進行判斷
做報表的時候需要寫SQL語句,你的SQL語句應該包含你定義的變數,估計你是定義了參數,但並沒有把參數用在SQL中 看看你的SQL和你的參數
Ⅳ SQL 統計報表
-- create sample table
create table tab1 (id int, output_style char(1), amount int, output_date date);
insert into tab1 values(1,'D',1000,'2009-11-12');
insert into tab1 values(2,'C',1000,'2009-11-12');
insert into tab1 values(3,'G',1000,'2009-12-12');
insert into tab1 values(4,'Z',1000,'2010-01-01');
insert into tab1 values(5,'D',1300,'2009-11-12');
insert into tab1 values(6,'C',1400,'2009-11-12');
insert into tab1 values(7,'G',2000,'2009-12-12');
insert into tab1 values(8,'Z',1000,'2010-01-01');
-- query
select concat(year(output_date), month(output_date)) as yearmonth,
sum(case when output_style='C' then amount else 0 end) as C_Amount,
sum(case when output_style='G' then amount else 0 end) as G_Amount,
sum(case when output_style='Z' then amount else 0 end) as Z_Amount,
sum(case when output_style='D' then amount else 0 end) as D_Amount from tab1 group by output_date
Ⅳ 寫復雜SQL語句能力(電信行業報表SQL)
首先,我想說的是千萬不要太著急,復雜的東西都是從簡單開始的,你現在基本的東西都已經掌握了,現在主要是把基本的東西怎麼組合起來。我也是在移動做運維的。剛開始情況跟你是一樣的。
然後在看復雜SQL時,最好是能知道這個SQL是要完成什麼目標的。(以下是我個人的方法)先看from,再看select的內容,再看where條件,對於group by ,join 可以更具select的內容一個一個的去看關聯,如果太多可以用筆記一下。(不要想著能把所有腳本內容都能熟悉,我猜你們那的腳本也是經過很多人完成的,一個人一個思想,自己去琢磨別人的思想,確實比較難)。查找SQL問題要多看日誌,從日誌去定位出問題的腳本位置,慢慢的看的遍數多了,你也就熟悉了。(還是要說一下,千萬不要急,每個人都是從不會到會,再到精通的)。
對於各種處理欄位的函數,一定要多在網上搜一下,多理解一下這個函數的作用,這樣才能靈活運用。
shell腳本的編寫,可以先看一下基礎教程,網上很多的,然後編寫一下練習題,多看一下你們公司現有的資源,然後對照著你不懂的腳本,再去網上或書上去找答案,這樣會加深你的理解。
先說到這吧,希望能對你有點幫助,有問題可以再互相溝通。(千萬不要急奧,向著自己的目標前進吧。)
Ⅵ 用SQL查詢報表
#我看了你的描述,也沒給出表與表之間的關系和欄位,以我的理解後,寫出以下sql語句,經過測試,可以執行成功
#FeeTable:生活費表包含(學生信息表)也就是外鍵
#Student:學生信息表包含(班級信息表)也就是外鍵
#Greade:班級信息表
select
s.nameas學生名稱,
g.nameas班級名稱,
s.genderas學生性別,
s.teacheras招生老師,
f.liveFeeDateas生活費日期,
f.liveFeeas生活費,
f.sleepFeeDateas住宿費日期,
f.sleepFeeas住宿費,
fareFeeDateas校車費日期,
fareFeeas校車費,
(f.liveFee+f.sleepFee+fareFee)as費用合計
.id=f.studentinnerjoinGreadegons.greade=g.id
groupbys.name,g.name,s.gender,s.teacher,f.liveFeeDate,f.liveFee,f.sleepFeeDate,f.sleepFee,fareFeeDate,fareFee
以上SQL語句要結合你的表結構來適當調整表名、欄位、和關聯。
希望能幫到你!
Ⅶ 如何使用報表工具創建復雜的動態查詢
默認情況下,變數列表的類型只有在數據源字典連接後才會被填充。因此,在第一次連接的時候,該變數為空。表達式Variable1.ToQueryString()拋出一個空字元串,整個查詢會拋出錯誤。了避免這種情況,我們需要一個額外的檢查步驟。
在報表開發工具中使用動態SQL查詢功能
在這個例子中,所有的數據將會顯示,在你單擊按鈕提交(Submit),該報表將只使用選定的數據進行重建。
當你只需要瀏覽需要數據時,可以做以下操作:
1、設置報表屬性report.RequestParameters為true。點擊提交按鈕前,空報表頁會被顯示,點擊後渲染開始。
2、用附加值初始化報表變數。
本回答由網友推薦
Ⅷ 如何解決報表的 SQL 植入風險
SQL 注入或者 SQL 植入是 WEB 應用程序與資料庫交互過程中,由於對用戶輸入數據的合法性、規范性檢測做的不嚴而導致的一種常見的漏洞,這種漏洞如果被攻擊者加以利用,在查詢語句的結尾添加非法的 SQL 語句,就能進行非法的查詢,會導致數據泄露,風險很大
報表應用作為一個 WEB 應用,同樣會面臨這樣的風險
為了解決普通參數查詢不靈活,不自由的問題,很多報表工具開放了動態拼 SQL 的功能,允許 SQL 中進行子句替換,類似這樣:
SELECT … FROM T WHERE ${w}
w 就是可以根據用戶需求隨意拼的,比如 data>… AND date<=… AND area=…
這樣查詢就靈活多了,但是風險也就來了,這個 w 就會有 SQL 注入的隱患,比如:
SELECT … FROM T WHERE 1=0 UNION SELECT … FROM user
這是一句可執行的合法 SQL,但 user 表中的信息就被泄露了
怎麼樣解決這個問題呢?
1 盡量使用普通的 SQL 參數,不要動態拼 SQL
這樣做,雖然靈活度差一點,但安全
有些報表工具不支持普通 SQL 參數,只提供拼 SQL 的方案,方便是方便了,但就要小心了
2 需要通用查詢時,寫復雜一點的 SQL
比如:
SELECT … FROM T WHERE (${w})
SELECT … FROM T WHERE (${w}) OR ${w}
這樣做有一定的效果,但是並不完美,有些時候也防不住,而且 SQL 復雜後,會影響執行效率
3 再檢查關鍵字
通常通用查詢的條件不會有這些 select,from 等關鍵字,所以可以通過過濾這些關鍵字來防範風險,不讓參數中有這些關鍵字的 SQL 執行,雖然這樣做有時候會失去一些靈活性,但是安全性卻更高了
潤乾報表把這些都做好了,直接用就可以了
我們就以潤乾報表為例,來簡單看一下實現步驟
部署潤乾報表後,在應用目錄下找到 **raqsoftConfig.xml ** 文件,配置敏感詞列表
屬性名:disallowedParamWordList,value 為禁用敏感詞列表,多個之間用逗號分隔,英文字母不區分大小寫
配置列表以後,如果訪問的 URL 中再出現敏感詞,就會提示出錯了,減少風險的發生
http://localhost:6868/demo/reportJsp/showReport.jsp?rpx=a.rpx&arg2= 華北 union select * from users
是的就這么簡單,在一個已經提供了防止 SQL 注入的工具中,就是這么輕松一步設置就可以規避風險了,所以選型的時候,多問問,看看各廠商是否能解決這問題,怎麼解決的,否則就得自己去費勁去修補這個漏洞了
更詳細的操作以及其他解決方式請參考: 報表的 SQL 植入風險及規避方法 - 乾學院
Ⅸ SQL 怎麼建立報表
use pubs if exists (select * from sysobjects where name = 'BonusPenalty_info') drop table BonusPenalty_infocreate table BonusPenalty_info([id] nvarchar(20) primary key,[name] nvarchar(20) not null,BonusPenalty_Time nvarchar(50) not null,BonusPenalty_sort nvarchar(50) not null,BonusPenalty_content nvarchar(50) not null,Approve nvarchar(50) not null,RecallCause nvarchar(50) not null,BonusPenalty_Cause nvarchar(50) not null,Remark nvarchar(50) not null,Dept nvarchar(50) not null,)select * from BonusPenalty_info
Ⅹ 業務人員不會寫sql,稍微復雜一些的報表就做不出來怎麼辦
很正常,業務人員對業務很熟悉,但是編程技術是硬傷。他們也會覺得我本來就是做業務的,幹嘛要費勁學這些語法軟體的。一般的數據分析軟體需要拖拽欄位,這些欄位存儲的名稱並不明確,這也是主要的分析困難。建議試試帆軟的商業智能產品finebi。它在數據欄位選取轉義這一塊做得很好,甚至支持直接從excel裡面取數。