如果某个月不是某个日期范围内的完整太阳月,如何隐藏小计列



在现金流报告中,我创建了一个带有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。

最新更新