【问题标题】:Dimensions dragged in filter pane do not slice scoped measures在筛选器窗格中拖动的维度不会对范围内的度量进行切片
【发布时间】:2018-01-08 20:29:37
【问题描述】:

度量“X”从不同的事实表中获取其值。让我们考虑时间(财政周、月)维度和渠道维度。对于这两个维度中的不同属性组合,X 会从不同的表中获取其值,如下所示:

  1. Week + Channel - 从表 FactTrafficByWeekChannel 获取
  2. Week - 从表 FactTrafficByWeek 获取
  3. 月 + 频道 - 从表 FactTrafficByMonthChannel 获取
  4. 月 - 从表 FactTrafficByMonth 获取

为了实现这一点,我将这些事实添加到多维数据集并创建了一个计算度量和范围脚本来覆盖范围。以下是范围脚本语句:`

CALCULATE; 
CREATE MEMBER CURRENTCUBE.[Measures].[Y]
 AS (0), 
FORMAT_STRING = "Standard",
VISIBLE = 1;
Scope 
([Measures].[Y],[Dim Time].[Fiscal Week].[Fiscal Week].Members
 ) ; 
    This = [Measures].[X - Vw Fact Total Weekly Traffic];
End Scope ;
Scope 
([Measures].[Y],[Dim Time].[Fiscal Week].[Fiscal Week].Members,
[Dim Campaign].[Channel].[Channel].Members
 ) ; 
    This = [Measures].[X - Vw Fact Total Weekly Traffic By Channel];
End Scope ;
Scope 
 ([Measures].[Y],[Dim Time].[Fiscal Month].[Fiscal Month].Members
 ) ; 
    This = [Measures].[X - Vw Fact Monthly Traffic];
End Scope ;
Scope 
 ([Measures].[Y],[Dim Time].[Fiscal Month].[Fiscal Month].Members,
[Dim Channel].[Channel].[Channel].Members
 ) ; 
    This = [Measures].[X - Vw Fact Monthly Traffic By Channel];
End Scope ;

`

上面的代码在浏览窗格中拖动相应的维度属性时可以正常工作,但在添加到过滤器窗格时无法正常工作。 Fiscal Week dimension dragged to browsing pane 这行得通。但 Fiscal Week dimension dragged to filter pane 不起作用。 这是因为添加到筛选器窗格的属性被添加为子多维数据集语句。 当属性也被拖动到过滤器窗格时,有没有办法实现这一点? 时间维度 属性关系(如 Greg 所问)

非常感谢任何帮助。提前致谢

【问题讨论】:

  • 为什么有 4 个度量组?总结一周的所有频道是否与您从周谷物事实表中获得的结果不符?周数是否累积到财政月?当然,如果按渠道按周的数据可以汇总到其他三个汇总级别,那么它肯定会简化问题并消除对任何 MDX 的需求。
  • 不,周数据不能累积到会计月。基本上,每周、每月和每季度的新访客数量也不同。为了简化我使用周和月的问题。
  • 问题是没有办法知道在多维多维数据集中的过滤器窗格中选择的属性,因为 DAX 中有一个函数“IsFiltered”来识别属性是否被过滤。不幸的是,MDX 中没有等效的功能
  • 没有专家可以帮助回答这个问题吗?
  • 您能否详细说明按周计算新访客数与按月计算的差异?我添加了一个答案,展示了如何检测多选,但怀疑 4 种以上的措施几乎不可能正确。但如果你解释一下新访客计数,也许有更直接的方法。

标签: ssas mdx


【解决方案1】:

一种方法是使用动态命名集,如“使用动态集检测子选择”部分中的 post 中所述。

将此添加到现有 MDX 脚本的底部:

Create dynamic named set CurrentCube.[SelectedWeeks] as [Dim Time].[Fiscal Week].[Fiscal Week].Members;

Scope 
 ([Measures].[Y],[Dim Time].[Fiscal Month].[All],
[Dim Time].[Fiscal Week].[All],
[Dim Channel].[Channel].[All]
 ) ; 
    This = iif(SelectedWeeks.Count<[Dim Time].[Fiscal Week].[Fiscal Week].Members.Count,[Measures].[X - Vw Fact Total Weekly Traffic],0);
End Scope ;

但这种方法的问题在于,它会完全失去控制,检查通道上的单选与周上的多选等的所有排列。而且它可能会很慢。

相反,我建议从您的 MDX 脚本中删除为 Y 创建成员语句,并向您的“按周按渠道”度量组添加一个新度量。调用新的物理度量 Y 并将其设为 Sum 并将其连接到每行返回 0 的新 SQL 列。这只是一个占位符度量,您将对其进行范围分配。为什么是物理的?例如,当您在通道级别对物理度量进行范围分配时,该分配会聚合起来。 (计算度量的分配不会聚合。)这有助于解决多选问题。例如,您在通道级别分配,然后即使在多选下,所有通道编号也是正确的。

话虽如此,我并不乐观,您将能够找出范围分配的正确顺序,以便通过适当的多选处理,您的所有 4 个度量都显示在您想要的位置。但请随意尝试。

如果您对多维数据集的那部分感到满意​​但发现随后的范围分配正在改变您满意的部分。

如果您需要进一步的帮助,请附上 Dim Time 的“属性关系”选项卡的屏幕截图。

【讨论】:

  • 动态设置和比较选定的周数和总条目非常有用。但是当我在过滤器窗格中仅选择月份时。SelectedWeeks 集将获得所选月份的周数。在以下代码中,第一个 IIF 条件满足并显示周数据,而不是应该采用月数据 This = IIF( SelectedWeeks.Count
  • 是的。这是在同一维度的周和月级别上检测多选的复杂性的一部分。你解释得很简洁。这就是我不看好你当前的设计会成功的原因之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
相关资源
最近更新 更多