Lau*_*nce 4 sql-server ssas cube dimensional-modeling
我有一个包含来自零售业务的库存盘点数据的多维数据集。它有 2 个度量组 - 一个包含在每个盘点批次中计算的库存单位数(与产品、批次和时间维度相关),另一个包含产品价格(仅与产品维度相关)。
price 度量组中的度量使用 Min 和 Max 运算符(即它们显示 Products 维度的选定成员的最低或最高价格)。
我似乎已经正确配置了多维数据集和维度(价格度量按预期显示)......除了以下情况:
如果我在 Excel 中查询多维数据集并按时间和批次获取单位,我会看到预期的结果(见下图,按时间 = 2015 过滤,并隐藏没有数据的行),即仅包含所选单位事实数据的批次时间维度成员。
如果我现在添加一个价格度量(不更改任何过滤器),Units total 不变(如预期),但我现在可以看到Batch 维度中的每个成员(见下图)。这对最终用户来说是一个问题,因为他们只想查看先前选择的批次中产品的价格。
从技术角度来看,这是有道理的 - 价格事实与时间无关,因此不能像单位那样被我的时间过滤器过滤。
我可以做些什么(在多维数据集设计或 Excel 中)消除给定过滤器没有单位的 Batch 成员?注意:我无法让用户编写 MDX 查询 - 报告构建需要保持“点击”!
编辑 27/1(添加额外的屏幕截图以说明根据 TomV 的回答设置 Ignore Unrelated Dimensions = False 的奇怪副作用)
正如您正确指出的那样,当您尝试跨维度显示度量时会发生这种情况,而这些维度与其没有关系。
你基本上有 2 个选择
IgnoreUnrelatedDimensions
MDX
解决方案我建议你尝试的IgnoreUnRelatedDimensions
第一次,因为这些措施将得到更好的聚集,并且NonEmptyCrossJoins
将能够从利益Bitmap Indexes
使用时Attribute Relationships
被定义。
由于可能存在性能问题,MDX 解决方案更像是最后的手段,您还需要为您拥有的每个度量定义一个计算度量。MDX 解决方案很可能要么很复杂,要么会弄乱您的总数/显示不正确的数据。
忽略无关维度
在查看 Adventureworks 2012 多维数据集时,您会遇到这种情况,即员工未链接到“Internet 销售”,而是链接到“经销商销售”。
浏览多维数据集时,结果与您从员工维度的两个度量组中添加度量时的结果相同。
您可以通过将IgnoreUnrelatedDimensions
属性设置为False
on来解决此问题Measure Group
。
重新处理多维数据集并刷新浏览器后,结果现在如下所示:
但是有一些警告,例如设置问题 DefaultMember
如果DefaultMember
不是不All level
相关维度的属性之一,则不会获得聚合数据,因为即使默认成员未包含在数据透视表中,它仍然充当过滤器:
例如在DefaultMember
像这样在员工维度的性别属性上设置属性之后。
这是报告中不包含切片器时的结果。当然,您希望在此处查看总数:
我似乎记得其他一些边缘情况,calculated measures
但我不记得具体情况。
MDX解决方案
如果您遇到任何边缘情况,您将不得不求助于MDX
@GregGalloway 发布的解决方案,但这最终可能会变得乏味且非常特定于单个报告或用例:
CREATE MEMBER CURRENTCUBE .[Measures].[Max Current CP With Units] AS
IIf (
NOT IsEmpty ( [Measures].[Units] ),
[Measures].[Max Current CP],
NULL
) ;
Run Code Online (Sandbox Code Playgroud)
该解决方案的缺点是您会弄乱总计的外观并可能显示不正确的数据,但这在您使用 MIN/MAX 聚合的特定价格信息情况下可能是可以接受的,但会完全破坏总和,并且可能会显示向您的用户提供虚假数据。
例如,在运行此查询时
WITH MEMBER [Measures].[Filtered internet order count] as
'
IIf (
NOT IsEmpty ([Measures].[Reseller Order Count] ),
[Measures].[Internet Order Count],
NULL)
'
SELECT {[Measures].[Filtered internet order count],[Measures].[Reseller Order Count]} ON 0,
[Employee].[Employees].allmembers ON 1
FROM [Adventure Works]
Run Code Online (Sandbox Code Playgroud)
产生这个结果
这看起来同样奇怪,因为总数与每个成员相同。但这在您的最小/最大定价的特定情况下可能是可以接受的,我认为它主要显示虚假数据,因为这些员工没有互联网销售。
我想如果您控制报告,那将是可能的。对于您编辑中添加的数据透视表,我想它会产生不错的结果。