我正在使用 WebAPI 和 OData v4 构建 OData Web 服务。
我想知道这个新版本的 OData 是否能够理解维度、度量和多维数据集,并且能够从数据中执行查询。
我将如何配置它?
我正在使用 WebAPI 和 OData v4 构建 OData Web 服务。
我想知道这个新版本的 OData 是否能够理解维度、度量和多维数据集,并且能够从数据中执行查询。
我将如何配置它?
使用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 开发人员
从协议规范的概述中,您可以看到:
为此,OData 协议遵循以下设计原则: 首选适用于各种数据存储的机制。特别是,不要假设关系数据模型。
因此,没有什么可以阻止您使用 OData 对多维数据集数据进行建模。
我能想到的一种方法是将每个实体集视为一个多维数据集,其中每个实体的一些属性和导航属性是它具有的维度。它有一堆度量属性作为它的度量。因此,通过查询实体集,您可以获得整个多维数据集。您可以使用一些简单的查询来查询它:
GET http://host/service/Cube?$select=Dimension1,Dimension2,Measure1 & $filter=Measure1 gt 100
这只是我自己的简单模型。对于更复杂的多维数据集表示和可查询性,OData V4 具有此聚合扩展,可帮助您更好地对其进行建模。您可以查看这个示例数据模型,它对多维数据集数据进行建模。