SSRS转换毫秒时间和过滤报告

SSRS converting millisecond time and the filtering report

第一次提问者,对于任何含糊不清或违反规则的问题,我们深表歉意

我们使用 ServiceDesk 应用程序,它可以生成各种预配置的报告并显示它们背后的 SQL 查询。 然后,我获取这些报告并从 SQL 服务器报告服务器创建一个墙板,以提供一些 "live" 管理信息。

应用程序记录的工作日志带有时间戳,似乎引用了自 1/1/1970 以来的毫秒数。例如,我可以从应用程序生成 SQL 查询以过滤 "this month",它们将时间戳放入我的报告中,例如下面的报告

SELECT ad.ORG_NAME "Account",wo.WORKORDERID "Request ID",ct.DESCRIPTION
 "Time Spent Description",ct.TIMESPENT "Time Spent",wtd.NAME "Worklog    
Type",ct.TS_STARTTIME "Time Spent Starttime",rctd.FIRST_NAME "Time Spent 
Technician",cd.CATEGORYNAME "Category",qd.QUEUENAME "Group",lvd.LEVELNAME 
"Level" 
FROM WorkOrder wo LEFT JOIN WorkOrderToCharge wotoc ON   
wo.WORKORDERID=wotoc.WORKORDERID 
LEFT JOIN ChargesTable ct ON  wotoc.CHARGEID=ct.CHARGEID 
LEFT JOIN SDUser rcti ON  ct.TECHNICIANID=rcti.USERID 
LEFT JOIN AaaUser rctd ON rcti.USERID=rctd.USER_ID 
LEFT JOIN WorkLogTypeDefinition wtd ON ct.WORKLOGTYPEID=wtd.WORKLOGTYPEID 
LEFT JOIN WorkOrder_Queue woq ON wo.WORKORDERID=woq.WORKORDERID 
LEFT JOIN QueueDefinition qd ON Woq.QUEUEID=qd.QUEUEID 
LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORDERID 
LEFT JOIN CategoryDefinition cd ON wos.CATEGORYID=cd.CATEGORYID 
LEFT JOIN LevelDefinition lvd ON   wos.LEVELID=lvd.LEVELID 
INNER JOIN AccountSiteMapping asm ON  wo.siteid=asm.siteid INNER JOIN 
AccountDefinition ad ON asm.accountid=ad.org_id 
WHERE  (((ct.TS_STARTTIME >= 1441062000000) AND 
((ct.TS_STARTTIME != 0) AND (ct.TS_STARTTIME IS NOT NULL))) AND 
((ct.TS_STARTTIME <= 1443653999000) AND (((ct.TS_STARTTIME != 0) AND 
(ct.TS_STARTTIME IS NOT NULL)) AND (ct.TS_STARTTIME != -1))))  AND 
wo.ISPARENT='1'

问题在于,在本月的第一天,我必须返回服务台应用程序 - 运行 再次报告以更新 tiem 值以反映当前月份 - 然后转移查询它生成的 SSRS 查询。我希望能够删除此查询的 ct.ts.starttime 元素,而是在 SSRS 数据集中设置一个过滤器,以仅显示 ct.ts.startime 在当前月份内的结果。

恐怕我的 SQL 技能很少,所以如果有人能指出正确的方向,我将不胜感激

谢谢

BFG

您只需更改 WHERE 子句以使用 starttime.

将其限制在当前月份内
WHERE DATEADD(s, ct.TS_STARTTIME / 1000, '1970-01-01') BETWEEN CAST(DATEADD(D, 1 - DATEPART(d, GETDATE()), GETDATE()) AS DATE) AND CAST(DATEADD(m, 1, DATEADD(D, 1 - DATEPART(d, GETDATE()), GETDATE())) AS DATE)
AND ct.TS_STARTTIME IS NOT NULL AND wo.ISPARENT='1'

我看到的唯一问题是您没有说明(并且可能不知道)正在使用哪个版本的 SQL(SQL 服务器、Oracle SQL、MySQL...)。不幸的是,其中大多数使用不同的函数来获取当前日期。我使用了 SQL Server 的 GETDATE() 函数。