I created a Solarwinds Disk Usage Report using MS SQL reporting service. The SQL query should work for Solarwinds Report Writer too. The report will collect fixed disk usage (%) information for all nodes from 4 different days (yesterday(day1) and 2, 7 and 31 days ago). Then calculate the daily(day2-day1), weekly(day7-day1), monthly(daye31-day1) increase. If the usage is > 95%, or Daily Increase > 10%, or Weekly Increase > 20% or Monthly Increase > 30%, the information will be displayed. Because the calculation is only based on 4 days data, the results may not always 100% correct, but it should close the true picture which can be used to analyse the disk usage trend. Hope this helpful.
=========================================
Select TbDay1.NodeName, TbDay1.NodeID, TbDay1.DiskName, TbDay1.DiskID, TbDay1.Disk_Size,
TbDay1.Day1, TbDay1.Day1_DiskUsed, TbDay1.Day1_PercentDiskUsed,
TbDay2.Day2, TbDay2.Day2_DiskUsed, TbDay2.Day2_PercentDiskUsed,
Round(TbDay1.Day1_PercentDiskUsed - TbDay2.Day2_PercentDiskUsed,2) AS DailyIncrease,
TbDay7.Day7, TbDay7.Day7_DiskUsed, TbDay7.Day7_PercentDiskUsed,
Round(TbDay1.Day1_PercentDiskUsed - TbDay7.Day7_PercentDiskUsed,2) AS WeeklyIncrease,
TbDay30.Day30, TbDay30.Day30_DiskUsed, TbDay30.Day30_PercentDiskUsed,
Round(TbDay1.Day1_PercentDiskUsed - TbDay30.Day30_PercentDiskUsed,2) AS MonthlyIncrease
FROM
(((
(SELECT
Nodes.NodeID AS NodeID,
Nodes.Caption AS NodeName,
Volumes.VolumeID AS DiskID,
Volumes.Caption AS DiskName,
CONVERT(date,VolumeUsage.DateTime) AS Day1,
ROUND(AVG(VolumeUsage.DiskSize)/1024/1024/1024,1) AS Disk_Size,
ROUND(AVG(VolumeUsage.AvgDiskUsed)/1024/1024/1024,1) AS Day1_DiskUsed,
ROUND(AVG(VolumeUsage.PercentDiskUsed),1) AS Day1_PercentDiskUsed
FROM
(Nodes INNER JOIN Volumes ON (Nodes.NodeID = Volumes.NodeID)) INNER JOIN VolumeUsage ON (Volumes.VolumeID = VolumeUsage.VolumeID)
WHERE
(Volumes.VolumeType ='Fixed Disk')
AND ( DateTime BETWEEN DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) AND DATEADD(hh, -22, DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))))
GROUP BY CONVERT(date,VolumeUsage.DateTime), Nodes.NodeID, Volumes.VolumeID, Nodes.Caption, Volumes.Caption
) TbDay1
INNER JOIN
(SELECT
Nodes.NodeID AS NodeID,
Nodes.Caption AS NodeName,
Volumes.VolumeID AS DiskID,
Volumes.Caption AS DiskName,
CONVERT(date,VolumeUsage.DateTime) AS Day2,
ROUND(AVG(VolumeUsage.DiskSize)/1024/1024/1024,1) AS Disk_Size,
ROUND(AVG(VolumeUsage.AvgDiskUsed)/1024/1024/1024,1) AS Day2_DiskUsed,
ROUND(AVG(VolumeUsage.PercentDiskUsed),1) AS Day2_PercentDiskUsed
FROM
(Nodes INNER JOIN Volumes ON (Nodes.NodeID = Volumes.NodeID)) INNER JOIN VolumeUsage ON (Volumes.VolumeID = VolumeUsage.VolumeID)
WHERE
(Volumes.VolumeType ='Fixed Disk')
AND ( DateTime BETWEEN DATEADD(dd, -2, DATEDIFF(dd, 0, GETDATE())) AND DATEADD(hh, -22, DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE()))))
GROUP BY CONVERT(date,VolumeUsage.DateTime),Nodes.NodeID, Volumes.VolumeID, Nodes.Caption, Volumes.Caption
) TbDay2
ON (TbDay1.NodeID = TbDay2.NodeID AND TbDay1.DiskID = TbDay2.DiskID)
)
INNER JOIN
(SELECT
Nodes.NodeID AS NodeID,
Nodes.Caption AS NodeName,
Volumes.VolumeID AS DiskID,
Volumes.Caption AS DiskName,
CONVERT(date,VolumeUsage.DateTime) AS Day7,
ROUND(AVG(VolumeUsage.DiskSize)/1024/1024/1024,1) AS Disk_Size,
ROUND(AVG(VolumeUsage.AvgDiskUsed)/1024/1024/1024,1) AS Day7_DiskUsed,
ROUND(AVG(VolumeUsage.PercentDiskUsed),1) AS Day7_PercentDiskUsed
FROM
(Nodes INNER JOIN Volumes ON (Nodes.NodeID = Volumes.NodeID)) INNER JOIN VolumeUsage ON (Volumes.VolumeID = VolumeUsage.VolumeID)
WHERE
(Volumes.VolumeType ='Fixed Disk')
AND ( DateTime BETWEEN DATEADD(dd, -7, DATEDIFF(dd, 0, GETDATE())) AND DATEADD(hh, -22, DATEADD(dd, -6, DATEDIFF(dd, 0, GETDATE()))))
GROUP BY CONVERT(date,VolumeUsage.DateTime),Nodes.NodeID, Volumes.VolumeID, Nodes.Caption, Volumes.Caption
) TbDay7
ON (TbDay7.NodeID = TbDay2.NodeID AND TbDay7.DiskID = TbDay2.DiskID)
)
INNER JOIN
(SELECT
Nodes.NodeID AS NodeID,
Nodes.Caption AS NodeName,
Volumes.VolumeID AS DiskID,
Volumes.Caption AS DiskName,
CONVERT(date,VolumeUsage.DateTime) AS Day30,
ROUND(AVG(VolumeUsage.DiskSize)/1024/1024/1024,1) AS Disk_Size,
ROUND(AVG(VolumeUsage.AvgDiskUsed)/1024/1024/1024,1) AS Day30_DiskUsed,
ROUND(AVG(VolumeUsage.PercentDiskUsed),1) AS Day30_PercentDiskUsed
FROM
(Nodes INNER JOIN Volumes ON (Nodes.NodeID = Volumes.NodeID)) INNER JOIN VolumeUsage ON (Volumes.VolumeID = VolumeUsage.VolumeID)
WHERE
(Volumes.VolumeType ='Fixed Disk')
AND ( DateTime BETWEEN DATEADD(dd, -31, DATEDIFF(dd, 0, GETDATE())) AND DATEADD(hh, -22, DATEADD(dd, -30, DATEDIFF(dd, 0, GETDATE()))))
GROUP BY CONVERT(date,VolumeUsage.DateTime),Nodes.NodeID, Volumes.VolumeID, Nodes.Caption, Volumes.Caption
) TbDay30
ON (TbDay7.NodeID = TbDay30.NodeID AND TbDay7.DiskID = TbDay30.DiskID)
)
WHERE TbDay1.Day1_PercentDiskUsed > 95.0 OR Round(TbDay1.Day1_PercentDiskUsed - TbDay2.Day2_PercentDiskUsed,2) > 10.0 OR Round(TbDay1.Day1_PercentDiskUsed - TbDay7.Day7_PercentDiskUsed,2) > 20.0 OR Round(TbDay1.Day1_PercentDiskUsed - TbDay30.Day30_PercentDiskUsed,2) > 30.0
ORDER BY TbDay1.NodeName, TbDay1.DiskName