SSRS时间筛选问题

water792 2010-04-21 04:44:26
现在用户要求做一个业绩汇总报表
要求有开始时间和结束时间
(定义开始时间参数为FromDateDate,结束时间参数为ToDateDate,时间格式举例为[Date].[Date].&[2010-03-01T00:00:00])
但报表显示的内容是这一段时间内,每一周的业绩情况。
周的定义方式是,以开始时间为第1天,后7天为第1周,再7天为第2周,依此类推……

举例来说
假设用户选择的开始时间是3.1-3.31
最后实现的报表内容为

周 业绩
第1周(3.1-3.7) 1000
第2周(3.8-3.14) 500
第3周(3.15-3.21) 300
第4周(3.22-3.28) 8000
第5周(3.29-3.31) 30000
实际第5周数据就只有3天

假设假设用户选择的开始时间是3.3-3.18
最后实现的报表内容为
周 业绩
1周(3.3-3.9)  1000
2周(3.10-3.16) 6000
3周(3.17-3.18) 3000
实际第3周只有2天

请教大家,我应该如何去设这个时间周期呢?

...全文
177 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Me_online 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 water792 的回复:]
我是通过MDX链接到SSAS的,但是链接后是直接从AS中取字段,并未直接写MDX语句
[/Quote]
也就是说你的 MDX 是自动生成的。为了实现你的目的,你需要编辑自动生成的 MDX 查询... 建议你参考一下 MDX 手册,然后重点看看 Lag()函数是如何使用的。
water792 2010-04-22
  • 打赏
  • 举报
回复
我是通过MDX链接到SSAS的,但是链接后是直接从AS中取字段,并未直接写MDX语句
Me_online 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 water792 的回复:]
引用 4 楼 me_online 的回复:
如果你使用 MDX 查询,可以使用 Lag() 函数,它用来返回到固定成员指定位置的成员,经常用来实现类似你的这种要求。


不好意思,对MDX还不是很熟,能说的具体一点吗
[/Quote]

SSRS 有最常用的两种方式连接到数据源:一是通过 T-SQL 连接到 SQL Server 数据库;另外一种是通过 MDX 连接到 SSAS, 你是通过哪种方式访问数据源的?
water792 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 me_online 的回复:]
如果你使用 MDX 查询,可以使用 Lag() 函数,它用来返回到固定成员指定位置的成员,经常用来实现类似你的这种要求。
[/Quote]

不好意思,对MDX还不是很熟,能说的具体一点吗
rmljoe 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 rmljoe 的回复:]

SQL code

--------------------------
-- 模拟原始数据

……
[/Quote]

不好意思,不懂SSRS是什么,只是在查询器里做的。
rmljoe 2010-04-21
  • 打赏
  • 举报
回复

--------------------------
-- 模拟原始数据

if object_id('tb') is not null
drop table tb
go
create table tb
(fDate datetime,
fQty int
)
go
insert tb
select '2010-03-02',100 union all
select '2010-03-03',115 union all
select '2010-03-04',116 union all
select '2010-03-05',117 union all
select '2010-03-06',118 union all
select '2010-03-07',119 union all
select '2010-03-08',120 union all
select '2010-03-09',121 union all
select '2010-03-10',122 union all
select '2010-03-11',123 union all
select '2010-03-12',124 union all
select '2010-03-13',125 union all
select '2010-03-14',126 union all
select '2010-03-15',127 union all
select '2010-03-16',128 union all
select '2010-03-17',129 union all
select '2010-03-18',130
go
-- select * from tb

--------------------------
-- 建自定义的周函数

if object_id('fweek') is not null
drop function fweek
go
create FUNCTION fweek
(@FromDate DateTime,@CalaDate datetime)
RETURNS int
AS
begin
declare @fweek int
declare @days int
set @days = datediff(dd,@fromdate,@caladate)
set @fweek = cast(@days / 7 as int) + 1

return @fweek
end
go

--------------------------
-- 数据测试
declare @fromdate datetime
declare @todate datetime


select @fromdate = '2010-03-02',@todate = '2010-03-17'

select
dbo.fweek(@fromdate,fDate) as ffweek,
sum(fQty) as ffTotalQty
from tb
where fDate >= @fromdate and fDate <= @todate
group by dbo.fweek(@fromdate,fDate)

--------------------------
-- 测试结果
/*
(17 row(s) affected)
ffweek ffTotalQty
----------- -----------
1 805
2 868
3 257

(3 row(s) affected)

*/
wjz748305545 2010-04-21
  • 打赏
  • 举报
回复
接分,顶
shizheyangde 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 me_online 的回复:]
如果你使用 MDX 查询,可以使用 Lag() 函数,它用来返回到固定成员指定位置的成员,经常用来实现类似你的这种要求。
[/Quote]
uping
Me_online 2010-04-21
  • 打赏
  • 举报
回复
如果你使用 MDX 查询,可以使用 Lag() 函数,它用来返回到固定成员指定位置的成员,经常用来实现类似你的这种要求。
dawugui 2010-04-21
  • 打赏
  • 举报
回复
不懂,帮顶,学习,蹭分.


或者找剪剪
--小F-- 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]
BI的帮顶
[/Quote]
.
htl258_Tony 2010-04-21
  • 打赏
  • 举报
回复
BI的帮顶

695

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧