我正在尝试计算 DAX 表达式 [for MS PowerPivot in Excel 2010] 以将值的总和均匀分布在它所应用的范围内,并在给定的时间跨度/周期内重新求和。在 SQL Server 中交叉应用是微不足道的,尽管每次尝试都会得到相同的错误结果。
我已将 MS Project 的输出保存为 Excel 并使用 PowerQuery 导入/转换,因此开始和结束/结束日期是正确的日期,{X}h 和 {Y}d 是整数,日历日持续时间介于它们已经为模型计算/格式化。我还创建了一个日期表,其中包含从第一个日期到最后一个日期的连续日期,以及一个年份表,其中包含我想要总结的 4 位数字年份的字符串表示形式。
该模型如下所示:
我在 ResourceQuery、TaskQuery 和 AssignmentQuery 表(全部直接取自 MS Project 输出)和 ServiceAreaQuery(TaskQuery 的唯一值……本质上是子项目)上创建了计算列。每个都有一个简单的度量,即分配的小时数列的总和。
数据本身看起来就像您对 Project 2010 文件所期望的一样,并且具有 {start_date}、{finish_date} 和小时数。一项任务的日期可以从 1 天到 5 年不等……这就是我的问题所在。
如何拆分/分块长时间运行的任务的预求和值以匹配我正在寻找的时间间隔?
即使我使用日期表中的年份列,时间智能也无法捕捉到它,而且我对CALCULATE(SUM(FILTER(COUNTROWS(DATESBETWEEN))))类型的东西的想法已经用完了。
我试图弄清楚有两个中间步骤无济于事。我想它们都可以通过相同的有效功能来解决,以达到小时、服务区域、资源、年份的最终目标。
要显示的数据透视表
- 按资源的小时数,按年
- 按服务区域的小时数,按年
为了显示最终目标
- 小时,按服务区域,按资源,按年
您可以在下面的输出中看到问题。
请注意,当使用分配的总小时数和来自 AssignmentQuery 的资源名称时,我得到了正确的总和,但是当使用任何日期值时……我只得到相对于开始日期的小时数(模型中的活动关系)。我需要的是让这些时间均匀地分布在它们适用的时期(因此,如果某物在 2016 年 1 月 1 日和 19 年 1 月 1 日之间有 1,000 小时,我预计每年显示 333 小时) .
我最初的想法是选择器/过滤器/计算功能需要执行以下操作:
- 选择人员的营业时间
- 从过滤器或列标题中选择过滤到(例如月/年/季度/任何)期间的天数
- 计算每天的小时数
- 获取过滤周期内的工作日
- 从重叠中选择小时的总和
任何想法都非常感谢!我愿意做一些额外的 ETL/数据创建作为 PowerQuery 步骤,但我真的很想为此找出正确的 DAX 表达式,以便它可以作为项目中的时间切片器/过滤器使用。
提前致谢。
**编辑以发布所提供答案的修订版**
[Hours Apportioned Raw] :=
DIVIDE (
CALCULATE (
[Hours],
FILTER (
AssignmentQuery,
AssignmentQuery[Start_Date] <= MAX ( Dates[Date] )
&& AssignmentQuery[Finish_Date] >= MAX ( Dates[Date] )
)
)
, ( COUNTROWS (
DATESBETWEEN (
Dates[Date]
, FIRSTDATE ( AssignmentQuery[Start_Date] )
, LASTDATE ( AssignmentQuery[Finish_Date] )
)
)
)
)