SSAS计算成员知道用户是否正在使用报告filter

我正在尝试编写一个计算成员,其行为有所不同,具体取决于用户是通过该成员进行筛选,还是将其作为行或列在其数据透视表(使用Excel)上进行拖动。

规则如下:1.如果用户在Excel中使用date维数作为报表filter,那么计算的成员应该从被过滤的所有date中获取最大date。 2.如果他们在数据透视表上有行date维度,那么我需要应用ClosingPeriod和其他一些逻辑。

请试试这个。 这个想法来自这里 。

基本上,dynamic命名集代表了报告filter中的内容。 并且EXISTING关键字将date列表修剪到当前单元格的filter上下文,让您检测是否有一个月在行上。 比较计数,你可以检测到用户做了什么。

 CREATE HIDDEN DYNAMIC SET CURRENTCUBE.SelectedDays as [Date].[Date].[Date].Members; CREATE MEMBER CURRENTCUBE.[Measures].[My Calc] as CASE WHEN SelectedDays.Count > {existing [Date].[Date].[Date].Members}.Count THEN Tail({existing [Date].[Date].[Date].Members},1).Item(0).Item(0).Name WHEN SelectedDays.Count < [Date].[Date].[Date].Members.Count THEN Tail(SelectedDays,1).Item(0).Item(0).Name END 

性能将会不太好。 我怀疑用户会与你的计算结果混淆。 如果你想描述更多的业务场景,我可以推荐一个更好的方法。