MDX显示一个人的所有月份,如果任何月份在单独的维度中具有值“Y”

时间:2017-01-20 22:52:13

标签: ssas mdx

有一个时髦的问题我试图解决,如果你是如此善良。

措施: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年,他们不应该出现因为我只想询问所选时期的标志。

2 个答案:

答案 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;