【发布时间】:2016-10-26 20:23:26
【问题描述】:
我们有一些标准化结构中的数据,它是Entity-Attribute-Value 模式的一种形式。我们需要使这些数据可用于报告,但必须在使用前对其进行转换。
(此图代表数据结构;实际模式有不同的名称和更多的列,显示相关的列)
不同的ObjectTypes 有不同的列。我们想为单个对象类型创建报告,但我们不能简单地将对象连接到值并过滤对象类型。这会产生一个单一的列,我们真正想要的是执行某种“枢轴”,其中值通过它们的 ColumnIDs 映射到列中。
在应用程序逻辑中处理这一点很简单,但我需要将未 EAV 处理的数据公开为视图,并为每种对象类型提供正确的列,以便任何可以访问这些表的报告软件都可以使用它们。
如何做到这一点?
【问题讨论】:
-
我不确定你在问什么。报告工具不关心架构是什么样的。您提到的所有工具都将在技术上报告这一点。我认为您在问“我如何将其转换为对最终用户更有意义”。正如其他答案中提到的,您可以使用视图、存储过程等,但首先您需要知道您希望它是什么样子。这种模式很棘手,因为例如,如果您创建十几个自定义视图来表示十几个对象,那么当创建一个新对象时,您需要创建一个新视图。
-
谢谢@Nick.McDermaid,你比我更好地表达了我的问题。我正在努力寻找一种方法让数据对我们的最终用户更有意义。如果我们使用视图,我们需要在每次用户添加新的 ObjectType 时创建一个新视图,并在每次更改 ObjectTypeColumns 时编辑视图。
-
如果可能的话,我想避免制作数据的数据仓库副本以进行报告,但我不知道我有哪些视图之外的选项。
-
不幸的是,这是 EAV 模型的一个特征 - 基本上设计者已经“推迟”创建一个“适当的”数据模型。数据建模现在被推回到下一层(报告)。真正归结为了解业务 - 是否有可以建模的关键实体,或者业务是否真的如此敏捷和灵活,以至于他们需要即时复杂的新对象?
-
事实证明,我们处于横向业务中,需要一些纵向数据结构。我们的客户可以拥有数百个 ObjectType,其中只有少数是常见的,其中许多是在我们不知情的情况下创建的。这种数据结构对于应用程序的各个方面来说都是完美的,更少的报告。该搜索引擎速度快、易于使用并且相对容易创建。
标签: tsql reporting user-defined-functions entity-attribute-value denormalization