我有一個簡單的表格模型, 20 mio。記錄(銷售交易)和大約600.000條記錄(客戶)的維度表。從SSAS表格模型高效顯示Excel數據透視表中的Top N
一個典型的報告方案是通過事實表中的某些度量獲得前10位客戶,可能通過一些其他條件(通常是時間段,產品等)進行過濾。
在Excel中,彙總所有20 mio。記錄返回總銷售額是即時的。但是,一旦我嘗試按客戶分組,需要花費一些時間(15-20秒)來檢索所有數據,這是有道理的,因爲需要顯示的客戶(600.000)相當多。
現在,如果我在Excel中應用一個值過濾器,僅獲得前10位客戶,它仍然需要大約15-20秒才能返回結果,這對我的用戶是不可接受的(因爲他們希望立即看到前10名客戶,同時對產品,時間等其他屬性進行切分)。
在內部,當使用值過濾器查詢表格模型時,Excel使用TOPCOUNT
MDX函數。
在表格模型中,我可以做些什麼來加速這些查詢?
我已經試過:
- 創建的維度表的計算列,其中包含每個客戶的銷售總額。雖然性能更好,但這並不是要走的路,因爲此列中的值不能被事實中的其他屬性切片,並且該列顯然最終會包含許多不同的值(這在表格中是一件壞事)。
- 使用建議的here的DAX
RANKX
函數在事實表上創建計算的度量。這引起了我的表格實例崩潰(維度表中記錄太多?) - 直接使用DAX
TOPN
功能的表格模型執行一個簡單的DAX聲明。這比MDX-approach更慢,降低了3-4倍。
我不知道的解決辦法,但計劃很快開始在工作中使用的PowerPivot玩 - 您使用XL 32位或64位?你用什麼內存來處理這些數據? – whytheq 2014-10-16 20:42:21
我們沒有使用PowerPivot - 我們在表格模式下使用SQL Server Analysis Services(這基本上是相同的事情,但部署到服務器環境)。有問題的服務器擁有32 GB的ram,這對於這款機型來說已經足夠了,一旦它處理完畢,它只佔用大約1 GB的內存。 – Dan 2014-10-17 06:33:18
正在創建一個單獨的維度,名爲TopCustomers一個選項?根據ETL中的計算列預先計算前X個客戶,然後將其用作Excel/MDX查詢中的ROWS和Columns中的度量值?如果不能取得良好的業績,你說的上面,你的硬件,創建與您的TopCustomers尺寸可能是最好的一段路要走...... – Mez 2014-10-20 06:37:04