1

我正在使用 WebAPI 和 OData v4 构建 OData Web 服务。

我想知道这个新版本的 OData 是否能够理解维度、度量和多维数据集,并且能够从数据中执行查询。

我将如何配置它?

4

2 回答 2

0

使用AdaptiveLINQ组件QueryByCube提供的 LINQ 扩展方法,您可以开发可查询的分析服务

使用以下示例 LINQ 查询QueryByCube

dataContext.MyEntitySet.QueryByCube(myCube)
    .Where(x => x.Measure1 > 100)
    .Select(x => new {
       Dimension1 = x.Dimension1,
       Dimension2 = x.Dimension2,
       Measure1 = x.Meeasure1
    })

QueryByCube充当具有隐式聚合的(可查询)视图

多维数据集维度和度量定义为 C# 表达式。myCube是实现AdaptiveLINQ.ICubeDefinition<>接口的类的实例。

public class MyCubeDefinition : ICubeDefinition<MySourceClass, MyCubeItem>
{
  static public readonly Expression<Func<MySourceClass, string>>
    Dimension1 = item => ...
  static public readonly Expression<Func<MySourceClass, string>>
    Dimension2 = item => ...
  static public readonly Expression<Func<IEnumerbale<MySourceClass>, string>>
    Measure1 = items => ...
}

QueryByCube转换查询(基于语义分析来确定要使用的维度)以使用GroupBy运算符并返回一个IQueryable集合。

要将多维数据集公开为可查询的 HTTP 服务,请实现 ASP.Net WebAPI ODataController,如下所示:

public class MyCubeController : ODataController
{
  public MyCubeController()
  {
    // get dataContext
    ...
  }

  static MyCubeDefinition MyCube = new MyCubeDefinition();

  [EnableQuery]
  public IQueryable<MyCubeItem> Get()
  {
      return dataContext.MyEntitySet.QueryByCube(myCube);       
  }
}

现在您可以像这样查询您的多维数据集:

每个 Dimension1 的 Mesaure1

http://.../MyCube?$select=Dimension1, Measure1

Mesaure1 per (Dimension1, Dimension2)

http://.../MyCube?$select=Dimension1, Dimension2, Measure1

Mesaure1 每个 (Dimension1, Dimension2) order by Mesaure1, top 5

http://.../MyCube?$select=Dimension1, Dimension2, Measure1&$orderby=Measure1&$top=5

免责声明:我是 AdaptiveLINQ 开发人员

于 2014-12-17T12:57:10.153 回答
0

从协议规范的概述中,您可以看到:

为此,OData 协议遵循以下设计原则: 首选适用于各种数据存储的机制。特别是,不要假设关系数据模型

因此,没有什么可以阻止您使用 OData 对多维数据集数据进行建模。

我能想到的一种方法是将每个实体集视为一个多维数据集,其中每个实体的一些属性和导航属性是它具有的维度。它有一堆度量属性作为它的度量。因此,通过查询实体集,您可以获得整个多维数据集。您可以使用一些简单的查询来查询它:

GET http://host/service/Cube?$select=Dimension1,Dimension2,Measure1 & $filter=Measure1 gt 100

这只是我自己的简单模型。对于更复杂的多维数据集表示和可查询性,OData V4 具有此聚合扩展,可帮助您更好地对其进行建模。您可以查看这个示例数据模型,它对多维数据集数据进行建模。

于 2014-12-17T06:49:58.253 回答