Excel formula DAX/PowerPivot查询函数用于在一段时间内分散聚合值
我正在尝试计算DAX表达式[用于Excel 2010中的MS PowerPivot],以便在应用该表达式的范围内均匀分布值的总和,并在给定的时间跨度/时段内重新求和。在SQL server中交叉应用是很简单的,尽管每次尝试都会得到相同的错误结果 我已将MS Project的输出保存为Excel并使用PowerQuery导入/转换,因此开始和结束/结束日期是正确的日期,{X}h和{Y}d是整数,{X}h和{Y}d之间的日历日持续时间已为模型计算/格式化。我还创建了一个dates表,其中包含从第一个日期到最后一个日期的连续日期,以及一个years表,其中包含我要汇总的4位数年份的字符串表示 模型看起来是这样的: 我已经在ResourceQuery、TaskQuery和AssignmentQuery表(全部直接取自MS项目输出)和ServiceAreaQuery(TaskQuery中的唯一值…基本上是子项目)上创建了计算列。每个都有一个简单的度量值,即“分配的小时数”列的总和 数据本身看起来像您期望的Project2010文件,并且有{start_date}、{finish_date}和小时数。任务的日期可以跨越1天到5年……这就是我的问题所在 如何拆分/分块长时间运行任务的预加值,以匹配我要查找的时间间隔 即使我使用date表中的year列,时间智能也无法捕捉到它&对于计算(SUM(FILTER(COUNTROWS(DATESBETWEEN))类型的东西,我已经没有主意了 我试图找出两个中间步骤,但都无济于事。我可以想象,它们都是通过相同的有效功能来解决的,以实现小时、服务区域、资源、年份的最终目标 要显示的透视表Excel formula DAX/PowerPivot查询函数用于在一段时间内分散聚合值,excel-formula,business-intelligence,powerpivot,cross-join,dax,Excel Formula,Business Intelligence,Powerpivot,Cross Join,Dax,我正在尝试计算DAX表达式[用于Excel 2010中的MS PowerPivot],以便在应用该表达式的范围内均匀分布值的总和,并在给定的时间跨度/时段内重新求和。在SQL server中交叉应用是很简单的,尽管每次尝试都会得到相同的错误结果 我已将MS Project的输出保存为Excel并使用PowerQuery导入/转换,因此开始和结束/结束日期是正确的日期,{X}h和{Y}d是整数,{X}h和{Y}d之间的日历日持续时间已为模型计算/格式化。我还创建了一个dates表,其中包含从第一个
- 按资源、按年份划分的小时数
- 按服务区域、按年份划分的小时数
- 小时数,按服务区域,按资源,按年份
- 选择该人员的工作时间
- 从筛选器或列标题中选择筛选到的期间中的天数(例如月/年/季度/任意日期)
- 计算每天的小时数
- 获取筛选周期中的工作日
- 从重叠中选择小时数的总和
[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] )
)
)
)
)
[原始分配小时数]:=
分开(
算计(
[小时],
滤器(
转让查询,
AssignmentQuery[开始日期]=最大值(日期[日期])
)
)
,(COUNTROWS)(
日期介乎(
日期[日期]
,FIRSTDATE(AssignmentQuery[开始日期])
,LASTDATE(AssignmentQuery[完成日期])
)
)
)
)
考虑到您有一个相对复杂的模型,并且您的需求并不完全简单,我不确定这是否能让您一直做到这一点,但希望它至少能激励您根据自己的目的修改模型,或者开始更详细的讨论
以下措施有效地将小时相加,将其应用于日期介于开始和结束之间的日期,并将总数除以天数。稍微复杂的是,这需要在包含小时数的表中的日期和行上迭代一次
您可能会遇到一个问题,我使用的是一个未连接的日期表,如果您无法在模型中复制这种情况,那么我们需要尝试使用一些ALL()函数
下面的解决方案假设一个名为“data”的表有4列:id、开始、结束、值,一个名为calendar的表有2列Date和Month
措施1:计算小时数
[Hours] =SUM(Data[Value])
措施2:将小时数应用于日期并除以日期数
[Hours Apportioned Raw] =
CALCULATE ([Hours],
FILTER (
Data,
Data[Start] <= MAX ( Calendar[Date] )
&& Data[END] >= MAX ( Calendar[Date] )
)
)
/ ( MAX ( Data[End] ) - MAX ( Data[Start] ) )
希望这是有意义的,非常简单的测试模型:
注意:您需要下载模型,而不仅仅是在浏览器中查看它。Brilliant-必须做一些小的更改,以说明某些东西可以在同一天开始和结束(通过减法返回天数为零)&&如果在这段时间内没有工作,用一个除法来防止被零除,但是你让我做到了。非常感谢。我会把更新的版本放在我的问题里。太棒了,很高兴能帮上忙!请将其标记为答案:-)
=
SUMX (
VALUES ( Calendar[Date] ),
SUMX ( VALUES ( Data[ID] ), [Hours Apportioned RAW] )
)