将标准化数据提供给报告软件的最有效方法是啥

Posted

技术标签:

【中文标题】将标准化数据提供给报告软件的最有效方法是啥【英文标题】:What is the most effective way to make normalized data available to reporting software将标准化数据提供给报告软件的最有效方法是什么 【发布时间】:2016-10-26 20:23:26 【问题描述】:

我们有一些标准化结构中的数据,它是Entity-Attribute-Value 模式的一种形式。我们需要使这些数据可用于报告,但必须在使用前对其进行转换。

(此图代表数据结构;实际模式有不同的名称和更多的列,显示相关的列)

不同的ObjectTypes 有不同的列。我们想为单个对象类型创建报告,但我们不能简单地将对象连接到值并过滤对象类型。这会产生一个单一的列,我们真正想要的是执行某种“枢轴”,其中值通过它们的 ColumnIDs 映射到列中。

在应用程序逻辑中处理这一点很简单,但我需要将未 EAV 处理的数据公开为视图,并为每种对象类型提供正确的列,以便任何可以访问这些表的报告软件都可以使用它们。

如何做到这一点?

【问题讨论】:

我不确定你在问什么。报告工具不关心架构是什么样的。您提到的所有工具都将在技术上报告这一点。我认为您在问“我如何将其转换为对最终用户更有意义”。正如其他答案中提到的,您可以使用视图、存储过程等,但首先您需要知道您希望它是什么样子。这种模式很棘手,因为例如,如果您创建十几个自定义视图来表示十几个对象,那么当创建一个新对象时,您需要创建一个新视图。 谢谢@Nick.McDermaid,你比我更好地表达了我的问题。我正在努力寻找一种方法让数据对我们的最终用户更有意义。如果我们使用视图,我们需要在每次用户添加新的 ObjectType 时创建一个新视图,并在每次更改 ObjectTypeColumns 时编辑视图。 如果可能的话,我想避免制作数据的数据仓库副本以进行报告,但我不知道我有哪些视图之外的选项。 不幸的是,这是 EAV 模型的一个特征 - 基本上设计者已经“推迟”创建一个“适当的”数据模型。数据建模现在被推回到下一层(报告)。真正归结为了解业务 - 是否有可以建模的关键实体,或者业务是否真的如此敏捷和灵活,以至于他们需要即时复杂的新对象? 事实证明,我们处于横向业务中,需要一些纵向数据结构。我们的客户可以拥有数百个 ObjectType,其中只有少数是常见的,其中许多是在我们不知情的情况下创建的。这种数据结构对于应用程序的各个方面来说都是完美的,更少的报告。该搜索引擎速度快、易于使用并且相对容易创建。 【参考方案1】:

您发布的图表看起来像 Access 或 SQLServer 中的图表。您可以在两者中创建视图/查询,也可以在 SQL Server 中创建存储过程,并直接在任何报告软件中使用它。您还可以在报告中定义 SQL 命令。顺便说一句,表 ObjectTypeColumns 和 ObjectValues 具有复合主键,这不是一个好习惯。

【讨论】:

谢谢兰。是的,图表是在 sql server 中完成的。您能推荐一个符合所述要求的查询吗? 您将使用哪种报告软件? 就 ObjectTypeColumns 和 ObjectValue 而言。它们都是多对多表,在 m2m 上使用复合键是一种公认​​的最佳实践,因为它使您可以使用聚集索引进行主要方向的查询(ObjectID 然后是 ValueID)。并且只需要第二个索引即可完全覆盖 m2m(在本例中为 ValueID)。 报告层需要能够被多种报告工具访问,包括但不限于 Crystal、s-s-rS、许多开源报告工具。这最终是我的困境。我可以轻松地将逻辑层中的数据展平并制作一个报告,但这不符合我的要求。许多工具需要能够针对它进行报告。 你说我可以创建视图或存储过程,太棒了。您能否推荐一个可以使问题中描述的数据变平的查询?它需要在 ObjectTypeID 上进行过滤。

以上是关于将标准化数据提供给报告软件的最有效方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

将任意 GUID 编码为可读 ASCII (33-127) 的最有效方法是啥?

以二进制模式写入标准输出的最简单方法是啥?

将许多语句加载到 Jena 数据集中的最有效方法是啥?

将 numpy 数组传递给 c++ 函数并返回 numpy 数组作为输出的最有效方法是啥?

连接大型 CSV 文件中单词的最有效方法:pandas 还是 Python 标准库? [复制]

检查 DBNull 然后分配给变量的最有效方法是啥?