使用 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 记录进行排序?