saiku連接infiniDB數據庫 1,日期維度無結果。 原因:(數據庫表內容出錯) 表最后一列(日期字段)匹配出錯,用like %日期%可以。說明入庫時寫入多余的空白符,因為直接看不出。windows表數據,放到linux下,后面也是\a\0,要用dos2unix命令轉換。 2,workb
saiku連接infiniDB數據庫
1,日期維度無結果。
原因:(數據庫表內容出錯)
表最后一列(日期字段)匹配出錯,用“like %日期%”可以。說明入庫時寫入多余的空白符,因為直接看不出。windows表數據,放到linux下,后面也是\a\0,要用dos2unix命令轉換。
2,workbench :
(1)維度dimension設置:
事實表外鍵和維度表主鍵關聯(lián):從不同維度查詢,實際就是兩個表聯(lián)合查詢,本質是兩個表做自然連接,因此事實表主鍵和維度表外鍵要一致,一一對應。如果類型不一致,報錯:
SQLException: IDB-1002: 'factdownloadsnew' and 'dimstore' have incompatible column type specified for join condition.
錯誤設置為事實表外鍵用datevalue,維度表主鍵設為id。
(2)column設置:這是選擇要查看什么內容(本質是 group by column的設定)看哪一列,比如月份,選month,則在主外鍵自然連接后,按month做group by,進行統(tǒng)計。
但saiku會自動加上該列的上一級列,進行操作,如month會自動加上year:
saiku自動生成的sql語句為:
SELECT
`dimDate`.`year` AS `c0`,
`dimDate`.`month` AS `c1`,
sum(
`factDownloadsNew`.`downloads`
)AS `m0`
FROM
`dimDate` AS `dimDate`,
`factDownloadsNew` AS `factDownloadsNew`
WHERE
`factDownloadsNew`.`date_time` = `dimDate`.`datevalue` // 自然連接要對應
GROUP BY
`dimDate`.`year`,
`dimDate`.`month`
group by也自動變成兩列。
結果:
對比,將column設置為datevalue(原來是month):
SELECT
`dimDate`.`year` AS `c0`,
`dimDate`.`datevalue` AS `c1`,
sum(
`factDownloadsNew`.`downloads`
)AS `m0`
FROM
`dimDate` AS `dimDate`,
`factDownloadsNew` AS `factDownloadsNew`
WHERE
`factDownloadsNew`.`date_time` = `dimDate`.`datevalue`
GROUP BY
`dimDate`.`year`,
`dimDate`.`datevalue`
(3)namecolumn不設定,默認為用column。要顯示的內容。
總結:
維度度主外鍵關聯(lián),實現自然連接;
column為查看內容,實現group by。自動加上一級。
用saiku查錯:(saiku查詢過程的本質)
mondrian_sql.log日志信息(tomcat/logs下)中,會給出組裝的sql查詢語句。sql里直接執(zhí)行該sql查詢語句,看結果,和執(zhí)行過程。
從執(zhí)行記錄看,一個查詢分4步,如
Month的downloads,組成sql為 :
1 select `dimDate`.`year` as `c0`, `dimDate`.`yearname` as `c1`, `dimDate`.`month` as `c2`, `dimDate`.`monthname` as `c3` from `dimDate` as `dimDate` group by `dimDate`.`year`, `dimDate`.`yearname`, `dimDate`.`month`, `dimDate`.`monthname` order by ISNULL(`dimDate`.`year`) ASC, `dimDate`.`year` ASC, ISNULL(`dimDate`.`month`) ASC, `dimDate`.`month` ASC
統(tǒng)計年和月從dimdate,并分組。
2 select count(distinct `year`) from `dimDate`
3 select count(distinct `month`) from `dimDate`
年月個數
4 SELECT
`dimDate`.`year` AS `c0`,
`dimDate`.`month` AS `c1`,
sum(
`factDownloadsNew`.`downloads`
)AS `m0`
FROM
`dimDate` AS `dimDate`,
`factDownloadsNew` AS `factDownloadsNew`
WHERE
`factDownloadsNew`.`date_time` = `dimDate`.`datevalue`
GROUP BY
`dimDate`.`year`,
`dimDate`.`month`
核心,表連接查看。
負數問題:當反復幾次計算后,會出現負數。如計算每天的下載量后,在看每年和每月的會出現負數現象。
.xml的schema文件設置中,cube屬性中的cache被勾選(默認)。不勾選,無緩存,不出現負數。
cache是cube的事實表是否用modrian存儲。用的話,會有邏輯上問題。(后期詳細排查)
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com