有一个时髦的问题我试图解决,如果你是如此善良。
措施:BillableHours
尺寸:
人员(EmployeeId,EmployeeName)
分组(EmployeePeriodKey,ActiveFlag)
PeriodCalendarYear,CalendarQuarter,CalendarPeriod)
分组维度具有特定于句点中某个人的标记和计算,因此PK是EmployeeId和CalendarPeriod的组合。
数据如下:
EmployeeId CalendarPeriod ActiveFlag BillableHours
123 201501 Y 10
123 201502 Y 20
123 201503 N 30
123 201504 Y 40
人们正在过滤“活动标志”=“Y”并且在结果中缺少“N”行,这不是所希望的。无论我设计什么样的过滤器都需要足够灵活,以至于在员工层面我需要知道一个员工的价值是否为“Y”,只是查询所选择的期间。
场景1:用户为201501:201504期间选择员工123,并将假设标志过滤为“Y” - 可计费小时数应为100,而不是70。
场景2:用户为期间201501:201503选择员工123,并将假设标志过滤为“Y” - 可开票时间应为60,而不是30。
情形3:用户选择201503期间的员工123,并将假设标志过滤为“Y” - 可结算小时数应为0,而不是30.因为在此选定的一组时段中,此人在任何时段都不活动
我对所有兄弟姐妹都不感兴趣,只是个人层面的兄弟姐妹。如果没有选择此人,我需要知道在过滤期间对人员级别执行此检查。如果他们有以下
ActiveFlag:“Y”
财年:2016年
Group BillableHours
IT咨询1000
HR Consulting 1500
可以理解,这些总金额代表2016财年任何一部分活跃的每位员工的工作时间,无论是全部12个月还是仅1年。如果某人在前一年活跃,但未在2016年,他们不应该出现因为我只想询问所选时期的标志。
答案 0 :(得分:1)
你想在非空时看到Y值吗?否则N + Y值?
IIF(
[Measures].[BillableHours] > 0,
([Grouping].[ActiveFlag].[All],[Measures].[BillableHours]),
[Measures].[BillableHours]
)
答案 1 :(得分:0)
我需要完成以上操作,即评估特定员工的所有值,以查看该员工的任何值是否有效。这样做的关键最终是使用EXISTING。另外,使用NON_EMPTY_BEHAVIOR会减少评估周期,因为如果行在一段时间内不活动,则无需评估行。我在下面发布了MDX。
CREATE HIDDEN UtilizedFTESummator;
[Measures].[UtilizedFTESummator] = Iif([Measures].[Is Active For Utilization Value] > 0,[Measures].[Period FTE],NULL);
NON_EMPTY_BEHAVIOR([Measures].[UtilizedFTESummator]) = [Measures].[Is Active For Utilization Value];
//only include this measure if the underlying employee has values in their underlying data for active in utilization
CREATE MEMBER CURRENTCUBE.[Measures].[FTE Active Utilization]
AS
SUM
(
EXISTING [Historical Personnel].[Employee Id].[Employee Id],
[Measures].[UtilizedFTESummator]
),VISIBLE=0;