FusionChart對MDX查詢結果的資料展示案例

來源:互聯網
上載者:User

    前不久在發布了“2011高校資訊化實踐者精英論壇之上海交大BI系統彙報”之後,相繼有幾位朋友問到關於資料展示方面的問題,足見資料視覺效果在BI項目中的重要性。其中有一位叫Emmy朋友問到關於FusionChart如何對MDX查詢後的結果資料進行展示,並在部落格中問到這個問題,詳見這裡。今晚剛好有點時間,於是將Emmy的問題以實際例子的在此解答,希望給予大家參考。

 

    談及FusionChart,大家可以訪問 http://www.fusioncharts.com/ 查看其產品及介紹,其效果的確很cool。而如果要將其應用到我們的BI項目中,需要考慮的問題還是很多的。首先,我們知道,因為FusionChart是基於flash來展示資料的,它的資料來源只能是一定格式的xml檔案,而且可能每一種圖表所需要的xml檔案格式不一樣。可喜的是,我們可以將資料集轉化為xml以提供其資料來源。可是,我們知道,在ADOMD.NET中,用MDX語句查詢後能擷取的對象只能是CellSet,並不是DataSet或DataTable。因此,問題的關鍵就在於如何將CellSet對象轉化為DataTable對象。

 

    其實,只要google一下就知道,早已經有很多先輩們很好地解決了上述問題,並將CellSet對象轉化為DataTable對象的方法公佈於眾,具體代碼如下:

 

        /// <summary>
        /// 將CellSet轉化成Table
        /// </summary>
        /// <param name="cellset">CellSet</param>
        /// <returns></returns>
        private DataTable CellSetToTable(CellSet cellset)
        {
            DataTable table = new DataTable("cellset");

            Axis columns = cellset.Axes[0]; //擷取列軸
            Axis rows = cellset.Axes[1];//擷取行軸
            CellCollection valuesCell = cellset.Cells;//擷取度量值資料格集合
            //行軸的層級標題為表的第一列
            table.Columns.Add(rows.Set.Hierarchies[0].Caption);
            //行軸的各個成員的標題變成表的列
            for (int i = 0; i < columns.Set.Tuples.Count; i++)
            {
                table.Columns.Add(new DataColumn(columns.Set.Tuples[i].Members[0].Caption));
            }
            int valueIndex = 0;
            DataRow row = null;
            //向表中填充資料
            for (int i = 0; i < rows.Set.Tuples.Count; i++)
            {
                row = table.NewRow();
                //表所有行的第一列值為相應行軸的成標題
                row[0] = rows.Set.Tuples[i].Members[0].Caption;
                for (int k = 1; k <= columns.Set.Tuples.Count; k++)
                {//按順序把度量值資料格集合的值填充到表中
                    row[k] = valuesCell[valueIndex].Value;
                    valueIndex++;
                }
                table.Rows.Add(row);
            }
            return table;
        }

     代碼很簡單,原理就是遍曆Cellset中的元組,然後填充至DataTable中。

     實現上述痛點之後,我們就可以將DataTable的資料轉化成xml提供給FunsionChart來展示資料。下面,我們一步步來解答Emmy的問題:

    (1)首先,將附件question.rar解壓,並將test6.abf檔案還原至SSAS中,並測試一下MDX語句是否正確,如所示:

    (2)接著,我們建立一個ASP.NET項目,並將相關flash檔案、js檔案加入到解決方案中,並將CellSet轉DataTable的方法寫入到一個工具類中,並添加對ADOMD.NET的引用,如所示:

  

    (3)在Default.aspx頁面中加入以下控制項,我們希望能通過選擇不同的flash圖表來展示資料:

    (4)在頁面後置代碼中,編寫相應的事件代碼,代碼很簡單,但是這裡要說明的是,FusionChart可以採用兩種在網頁中呈現資料,一種是產生一段JS代碼,一種是直接產生一段Flash的HTML代碼。點擊預覽DataTable後的結果如下所示(是不是和我們剛開始的MDX測試結果一致?):

    當選擇不同的圖表類型後,產生的圖表樣式也不一樣(XML的參數很多,可以參考FunsionChart官方的API說明):

      

 

    最後,完整的案常式序在此下載。希望大家多多交流!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.