所以,我对我前一段时间问过的问题有一个扩展(参考:DAX / PowerPivot query functions to spread aggregated values over time period),我一直在打我的头 .

我有相同的一般数据(MS项目导出的输出),其中包含任务,持续时间,任务等 . 任务已根据与之相关的项目/应用程序进行分类,并且我可以进行数小时的传播随着时间的推移没有问问题在于将自定义字段中的值传播到所有其他字段 .

现有枢轴的示例输出:

Current Output Table

我想要的是让“ALL”中的所有内容均匀分布在所有其他的Related_Applications上 - 大约有20个,并且有一个表格,所以我会使用 COUNTROWS() .

使用上面的例子,我想要的是让每个ALL的小时(和名称)显示在每个Related_Applications中 . 例如 . 2015年第2个月的信息保障和安全应按小时/国家(所有(相关应用))进行传播 . 同样,如果您要使用系统管理员值,则需要传播并添加到现有行值 . DAX的目标输出类似于CrossJoin,最终结果如下:

Desired Output Table

我一直在想我很接近,并为“SpreadValuesSheet”添加了一个虚拟表来使用ALLEXCEPT和ALL函数 . 它包含应该传播的值(目前有3x ... ALL,PM和CM) . 我有另一个“ApplicationsSheet”表,它有30x左右的应用程序,那里应该传播的时间 .

@ current的数据模型设置如下:

Data Model

我可以单独得到这些作品;但似乎无法将措施重新放回到AssignmentsSheet中(因此我可以有时间传播,按资源过滤等)...我通过以下计算列和度量的定义来管理:

AssignmentsSheet:

MeasureSumScheduledWork:=sum([Scheduled_Work])
Hours Apportioned Raw:=DIVIDE (
    CALCULATE (
                [MeasureSumScheduledWork],
                FILTER (
                    AssignmentsSheet,
                    AssignmentsSheet[Start_Date] <= MAX ( DateSheet[Date] )
                        && AssignmentsSheet[Finish_Date] >= MAX ( DateSheet[Date] )
                        )
                )
    , ( COUNTROWS(DATESBETWEEN ( DateSheet[Date], FIRSTDATE ( AssignmentsSheet[Start_Date] ), LASTDATE ( AssignmentsSheet[Finish_Date] ))))
)

SpreadHoursMeasure:=SUMX (
    VALUES ( DateSheet[Date] ),
    SUMX ( VALUES ( AssignmentsSheet[Index] ), [Hours Apportioned RAW] )
)

哪个效果很好 . 为了分散其他人,我开始遇到问题 . 我目前坚持以下措施:

UFSpreadHoursMeasure:=CALCULATE(
SUMX (
    VALUES ( DateSheet[Date] ),
    SUMX( VALUES ( AssignmentsSheet[Index]), [Hours Apportioned Raw])
), RELATEDTABLE(SpreadValuesSheet))

SpreadAllValuesMeasure:=[SpreadHoursMeasure]+CALCULATE([UFSpreadHoursMeasure],all(ApplicationsSheet))

SpreadValuesSheet:

Calculated Column: 
SumHours =[SpreadHoursMeasure]
MeasureSpreadHours:=sum([SumHours])

ApplicationsSheet

Calculated Columns:
SumHours=[SpreadHoursMeasure]
SpreadHours=[MeasureSpreadHours]/COUNTROWS(ApplicationsSheet)
TotalHours==[SumHours]+[SpreadHours]
MeasureSpreadSumTotalHours:=sum([TotalHours])