作爲我的一個項目的一部分,我需要將cellset轉換爲數據表。如果這個方法的調用者可以指定需要哪些維度作爲列,哪些維度是行所需要的,那麼這將是非常好的,對於度量也是如此。任何指針? 多維數據集或表格行集:將CellSet轉換爲DataTable
0
A
回答
0
如果在項目中使用XMLA你可以在2格式之間進行選擇。
多維數據集:
這種格式會給你一個單元集(你已經知道了)。
表格行集:
這一個應該更容易轉換成數據表。
2
我最近需要在我的項目中執行MDX查詢,這嚴重依賴於ADO數據集和數據表。實際上,要求能夠看到MDX查詢執行時我在SSMS中看到的內容。
例如,當該MDX在AdventureWorks數據庫執行
select
{[Sales Territory].[Sales Territory].[Country].&[France]} on columns,
[Product].[Category].[All Products] on Rows
from
[Adventure Works]
結果集,我們得到的是:
| France
=====================================
All Products | $4,607,537.94
對於這個結果,一個數據表有兩列創建包含單個數據行。第二列中的「法國」值是其標題,而不是列名。
我用這個函數將一個網格集轉換成一個數據表。未提供函數GetColumnName(num)基於傳遞的num整數值爲列返回一個名稱。
Function Cellset2Datatable(ByVal cs As CellSet) As DataTable
Dim dt As New DataTable
Dim dc As DataColumn
Dim dr As DataRow
Dim i, j As Integer
Dim num As Integer = 0
Dim nNumberOfGroupingColumns As Integer = 0
If cs.Axes.Count > 1 Then
For Each m As Member In cs.Axes(1).Positions(0).Members
num += 1
dc = New DataColumn
dc.ColumnName = GetColumnName(num)
dt.Columns.Add(dc)
nNumberOfGroupingColumns += 1
Next
End If
Dim sCaption As String
For Each p As Position In cs.Axes(0).Positions
sCaption = ""
For Each m As Member In p.Members
If sCaption.Equals("") Then
sCaption = String.Format("[{0}]", m.Caption.Trim)
Else
sCaption = String.Format("{0}/[{1}]", sCaption, m.Caption.Trim)
End If
Next
num += 1
dc = New DataColumn
dc.ColumnName = GetColumnName(num)
dc.Caption = sCaption
dt.Columns.Add(dc)
Next
'import data
Dim x As Integer, y As Integer
Dim py As Position
If nNumberOfGroupingColumns > 0 Then
For y = 0 To cs.Axes(1).Positions.Count - 1
py = cs.Axes(1).Positions(y)
i = 0
dr = dt.NewRow
For Each m As Member In py.Members
dr.Item(i) = m.Caption
i += 1
Next
For x = 0 To cs.Axes(0).Positions.Count - 1
dr.Item(i) = cs(x, y).Value
i += 1
Next
dt.Rows.Add(dr)
Next
Else
dr = dt.NewRow
For i = 0 To cs.Axes(0).Positions.Count - 1
dr.Item(i) = cs(i).Value
Next
dt.Rows.Add(dr)
End If
Return dt
End Function
首先,添加列。進行檢查,以查看是否在垂直軸存在的任何「分組」列存在並且在這種情況下,相應的列被添加:
If cs.Axes.Count > 1 Then
For Each m As Member In cs.Axes(1).Positions(0).Members
num += 1
dc = New DataColumn
dc.ColumnName = GetColumnName(num)
dt.Columns.Add(dc)
nNumberOfGroupingColumns += 1
Next
End If
下一步是添加對應於水平軸的列
For Each p As Position In cs.Axes(0).Positions
sCaption = ""
For Each m As Member In p.Members
If sCaption.Equals("") Then
sCaption = String.Format("[{0}]", m.Caption.Trim)
Else
sCaption = String.Format("{0}/[{1}]", sCaption, m.Caption.Trim)
End If
Next
num += 1
dc = New DataColumn
dc.ColumnName = GetColumnName(num)
dc.Caption = sCaption
dt.Columns.Add(dc)
Next
此步驟中的列標題用於存儲所有級別值。例如, [附件]。[法國]。[互聯網訂單計數]變爲[附件]/[法國]/[互聯網訂單計數]。 最後一步是將數據導入到數據表中。這兩種情況都在這裏處理:是否存在「分組」列。
該函數不處理存在兩個以上軸的情況。
我在分析服務和MDX方面的經驗有限,我剛剛研究了項目需求,所以我對關於概念的「簡單」描述表示歉意。
相關問題
- 1. 將DataRow []轉換爲DataTable的ASP.NET轉換
- 2. 將datatable轉換爲datareader
- 3. 將DataTable轉換爲對象[,]
- 4. 將SPListItemCollection轉換爲DataTable
- 5. 將Datatable轉換爲PDF
- 6. C#將Datatable轉換爲
- 7. 將Iqueryable轉換爲DataTable
- 8. 將DataTable轉換爲CSV流
- 9. 將DataSet \ DataTable轉換爲CSV
- 10. 將DataTable轉換爲JSON
- 11. 將IEnumerable轉換爲DataTable
- 12. 將Xml轉換爲DataTable
- 13. 將LINQ轉換爲DataTable
- 14. 將XML轉換爲DataTable
- 15. DataGrigView轉換爲DataTable
- 16. 如何將DataTable轉換爲IDatareader?
- 17. 將DataTable的單列轉換爲CSV
- 18. 動態地將TreeNode轉換爲DataTable
- 19. 如何將BindingSource轉換爲DataTable?
- 20. 將Datatable轉換爲C#中的數組
- 21. 將DataTable值轉換爲通用類型
- 22. 如何將Gridview轉換爲Datatable
- 23. 將DataTable轉換爲JSON數組
- 24. 在XML中將XML轉換爲DATATABLE
- 25. 將Json字符串轉換爲DataTable
- 26. 如何將LINQ結果轉換爲DATATABLE?
- 27. 將列表轉換爲DataTable空白{}
- 28. 將DataTable轉換爲JSON的VB.NET問題
- 29. 將DataTable列從布爾轉換爲Int
- 30. 將byte []數組轉換爲DataTable
只是簡單地傾銷代碼而沒有解釋會鼓勵複製和粘貼,並可能導致對OP缺乏真正的理解。建議你在這個帖子附加一些解釋代碼的每個部分。請記住,OP可能是初學者,因此代碼傾銷可能會被證明是壓倒性的。 – rayryeng
謝謝,我剛剛編輯了我的帖子。 – dbar
Upvoted!感謝您的幫助 – rayryeng