使用 Core Data 对数据进行制表 - 如何有效过滤?

Posted

技术标签:

【中文标题】使用 Core Data 对数据进行制表 - 如何有效过滤?【英文标题】:Tabulating data using Core Data - How to filter effectively? 【发布时间】:2013-02-25 15:29:03 【问题描述】:

我正在构建一个用于报告销售数据的应用。核心数据结构如下

Product <---->> SaleAggregate
Customer <---->> SaleAggregate

SaleAggregate 是特定月份每个产品、每个客户的总销售额。该实体具有“月”、“年”和“金额”属性。

我正在尝试以如下表格格式显示它(每个客户都有一个单独的表格)

+---------+---------+---------+---------+---------+
| Product | 01/2011 | 02/2011 | 03/2011 | 04/2011 |
+---------+---------+---------+---------+---------+
| Gizmo   |      40 |     120 |      83 |      48 |
| Widget  |      92 |      38 |      37 |      36 |
| Thingy  |      12 |      84 |      29 |      40 |
+---------+---------+---------+---------+---------+

每个客户都可以记录任意数量的产品的销售,我需要检索所有这些销售,以某种方式按产品对它们进行分组,然后显示每个 SaleAggregate 'Amount' 以及相应的月/年。

我可以使用 NSPredicate 轻松检索 Customer 的所有 SaleAggregates,以及使用 NSPredicate 和 @distinctUnionOfObjects 出售给客户的所有唯一产品,但我不太确定从这里去哪里。

该表是使用 UICollectionView 实现的,但我不太确定将正确值放入 cellForItemAtIndexPath 的正确单元格中的逻辑应该是什么。是否只是在一个查询中检索每个 SaleAggregate ,然后使用 NSPredicate 过滤数组以获得我要显示的每个单元格的正确月份/年份?我认为必须有更聪明的方法来做到这一点。

谢谢!

【问题讨论】:

如果我理解这一点,SalesAggregate 对象的例子有 amount ,比如说 40 是某个特定客户在特定月份购买的一种特定产品的数量? 【参考方案1】:

这个怎么样?

使用谓词和过滤您可以获得特定客户的以下信息吗?

ProductArray:
SalesAggreateDateArray:

if section ==0 
      row==0 --> "Product"
      rest of the rows --> [ProductArray objectAtIndex:indexPath.row]
else if row ==0
      sections --> [SalesAggregateDateArray objectAtIndex:indexPath.section]
else
       each cell --> [SalesAggregateAmountObjects filter with 
                                 date= date at row 0, indexPath.section and 
                                 product = product at section 0, indexPath.row]

【讨论】:

以上是关于使用 Core Data 对数据进行制表 - 如何有效过滤?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GROUP BY 之前对 Core Data 记录进行排序?

轻量级迁移后如何从 Core Data 中删除数据

R语言进行制表

RESTkit,Core Data:在将对象传输到 Core Data 之前对其进行处理

(Swift) 如何对 Core Data 进行模糊搜索?

在 Swift Core Data 中对存储的数据模型提取进行排序