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
其中:
- 简单保证金是按每月 Rev 的百分比累计计算的
- 项目完成百分比是根据赚取收入的 "active" 个月计算的
- 累计简单保证金乘以完成百分比
- 特定月份赚取的实际保证金是两个月之间的差值。
请注意,每月收入不一定是连续的。
不知道如何在 power pivot 中重新创建它,任何建议都会受到欢迎。
干杯
假设
- 您的项目 2 数据应该 运行 从 2015 年 1 月 11 日到 2015 年 1 月 9 日(而不是个别的 12 月日期)每月
- 您的数据在一个名为 'ProjectMargins'
的 table 中
- 你的 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 中的日期字段。
我需要类似这样的解决方案:
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
其中:
- 简单保证金是按每月 Rev 的百分比累计计算的
- 项目完成百分比是根据赚取收入的 "active" 个月计算的
- 累计简单保证金乘以完成百分比
- 特定月份赚取的实际保证金是两个月之间的差值。
请注意,每月收入不一定是连续的。
不知道如何在 power pivot 中重新创建它,任何建议都会受到欢迎。
干杯
假设
- 您的项目 2 数据应该 运行 从 2015 年 1 月 11 日到 2015 年 1 月 9 日(而不是个别的 12 月日期)每月
- 您的数据在一个名为 'ProjectMargins' 的 table 中
- 你的 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 中的日期字段。