使用DAX表达式计算Power Pivot中计算列的日期范围时出现问题

时间:2014-02-28 07:55:12

标签: excel-2010 powerpivot

根据应用需要,需要在Power Pivot报告中执行以下任务。 (不在SQL中)。

我在一个表中有两个日期列

列听到

 /* Column Heads :*/   Activity| City |  Start_Date  |  End_Date

  /*  Row 1 :*/           A1   |  C1  |  01/01/2014  |  05/01/2014

  /*  Row 2 :*/           A1   |  C1  |  06/01/2014  |  07/01/2014

  /*  Row 3 : */          A2   |  C2  |  06/01/2014  |  07/01/2014

  /*  Row 4 : */          A3   |  C3  |  03/01/2014  |  04/01/2014

预期输出如 - 如果用户选择日期范围02/01/2014至07/01/2014

列标题

City  | #StartCount| #EndCount 

 C1   |      1     |    2   

 C2   |      1     |    1

 C3   |      1     |    1  

此处#StartCount

  • 需要按城市分组。
  • 其不同活动的计数
  • 它应将日期边界视为:所有活动的开始日期'更大或更有效(> =)'输入开始日期和(小于'<')结束日期

此处#EndCount

  • 需要按城市分组。
  • 其不同活动的计数
  • 它应该将日期边界视为:所有活动的结束日期'较少或有效(< =)'输入结束日期和(大于'>')结束日期

请你建议我用这种情况表达。 可以使用计算的度量或dax ..

2 个答案:

答案 0 :(得分:0)

我可以匹配您的示例数据的唯一方法是忽略您问题中的“不同活动”要求,因为城市C1只有活动A1,但最终结果计为2。 / p>

我也可能做了很多可能错误的假设,因为你的样本数据非常有限。但这是我的尝试:

declare @Activities table (Activity char(2),City char(2),Start_Date date,End_Date date)
insert into @Activities (Activity,City,Start_Date,End_Date) values
('A1','C1','20140101','20140105'),
('A1','C1','20140106','20140107'),
('A2','C2','20140106','20140107'),
('A3','C3','20140103','20140104')

declare @Start date
declare @End date
select @Start = '20140102', @End = '20140107'

select City,
    SUM(CASE WHEN Start_Date < @Start THEN 0 ELSE 1 END) as StartCount,
    SUM(CASE WHEN End_Date > @End THEN 0 ELSE 1 END) as EndCount
from @Activities where Start_Date < @End and End_Date > @Start
group by City

(其中一些依赖于SQL Server语法,但由于您没有使用数据库系统标记您的问题,我可以选择)

答案 1 :(得分:0)

SQL Server语法

select activity, city, 
    SUM(case when (startdate  >= '2014/01/02' and startdate <= '2014/01/07') then 1 else 0 End) as IsStart, 
    SUM(case when (enddate  >= '2014/01/02' and enddate <='2014/01/07') then 1 else 0 End) as IsEnd
from temp
Group by  activity, city

演示:http://sqlfiddle.com/#!3/b2a64/1