如果有基于 Cut 日期的数据,则处理最后两行
Manipulating last two rows if there's data based on a Cut date
这个问题是 ...
的一个稍微不同的版本
现在我使用 Measures
而不是 Calculated columns
并且日期是静态的而不是基于下拉列表。
这是 Power BI 测试 .pbix
文件:
https://drive.google.com/open?id=1OG7keqhdvDUDYkFQFMHyxcpi9Zi6Pn3d
此打印屏幕描述了我要完成的工作:
基本上 P6 Update
table 中的日期用作 切割日期 并且将 fixed\static。它是从 Excel sheet 导入的,用户可以根据需要对其进行自定义。
以下是在测试数据 table 中为 P6 Update
日期找到匹配行时应该发生的情况:
- 列
Earned Daily
- 如果有下一行,则必须将其值与下一行相加;
列 Earned Cum
- 必须获取下一行的值;
前面的所有行都应该保持不变,即它们的值不会改变;
所有后续行的值都必须指定为 0。
例如:
如果 P6 Update
是 2018 年 5 月 1 日,这是预期的结果:
1-May 7,498 52,106
2-May 0 0
如果 P6 Update
是 2018 年 4 月 30 日,这是预期的结果:
30-Apr 13,173 50,699
1-May 0 0
2-May 0 0
如果 P6 Update
是 2018 年 4 月 29 日,这是预期的结果:
29-Apr 11,906 44,608
30-Apr 0 0
1-May 0 0
2-May 0 0
等等...
希望这是有道理的。
这在 Excel 中更容易,但在 Power BI 中尝试这样做让我抓狂。
我会忽略之前问过的相关问题,从头开始。
首先,创建一个度量:
Current Earn =
CALCULATE (
SUM( 'Test data'[Value]),
'Test data'[Act Rem] = "Actual Units",
'Test data'[Type] = "Current"
)
此措施将用于其他措施,以避免您一次又一次地输入所有这些条件("Actual Units" 和 "Current")。将 re-use 措施用于其他措施是一个很好的做法 - 节省工作,使代码更清晰,更易于重构。
创建另一个度量:
Cut Date = SELECTEDVALUE('P6 Update'[Date])
只要我们需要一个截止日期,我们就会使用这个措施。请注意,它不一定是 hard-coded - 如果 P6 table 包含日期列表,您可以从日期创建一个 pull-down 切片器,并且可以选择 cut-off 动态日期。该公式将正常工作。
创建第三个度量:
Next Earn =
VAR Cut_Date = [Cut Date]
VAR Current_Date = MAX ( 'Test data'[Date] )
VAR Next_Date = Current_Date + 1
VAR Current_Earn = [Current Earn]
VAR Next_Earn = CALCULATE ( [Current Earn], 'Test data'[Date] = Next_Date )
RETURN
SWITCH (
TRUE,
Current_Date < Cut_Date, Current_Earn,
Current_Date = Cut_Date, Current_Earn + Next_Earn,
BLANK ()
)
我不确定 "Next Earn" 是否适合它,希望您能找到一个更直观的名称。它的工作方式:我们将所有必要的输入保存到变量中,然后使用 SWITCH 函数来定义结果。希望是 self-explanatory。 (注意:如果您需要高于截止日期的 0,请将 BLANK() 替换为 0)。
最后,我们定义了累积收入的衡量标准。它不需要任何特殊的逻辑,因为之前的措施已经妥善解决了它:
Cum Earn =
VAR Current_Date = MAX('Test data'[Date])
RETURN
CALCULATE(
[Next Earn],
FILTER(ALL('Test data'[Date]), 'Test data'[Date] <= Current_Date))
结果:
这个问题是
现在我使用 Measures
而不是 Calculated columns
并且日期是静态的而不是基于下拉列表。
这是 Power BI 测试 .pbix
文件:
https://drive.google.com/open?id=1OG7keqhdvDUDYkFQFMHyxcpi9Zi6Pn3d
此打印屏幕描述了我要完成的工作:
基本上 P6 Update
table 中的日期用作 切割日期 并且将 fixed\static。它是从 Excel sheet 导入的,用户可以根据需要对其进行自定义。
以下是在测试数据 table 中为 P6 Update
日期找到匹配行时应该发生的情况:
- 列
Earned Daily
- 如果有下一行,则必须将其值与下一行相加; 列
Earned Cum
- 必须获取下一行的值;前面的所有行都应该保持不变,即它们的值不会改变;
所有后续行的值都必须指定为 0。
例如:
如果 P6 Update
是 2018 年 5 月 1 日,这是预期的结果:
1-May 7,498 52,106
2-May 0 0
如果 P6 Update
是 2018 年 4 月 30 日,这是预期的结果:
30-Apr 13,173 50,699
1-May 0 0
2-May 0 0
如果 P6 Update
是 2018 年 4 月 29 日,这是预期的结果:
29-Apr 11,906 44,608
30-Apr 0 0
1-May 0 0
2-May 0 0
等等...
希望这是有道理的。
这在 Excel 中更容易,但在 Power BI 中尝试这样做让我抓狂。
我会忽略之前问过的相关问题,从头开始。
首先,创建一个度量:
Current Earn =
CALCULATE (
SUM( 'Test data'[Value]),
'Test data'[Act Rem] = "Actual Units",
'Test data'[Type] = "Current"
)
此措施将用于其他措施,以避免您一次又一次地输入所有这些条件("Actual Units" 和 "Current")。将 re-use 措施用于其他措施是一个很好的做法 - 节省工作,使代码更清晰,更易于重构。
创建另一个度量:
Cut Date = SELECTEDVALUE('P6 Update'[Date])
只要我们需要一个截止日期,我们就会使用这个措施。请注意,它不一定是 hard-coded - 如果 P6 table 包含日期列表,您可以从日期创建一个 pull-down 切片器,并且可以选择 cut-off 动态日期。该公式将正常工作。
创建第三个度量:
Next Earn =
VAR Cut_Date = [Cut Date]
VAR Current_Date = MAX ( 'Test data'[Date] )
VAR Next_Date = Current_Date + 1
VAR Current_Earn = [Current Earn]
VAR Next_Earn = CALCULATE ( [Current Earn], 'Test data'[Date] = Next_Date )
RETURN
SWITCH (
TRUE,
Current_Date < Cut_Date, Current_Earn,
Current_Date = Cut_Date, Current_Earn + Next_Earn,
BLANK ()
)
我不确定 "Next Earn" 是否适合它,希望您能找到一个更直观的名称。它的工作方式:我们将所有必要的输入保存到变量中,然后使用 SWITCH 函数来定义结果。希望是 self-explanatory。 (注意:如果您需要高于截止日期的 0,请将 BLANK() 替换为 0)。
最后,我们定义了累积收入的衡量标准。它不需要任何特殊的逻辑,因为之前的措施已经妥善解决了它:
Cum Earn =
VAR Current_Date = MAX('Test data'[Date])
RETURN
CALCULATE(
[Next Earn],
FILTER(ALL('Test data'[Date]), 'Test data'[Date] <= Current_Date))
结果: