我是PowerBI的新手。这可能让我感到头疼,并且很难把我的头围绕着上下文/过滤器以及它们如何与其他嵌套过滤器结合使用。无论如何,这是我的问题。
我正在尝试创建一个报告,该报告显示一个程序收取的工时数与其标准雇员可以工作的总时数的百分比。我创建了一个公司日历,其中包含一年中的所有日期,无论是否为工作日。我有一个“小时”列,如果是工作日,则其中有8个,如果是假日或周末,则为0。
这通常称为FTE或全职等效。
我的问题是,当向上或向下钻取时,我的总数将获得不同的值。这似乎是由于矩阵表的上下文。当它是一年的“总计”时,它使用的是工作年的全部2000小时,而实际上只有1600左右,因为它只有9月。
为解决此问题,我尝试编写以下公式,但该公式也无法正常工作。如果有更简单的方法来解决此问题,或者我应该采用哪种方法。无法在其他帖子中找到答案。
基本上,当我处于2018年水平时,我希望它是“ 2018年实际总小时数/年初至今2018年总标准小时数”。当它在Qtr上时,我希望它是'Total Qtr 1 Actual Hours / Total Qtr 1 2018 Cal Hours。向下钻取月份时,我希望它是“ 2018年1月总计实际小时数/ 2018年1月总计校准时数”。
谢谢。
表示例
校准表
Date Holiday Hours
01/01/2018 Yes 8
01/02/2018 No 8
...
...
小时收费表
EmpID Name Project Date Hours
1234 Bryan 123454.1 01/22/2018 2.3
1111 Steve 123456.1 01/15/2018 2.8
0156 Stu 123483.1 01/10/2018 2.8
...
...
公式
FTE By Drill =
VAR Actual Hours = Sum(Timesheet[Hours])
VAR Cal Hours = Sum(Calendar[Hours])
Actual Hours / IF(
ISFILTERED('Calendar'[Date].[year]),
TOTALYTD([Cal Hours],'Calendar'[Date]),
IF(
ISFILTERED('Calendar'[Date].[Quarter]),
TOTALQTD([Cal Hours],'Calendar'[Date]),
IF(
ISFILTERED('Calendar'[Date].[Month]),
TOTALMTD([Cal Hours],'Calendar'[Date])
,0)
)
)
答案 0 :(得分:0)
使用VAR时,实际上是在进行设置。一旦您将其称为VAR,它就会不进行更改,因为它对上下文更改不非常敏感。您还使用了过多的IF(您说过您不熟悉DAX,这是2个经典错误)。 您要尝试获取的是“实际工时”百分比。在DAX中,您将使用SUMMARIZE获得度量,然后对其进行额外的计算。
所以现在您知道VAR是如何工作的。
在DAX中,您处理TOTALS。如果您的DimDate表中有一个“已经”字段,则可以使用它,并按YEAR 2018过滤,并SUMMARIZE本月的小时数和已工作的小时数。查看该表以查看其中的内容。现在,您可以计算工作百分比。
代码片段仅是以下行的内容:
SELECTCOLUMNS ("WorkPercent", WorkHous/ActualHous
SUMMARIZECOLUMNS (
FILTER ("WorkHours", [WORKHOURS],
"ActualHours", [Actual hours worked],
DimDate[Year] = 2018 && HasBeen = TRUE))
答案 1 :(得分:0)
我建议您在“小时收费表”(时间表)中创建一个计算列,该列存储每个日期的压延小时数。像这样:
Cal Hours = LOOKUPVALUE(Calendar[Hours],'Calendar'[Date],Timesheet[Date])
或者,如果两个表之间存在关系:
Cal Hours = RELATED(Calendar[Hours])
现在可以轻松地找到实际小时数与日历小时数的百分比的方法:
[FTE By Drill] := Sum(Timesheet[Hours]) / Sum(Timesheet[Cal Hours])