首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 求去年本月销量情况.解决后100分. [已结贴,结贴人:iloveyoujia]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iloveyoujia
    • 等级:
    发表于:2008-02-26 00:48:43 楼主
    数据如下:
    维度结构如下:


    销售时间
        销售年
        销售月
        销售日

    2007年
            2月
    2007-2-1      10
    2007-2-2      20

    2008年
            2月
    2007-2-1      100
    2007-2-2      200


    计算表达式:
    (
      ParallelPeriod
              (
                      [销售时间].[销售年-月-日].[销售时间],
                      1,
    [销售时间].[销售年-月-日].CurrentMember
              ),
                  [Measures].[数量]
      )


    比如报表选择时间:                      2008-2-2 
    那么我要求去年本月销量                2007-2-2          为30即可.(去年同期求和,我怎么也取不到它的值)

    上面的计算如何写?  我在Cube中使用,所以不支持写MDX查询语句...  谢谢...
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-26 11:54:301楼 得分:10
    问一下,不用MDX,那你要用SQL写?如果SQL写的话,以下的脚本你用用看是否可以:
    Select Convert(int,Convert(Char,N.Date,112)) As Date,Sum(M.Sales) As YTDSales From CSDN As M
    Inner Join CSDN As N On (Convert(int,Convert(Char,M.Date,112)) +10000) <=Convert(int,Convert(Char,N.Date,112))
    Group By Convert(int,Convert(Char,N.Date,112))

    如果你的Date是INT型的,就直接用:
    Select N.Date,Sum(M.Sales) As YTDSales From CSDN As M
    Inner Join CSDN As N On (M.Date+10000) <=N.Date
    Group by N.Date
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-26 17:18:502楼 得分:10

    如果用SQL的话,不用将时间转来转去吧.
    函数: DATEADD 和 DATEDIFF
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laowan688
    • 等级:
    发表于:2008-03-28 17:15:493楼 得分:10
    关键是取到月首和月末
    declare  @mon  datetime ,
              @begin nvarchar(10)
      set  @mon='2008-03-12'
      set  @begin='-01'
      select dateadd(year,-1,convert(CHAR(7),@mon,120)+@begin)
      select dateadd(day ,-1,dateadd(month, 1, dateadd(year,-1,convert(CHAR(7),@mon,120)+@begin)))
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laowan688
    • 等级:
    发表于:2008-03-28 17:16:254楼 得分:0
    if object_id('tempdb..#test') is not null
    drop table #test
    create table #test
    (
    date_w datetime,
    money_w money
    )
    insert #test (date_w,money_w) values('2007-03-03',20)
    insert #test (date_w,money_w) values('2007-03-04',30)

    declare  @mon  datetime ,
                @begin nvarchar(10)

      set  @mon='2008-03-12'
      set  @begin='-01'
      select dateadd(year,-1,convert(CHAR(7),@mon,120)+@begin)
      select dateadd(day ,-1,dateadd(month, 1, dateadd(year,-1,convert(CHAR(7),@mon,120)+@begin)))

    select sum(money_w) from #test where date_w between dateadd(year,-1,convert(CHAR(7),@mon,120)+@begin)  and dateadd(day ,-1,dateadd(month, 1, dateadd(year,-1,convert(CHAR(7),@mon,120)+@begin)))

    直接运行看结果

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-02 19:52:455楼 得分:10
    so easy

    使用函数进行转换

    to_number(to_char(period_date,'YYYYMMDD') = TO_NUMBER(TO_CHAR(TRUNC(SYSDATE),'YYYYMMDD'))- 100
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-06 21:29:276楼 得分:10
    (
      ParallelPeriod
              (
                      [销售时间].[销售年-月-日].[销售时间],
                      1,
    [销售时间].[销售年-月-日].CurrentMember
              ),
                  [Measures].[数量]
      ) 

    你这个只能得到 2007-2-2 的数据吧?
    没有累加啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 09:30:377楼 得分:0
    该回复于2008-05-04 10:37:05被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 13:25:438楼 得分:0
    该回复于2008-05-04 10:20:45被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 16:23:179楼 得分:0
    该回复于2008-05-04 09:54:46被版主删除
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved