2014-10-16 85 views
2

我有一個簡單的表格模型, 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倍。
+0

我不知道的解決辦法,但計劃很快開始在工作中使用的PowerPivot玩 - 您使用XL 32位或64位?你用什麼內存來處理這些數據? – whytheq 2014-10-16 20:42:21

+0

我們沒有使用PowerPivot - 我們在表格模式下使用SQL Server Analysis Services(這基本上是相同的事情,但部署到服務器環境)。有問題的服務器擁有32 GB的ram,這對於這款機型來說已經足夠了,一旦它處理完畢,它只佔用大約1 GB的內存。 – Dan 2014-10-17 06:33:18

+0

正在創建一個單獨的維度,名爲TopCustomers一個選項?根據ETL中的計算列預先計算前X個客戶,然後將其用作Excel/MDX查詢中的ROWS和Columns中的度量值?如果不能取得良好的業績,你說的上面,你的硬件,創建與您的TopCustomers尺寸可能是最好的一段路要走...... – Mez 2014-10-20 06:37:04

回答

1

經過多次搜索網絡並執行其他測試後,我得出結論:SSAS Tabular在回答未過濾的上下文中的TOPCOUNT/RANK類查詢時本質上是不好的。原因似乎很簡單:

如果我有一個包含600.000個客戶的維度,並且我要求未過濾的上下文中的銷售額前10名,表格引擎需要計算每個人的銷售額總和客戶,然後才能排序並返回每個客戶的前10位或排名。

在多維OLAP,數據通常預先聚合上形成PR。客戶級別,這意味着多維立方體可以更快地回答這些查詢。

當SSAS表格應用一個或多個過濾器(例如當月,特定產品等),我看到了一個顯著的性能提升。在我的情況下,解決方案是教育我的用戶在將客戶維度包括在他們的數據透視表中之前總是過濾他們的數據。