在现金流报告中,我创建了一个带有TransactionDate列的tablix,该列填充了@starate和@enddate参数范围。例如,如果用户选择:
@stardate='2020-01-01'@enddate='2020-03-02'
我需要创建动态的月份小计,但前提是该月份是所选范围内的完整太阳月(从1到31天(。在图像示例中,一月和二月的小计必须可见,三月的小计必须隐藏。有什么建议吗?
谢谢Hawa
样本图像
我要做的第一件事是创建一个包含日期的表。有很多关于如何做到这一点的例子,比如这个
https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/
假设您现在有一个日期表,其中至少包含以下可用数据
TheDate TheMonth TheYear
2020-01-01 1 2020
2020-01-02 1 2020
...
2020-01-31 1 2020
2020-02-01 2 2020
...
2020-12-31 12 2020
...
等等…
你现在可以得到一个月最后日期的简单列表
CREATE VIEW LastMonthDates AS
SELECT TheYear, TheMonth, MAX(TheDate) AS LastDate
FROM myDatesTable
GROUP BY TheYear, TheMonth
这将给我们
TheYear TheMonth LastDate
2020 1 2020-01-31
2020 2 2020-02-29
...
等等
如果将其连接到主数据中,并将LastDate
列添加到数据集查询结果中,则结果类似于
Cluster1 Cluster2 TransDate Amount LastDate
Ins ROW1 2020-02-28 221.35 2020-02-29
您最上面的列组隐藏属性将类似于
=MAX(Fields!TransDate.Value, "MonthColumGroup") <> FIRST(Fields!LastDate.Value, "MonthColumGroup")
因此,如果月份组中的最高日期与同一月份组中最后一个日期列不相同,则隐藏的将是True
将"MonthColumGroup"
更改为外月份组的实际名称,它必须用引号括起来,并且区分大小写。
如果您在执行此操作时遇到问题(分组可能会导致问题(,您可以在数据集查询中执行同样的操作,方法是将其扩展为具有执行相同类型测试的列,并根据月份是否完成将其设置为1或0。