saiku連接infiniDB數(shù)據(jù)庫 1,日期維度無結(jié)果。 原因:(數(shù)據(jù)庫表內(nèi)容出錯(cuò)) 表最后一列(日期字段)匹配出錯(cuò),用like %日期%可以。說明入庫時(shí)寫入多余的空白符,因?yàn)橹苯涌床怀觥indows表數(shù)據(jù),放到linux下,后面也是\a\0,要用dos2unix命令轉(zhuǎn)換。 2,workb
saiku連接infiniDB數(shù)據(jù)庫
1,日期維度無結(jié)果。
原因:(數(shù)據(jù)庫表內(nèi)容出錯(cuò))
表最后一列(日期字段)匹配出錯(cuò),用“like %日期%”可以。說明入庫時(shí)寫入多余的空白符,因?yàn)橹苯涌床怀觥indows表數(shù)據(jù),放到linux下,后面也是\a\0,要用dos2unix命令轉(zhuǎn)換。
2,workbench :
(1)維度dimension設(shè)置:
事實(shí)表外鍵和維度表主鍵關(guān)聯(lián):從不同維度查詢,實(shí)際就是兩個(gè)表聯(lián)合查詢,本質(zhì)是兩個(gè)表做自然連接,因此事實(shí)表主鍵和維度表外鍵要一致,一一對(duì)應(yīng)。如果類型不一致,報(bào)錯(cuò):
SQLException: IDB-1002: 'factdownloadsnew' and 'dimstore' have incompatible column type specified for join condition.
錯(cuò)誤設(shè)置為事實(shí)表外鍵用datevalue,維度表主鍵設(shè)為id。
(2)column設(shè)置:這是選擇要查看什么內(nèi)容(本質(zhì)是 group by column的設(shè)定)看哪一列,比如月份,選month,則在主外鍵自然連接后,按month做group by,進(jìn)行統(tǒng)計(jì)。
但saiku會(huì)自動(dòng)加上該列的上一級(jí)列,進(jìn)行操作,如month會(huì)自動(dòng)加上year:
saiku自動(dòng)生成的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` // 自然連接要對(duì)應(yīng)
GROUP BY
`dimDate`.`year`,
`dimDate`.`month`
group by也自動(dòng)變成兩列。
結(jié)果:
對(duì)比,將column設(shè)置為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不設(shè)定,默認(rèn)為用column。要顯示的內(nèi)容。
總結(jié):
維度度主外鍵關(guān)聯(lián),實(shí)現(xiàn)自然連接;
column為查看內(nèi)容,實(shí)現(xiàn)group by。自動(dòng)加上一級(jí)。
用saiku查錯(cuò):(saiku查詢過程的本質(zhì))
mondrian_sql.log日志信息(tomcat/logs下)中,會(huì)給出組裝的sql查詢語句。sql里直接執(zhí)行該sql查詢語句,看結(jié)果,和執(zhí)行過程。
從執(zhí)行記錄看,一個(gè)查詢分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)計(jì)年和月從dimdate,并分組。
2 select count(distinct `year`) from `dimDate`
3 select count(distinct `month`) from `dimDate`
年月個(gè)數(shù)
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`
核心,表連接查看。
負(fù)數(shù)問題:當(dāng)反復(fù)幾次計(jì)算后,會(huì)出現(xiàn)負(fù)數(shù)。如計(jì)算每天的下載量后,在看每年和每月的會(huì)出現(xiàn)負(fù)數(shù)現(xiàn)象。
.xml的schema文件設(shè)置中,cube屬性中的cache被勾選(默認(rèn))。不勾選,無緩存,不出現(xiàn)負(fù)數(shù)。
cache是cube的事實(shí)表是否用modrian存儲(chǔ)。用的話,會(huì)有邏輯上問題。(后期詳細(xì)排查)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com