有这样的代码
CLASS Type;
name = DATA STRING (Type);
CLASS Plan;
date = DATA DATE (Plan);
type = DATA Type (Plan);
amount = DATA INTEGER (Plan);
需要在表单的表格中显示所选月份和年份的所有天数。对于有计划条目的日子,显示该计划条目;对于没有计划条目的日子,显示一个空单元格。
像这样(此代码不起作用)
filterYear = DATA LOCAL INTEGER;
filterMonth = DATA LOCAL Month;
FORM planReport
OBJECTS dp = (d = DATE, p = Plan)
PROPERTIES extractDay(d), type(p), amount(p)
FILTERS
d >= toDateFormat((CONCAT '-', filterYear(), filterMonth(), 1), 'YYYY-MM-DD')
AND
d <= lastDayOfMonth(toDateFormat((CONCAT '-', filterYear(), filterMonth(), 1), 'YYYY-MM-DD'))
;
原始类型 DATE(以及 INTEGER、STRING 等)上的常规 FILTERS >= 和 <=(没有其他过滤器)将不起作用,因为它不会编译为常规 SQL 查询来获取所有键(即日期种类)。
为了解决这个问题,时间系统模块有一个迭代属性:
当使用此属性时,由于RECURSION运算符,将构建一个带有 CTE 的查询,这将生成一个包含所有类型日期的表。
因此上面的代码需要改成这样:
然而,由于DATE和Plan没有任何关联,结果将是笛卡尔积。也许您需要根据计划使用 GROUP SUM/MAX/AGGR 计算 DATE 的金额,然后仅输出 DATE 类对象 (OBJECTS d = DATE) 的所有属性。