c#cube / multidimensional数据集

时间:2010-03-03 05:06:59

标签: c# .net olap multidimensional-array cubes

我正在研究一个问题,我需要使用C#在内存中处理多维数据。我的要求类似于OLAP多维数据集,但并不复杂。例如,我不需要计算或聚合或类似的东西。我基本上想使用多维键来引用数据。例如:

var key = new Key();
key["Dim1"] = "DimValue1";
key["Dim2"] = "DimValue2";
key["Time"] = 1999;
DataSet[key] = 4.43434m;

它允许我迭代数据集的值或切片。您是否在C#中遇到过这样的图书馆?

3 个答案:

答案 0 :(得分:1)

这可能无法满足您的需求,但我发现处理多键数据集的一种简单方法是创建一个包含所有“键”字段和“值”键的对象(与您一样多)需要)然后为每个键创建Lookup表达式。

例如:

class MyData
{
    // Your keys
    public string Dim1;
    public string Dim2;
    public string Time;

    // Your values
    public string Value;
}

将被“索引”并像这样检索:

// add all your data to a list or collection
var data = new List<MyData>();

// this provides the entry point to our dataset
var lookupDim1 = data.ToLookup(d => d.Dim1);
var lookupDim2 = data.ToLookup(d => d.Dim2);
var lookupTime = data.ToLookup(d => d.Time);

// sample retrievals
IEnumerable<MyData> sampleData1 = lookupDim1["DimValue1"];
var sampleData2 = lookupDim2["DimValue2"].Intersect( lookupTime["1999"] );

答案 1 :(得分:0)

您可以创建一个字典,其中键类型是您声明的结构。虽然您可以通过过滤来实现切片,但这并没有为您提供切片的自动迭代。

答案 2 :(得分:0)

我认为像MongoDB和Redis这样的键/值存储已接近我所需要的。但是我不是百分百肯定。由于我不关心持久性,因此在内存故事中Redis更适合。