使用 dax PBI 计算按比例分配价值

问题描述 投票:0回答:1

我需要用 dax 计算按比例分配的值。 我有 2 张桌子:

日历表:包含日期和工作天数

日期 工作天数
2024年1月4日 0
2024年2月4日 1
2024年3月4日 1
2024/04/04 1
2024年5月4日 1
2024年6月4日 0
2024年7月4日 0
2024/08/04 1
2024年9月4日 1
2024年4月10日 1
11/04/2024 1

4月份我们有21个工作日

目标表:包含按日期列出的目标值。

对象日期 对象
2024年5月4日 200
2024年6月4日 150
2024年7月4日 50
2024年4月10日 300
2024年4月12日 788
2024年4月15日 450
16/04/2024 325
2024年4月18日 6510
2024年4月19日 20
2024年4月22日 241
2024年4月24日 178

我需要计算当月的比例: 除 ((sum(obj) , sum(工作天数))*sum(从当月第一天到今天的工作天数)

对于这个例子:

  • 总和(对象)= 6212
  • 本月总工作天数 = 21
  • 从第一天到今天的总和(工作天数)= 20

除 (6212 , 21)*20 = 5916,19

powerbi dax powerbi-desktop
1个回答
0
投票

这是您正在寻找的东西吗?我创建了一个名为 ProRate_02 的新度量,它基本上使用给定月份的过滤器上下文(您也可以选择一个月或当月)根据一个月内的工作日数与实际过去的天数。

ProRate_02 = 
VAR ObjectiveSum = SUM(ObjTable_02[Obj])
VAR TotalWorkingDays = SUM(CalendarTable_02[Days worked])

-- Get full days worked
VAR CurrentDay = TODAY()
VAR _EndOfMonth = MAX(CalendarTable_02[Date])
VAR MonthComplete = IF(CurrentDay > _EndOfMonth, 1, 0)

VAR FullDaysWorked = 
    IF(MonthComplete,
        TotalWorkingDays,
        CALCULATE(SUM(CalendarTable_02[Days worked]), FILTER(CalendarTable_02, CalendarTable_02[Date] < CurrentDay))
    )
RETURN DIVIDE(ObjectiveSum, TotalWorkingDays) * FullDaysWorked

该措施的作用如下:

  • ObjectiveSum:此变量捕获当前过滤器上下文的 ObjTable_02 的总目标。
  • TotalWorkingDays:这汇总了当月 CalendarTable_02 中的总工作日。
  • 当前日期 计算:确定今天的日期。
  • 月份完成度检查:检查当前日期是否超出该月的最后一天,以确定该月是否完整。
  • 已过工作日:如果该月不完整,则会重新计算除今天之外的工作日。后者是假设您不想在当前工作日通过之前将其包括在内。
  • 最终计算:然后通过将总目标除以总工作日数并乘以迄今为止的总工作天数来计算按比例分配的目标

附加信息:

  • 我添加了 2024 年 3 月的一些虚拟数据,并在目标表和日历表之间使用了 1-1 关系。也许可以使用断开连接的表,或者如果目标表保持 1-1 关系,则只需将目标表与日历表合并在一起。
  • 我还包含一个计算列来获取表格视觉对象的 YEARMONTH 变量。

我的结果: 结果表

我的桌子: 日历日期表 目标表

我的数据模型:数据模型

© www.soinside.com 2019 - 2024. All rights reserved.