DAX / PP 将可变项目利润汇总到一列

DAX / PP Aggregate a variable project margin down a column

我需要类似这样的解决方案:

DAX running total (or count) across 2 groups

但是稍微复杂一些。

我有以下内容: (为布局道歉 - 我不能 post 图片)

Name      Date       Monthly Rev  Total Rev   Margin( % Rev)
Proj 1    1/08/2014   0              7000     15%
Proj 1    1/09/2014   1000           7000     15%
Proj 1    1/10/2014   1000           7000     15%
Proj 1    1/11/2014   1000           7000     15%
Proj 1    1/12/2014   0              7000     15%
Proj 1    1/01/2015   0              7000     15%
Proj 1    1/02/2015   2000           7000     15%
Proj 1    1/03/2015   2000           7000     15%
Proj 2    1/11/2014   0              16000    10%
Proj 2    1/12/2014   1500          16000     10%
Proj 2    2/12/2014   1500           16000    10%
Proj 2    3/12/2014   1500          16000     10%
Proj 2    4/12/2014   1500           16000    10%
Proj 2    5/12/2014   2000           16000    10%
Proj 2    6/12/2014   2000            16000   10%
Proj 2    7/12/2014   0               16000   10%
Proj 2    8/12/2014   2000            16000   10%
Proj 2    9/12/2014   2000            16000   10%
Proj 2    10/12/2014  2000           16000    10%

Monthly rev 是一个月收到的收入,total 是项目总价值,margin 是收入的百分比。 table 按 Date.

链接到日期 table

我需要按日期显示边距(table 中还有其他描述性列用于切片)但是边距计算并不简单。

在 excel table 中它看起来像这样:

Cumm simple margin  | Completion|   Cumm complex margin |   Margin earnt
0                        0%                 0                   0
150                      20%               30                   30
300                      40%               120                  90
450                     60%                 270                150
450                     60%                270                  0
450                      60%              270                   0
750                      80%              600                  330
1050                    100%               1050               450
0                        0%                  0                  0
150                      11%               17                   17
300                      22%               67                  50
450                     33%                150                   83
600                      44%               267                  117
800                      56%                444                 178
1000                    67%                 667                 222
1000                    67%                667                   0
1200                   78%                 933                  267
1400                    89%               1244                  311
1600                    100%              1600                  356

其中:

  1. 简单保证金是按每月 Rev 的百分比累计计算的
  2. 项目完成百分比是根据赚取收入的 "active" 个月计算的
  3. 累计简单保证金乘以完成百分比
  4. 特定月份赚取的实际保证金是两个月之间的差值。

请注意,每月收入不一定是连续的。

不知道如何在 power pivot 中重新创建它,任何建议都会受到欢迎。

干杯

假设

  1. 您的项目 2 数据应该 运行 从 2015 年 1 月 11 日到 2015 年 1 月 9 日(而不是个别的 12 月日期)每月
  2. 您的数据在一个名为 'ProjectMargins'
  3. 的 table 中
  4. 你的 DateDim table 叫做 'Reporting Dates'

那么这些就是您需要的 DAX 度量(尽管可能有更简单的方法来实现这些结果):

[MonthlyRev]:=SUM(ProjectMargins[Monthly Rev])

[ActiveMonth]:=CALCULATE(COUNTROWS('ProjectMargins'),FILTER('ProjectMargins',[MonthlyRev]>0))

[AllActiveMonths]:=CALCULATE([ActiveMonth],ALL('Reporting Dates'[Date]))

[Completion]:=DIVIDE(CALCULATE([ActiveMonth],FILTER(ALL('Reporting Dates'[Date]),'Reporting Dates'[Date] <= MAX(ProjectMargins[Date]))),[AllActiveMonths])

如果您需要计算 TotalRev,请根据您的每月 Rev,而不是它出现在原始来源中 table: [TotalRev]:=IF(ISBLANK(MAX(ProjectMargins[Margin( % Rev)])),BLANK(),CALCULATE([MonthlyRev],ALL('Reporting Dates'[Date])))

[Rev%]:=MAX(ProjectMargins[Margin( % Rev)])

[Cumm Simple Margin]:=CALCULATE([MonthlyRev]*[Rev%],FILTER(ALL('Reporting Dates'[Date]),'Reporting Dates'[Date] <= MAX(ProjectMargins[Date])))

[Cumm Complex Margin]:=[Completion]*[Cumm Simple Margin]

[Previous Month Cumm Complex]:=CALCULATE([Cumm Complex Margin], DATEADD('Reporting Dates'[Date],-1,MONTH))

[Margin Earnt]:=IF([Cumm Complex Margin]>0,[Cumm Complex Margin]-[Previous Month Cumm Complex],BLANK())

注意:这假定边距永远不会为负。

确保数据透视表中使用的是 DateDim table 中的日期字段,而不是事实 table 中的日期字段。