我正在尝试根据数据表中的日期列以编程方式过滤 SpotFire 可视化效果。更具体地说,我正在尝试过滤可视化效果,以便它仅显示最近完成的月份和前一个月之间的时间段(月环比比较)。例如,如果当前为 6 月,则可视化效果应仅显示 4 月至 5 月。
我尝试使用 DateTime 对象来完成此操作,但我遇到了一些问题。
today = DateTime.Today
momEnd = today.AddDays(-today.Day)
momBeg = today.AddMonths(-2).AddDays(-today.Day+1)
for visual in Document.ActivePageReference.Visuals:
if visual.Title == myVis.Title:
newVis = visual.As[Visualization]()
newVis.XAxis.Range = AxisRange(momBeg, momEnd)
此代码确实筛选可视化效果,但它仅显示 2016 年 1 月,而此时应显示 2019 年 4 月至 5 月。
打印 newVis.XAxis.Range 变量将显示以下字符串:
AxisRange[Low=4/1/2019 12:00:00 AM, High=5/31/2019 12:00:00 AM]
这应该是正确的,但正如我提到的,我没有从可视化中看到正确的行为。
任何修复或替代方案将不胜感激。
编辑:我正在使用专有数据,所以我无法提供示例数据。我实际上为此找到了解决方法。我没有使用 XAxis.Range,而是直接过滤可视化数据。基本上我替换了
newVis.XAxis.Range = AxisRange(momBeg, momEnd)
跟:
newVis.Data.WhereClauseExpression = "[" + timeColumn + "] >= Date(Year(DateTimeNow()),Month(DateTimeNow())-2,1) AND [" + timeColumn + "] <= DateAdd("day",-1,date(Year(DateTimeNow()),Month(DateTimeNow()),1))"
其中 timeColumn 是包含日期值的数据列
我不确定你为什么要通过IronPython这样做。您可以直接在可视化效果上使用数据限制。
(DateDiff('month',
Date(DatePart('year', [Timestamp]), DatePart('month', [Timestamp]), 1),
DateTimeNow()) > 1
And DateDiff('month',
Date(DatePart('year', [Timestamp]), DatePart('month', [Timestamp]), 1),
DateTimeNow()) < 3)
我应该提到我解决了我的问题,并将解决方案作为对我原始问题的编辑。