Power BI - 计算支付百分比与预期百分比?
Power BI - calculate % paid vs expected?
我的报告中有以下 2 个 table(它们都使用 contractID 加入 SSAS 模型)。
仍在学习 DAX,如果我将下面的内容过于复杂,请见谅..
时间表 table 告诉我们每个合同 ID,我们期望在任何时间点收到多少钱。所以我们可以看到,在 2016 年 1 月 28 日,我们预计会有 233.61 英镑,然后在 2019 年 2 月 1 日,我们预计还会有 58.4 英镑。这也需要是一个 运行 总数。所以在 2019 年 2 月 1 日,预计总数为 292.01。
下面支付的金额 table 是我们为合同支付的所有款项。我想在任何时间点计算付款与预期的百分比。
因此,如果我查看 2016 年 2 月 1 日,我会看到 57% 的百分比,因为我们当时预计会有 233.61,而我们只有 134.26(200 英镑减去 -65.74)
理想情况下,我每月只能看到这个,所以每年每月支付的百分比与预期的总数相比。
有谁知道实现此目标的最佳方法吗?我想我可能需要创建一个不相关的日期 table 来锚定我需要的措施。但真的不知道从哪里开始呢?
已更新
我已经将您的数据样本放入模型中,它看起来如下
计划table
付款table
在 ContractId 上添加两个 table 之间的关系。
然后添加措施如下(记得分别更改列名):
Payment Amount = SUM( AmountPaid[PaymentAmt] )
Expected Amount = SUM( Schedule[ExpAmnt] )
Expected Amount Running Total =
VAR maxPD = MAX( AmountPaid[PaymentDate] )
VAR result =
CALCULATE(
[Expected Amount],
FILTER(
Schedule,
Schedule[ScheduleDate] <= maxPD
)
)
RETURN
result
Payment Amount Running Total =
VAR maxPD = MAX( AmountPaid[PaymentDate] )
VAR minPD =
CALCULATE(
MIN( AmountPaid[PaymentDate] ),
ALLSELECTED( AmountPaid )
)
VAR result =
CALCULATE(
[Payment Amount],
ALL( AmountPaid[PaymentDate] ),
AmountPaid[PaymentDate] >= minPD,
AmountPaid[PaymentDate] <= maxPD
)
RETURN
result
ALL
和 ALLSELECTED
函数允许您向报告添加 PaymentDate 切片器。 付款金额运行 总计 将根据该日期范围选择动态计算。
% of expected Payment 给你百分比。
% of expected Payment =
DIVIDE( [Payment Amount Running Total], [Expected Amount Running Total] )
最后的结果是:
请注意,我在报告中使用的是我的母语。所以 Rok 是 Year 而 Miesiąc 是 Month。月份如下十月、二月、五月、六月、八月、一月、七月。
希望它对您有所帮助,并且对您有用。
编辑:
将 REMOVEFILTERS
添加到 预期金额 运行 总计 。在您的情况下,某些 ContractIds 在 Schedule table 中可能没有相关行。然后出现 BLANKS。为防止出现这种情况,您必须通过 CALCULATE
更改上下文,方法是从主 table.
中删除所有过滤器
Expected Amount Running Total =
VAR maxPD = MAX( AmountPaid[PaymentDate] )
VAR result =
CALCULATE(
[Expected Amount],
REMOVEFILTERS(AmountPaid),
Schedule[ScheduleDate] <= maxPD
)
RETURN
result
我已将一些额外的行添加到我的示例数据集中,仅 AmountPaid table。请参阅下面的输出。第一个 table 没有 REMOVEFILTERS
部分。
我的报告中有以下 2 个 table(它们都使用 contractID 加入 SSAS 模型)。
仍在学习 DAX,如果我将下面的内容过于复杂,请见谅..
时间表 table 告诉我们每个合同 ID,我们期望在任何时间点收到多少钱。所以我们可以看到,在 2016 年 1 月 28 日,我们预计会有 233.61 英镑,然后在 2019 年 2 月 1 日,我们预计还会有 58.4 英镑。这也需要是一个 运行 总数。所以在 2019 年 2 月 1 日,预计总数为 292.01。
下面支付的金额 table 是我们为合同支付的所有款项。我想在任何时间点计算付款与预期的百分比。
因此,如果我查看 2016 年 2 月 1 日,我会看到 57% 的百分比,因为我们当时预计会有 233.61,而我们只有 134.26(200 英镑减去 -65.74)
理想情况下,我每月只能看到这个,所以每年每月支付的百分比与预期的总数相比。
有谁知道实现此目标的最佳方法吗?我想我可能需要创建一个不相关的日期 table 来锚定我需要的措施。但真的不知道从哪里开始呢?
已更新
我已经将您的数据样本放入模型中,它看起来如下
计划table
付款table
在 ContractId 上添加两个 table 之间的关系。
然后添加措施如下(记得分别更改列名):
Payment Amount = SUM( AmountPaid[PaymentAmt] )
Expected Amount = SUM( Schedule[ExpAmnt] )
Expected Amount Running Total =
VAR maxPD = MAX( AmountPaid[PaymentDate] )
VAR result =
CALCULATE(
[Expected Amount],
FILTER(
Schedule,
Schedule[ScheduleDate] <= maxPD
)
)
RETURN
result
Payment Amount Running Total =
VAR maxPD = MAX( AmountPaid[PaymentDate] )
VAR minPD =
CALCULATE(
MIN( AmountPaid[PaymentDate] ),
ALLSELECTED( AmountPaid )
)
VAR result =
CALCULATE(
[Payment Amount],
ALL( AmountPaid[PaymentDate] ),
AmountPaid[PaymentDate] >= minPD,
AmountPaid[PaymentDate] <= maxPD
)
RETURN
result
ALL
和 ALLSELECTED
函数允许您向报告添加 PaymentDate 切片器。 付款金额运行 总计 将根据该日期范围选择动态计算。
% of expected Payment 给你百分比。
% of expected Payment =
DIVIDE( [Payment Amount Running Total], [Expected Amount Running Total] )
最后的结果是:
请注意,我在报告中使用的是我的母语。所以 Rok 是 Year 而 Miesiąc 是 Month。月份如下十月、二月、五月、六月、八月、一月、七月。
希望它对您有所帮助,并且对您有用。
编辑:
将 REMOVEFILTERS
添加到 预期金额 运行 总计 。在您的情况下,某些 ContractIds 在 Schedule table 中可能没有相关行。然后出现 BLANKS。为防止出现这种情况,您必须通过 CALCULATE
更改上下文,方法是从主 table.
Expected Amount Running Total =
VAR maxPD = MAX( AmountPaid[PaymentDate] )
VAR result =
CALCULATE(
[Expected Amount],
REMOVEFILTERS(AmountPaid),
Schedule[ScheduleDate] <= maxPD
)
RETURN
result
我已将一些额外的行添加到我的示例数据集中,仅 AmountPaid table。请参阅下面的输出。第一个 table 没有 REMOVEFILTERS
部分。