【问题标题】:Different Measure Aggregations for a measure depending on the included dimensions根据包含的维度,度量的不同度量聚合
【发布时间】:2017-09-16 19:23:51
【问题描述】:

我在聚合度量时遇到问题。 真实世界的场景是客户想要分析购买次数与该周进入商店的客户数量的比率。 我们知道每周有多少客户进入,以及购买了多少购买类型(昂贵、适中、便宜)。 由于存在不同的采购类型,因此会为该位置和该周创建多行。因此,复制了相同的度量 (NumberOfWalkInCustomers)。

These are the records. NumberOfWalkInCustomers are the totals per the Location and the WeekStartDate only. The duplicated rows are the result of the purchase Types. Without any dimensions in place, the sum looks like 850 but I would like to see the total as 650 because that's the total of Customers entered to those two locations in those two weeks.

我希望看到的是,当我在位置和日期维度内聚合时,该度量将得到总结。当其他维度到位时,如何避免总和聚合?

如果我们在报告中都有日期、位置和购买类型维度,那么它看起来没问题 但是,当我删除购买类型维度时,我希望 Location1 仍显示 100,因为购买类型不会影响输入到某个位置的客户数量。但是,当我删除日期维度时,我希望看到 Location1 的 250(第 1 周的 100 和第 2 周的 150 加起来)。该网站只允许我添加两个链接。对不起。

【问题讨论】:

  • 你能显示你想要的结果吗?我不确定你想要什么。您可以将 NumberOfWalkInCustomers 度量组的 IgnoreUnrelatedDimensions 设置为 false 以避免重复。
  • 谢谢丹尼洛。我尽可能地更新了描述。采购类型维度并不总是不相关的。它不会影响走进顾客的数量,但会影响购买的数量。我只需要在位置级别显示最大值,但是当我在城市级别汇总时,例如我希望它被求和。
  • 它会为 Location1 返回 300,对吧?你只需要100,对吧?当你把日级别而不是周级别时,你应该得到什么?你能创建一个伪公式吗?例如:sum(week,sum(location,max(type, visit)))
  • 没错。对于 ALLPurchaseTypes,我需要 100(当报表中未添加购买类型维度时)。没有一天的水平。事实总是映射到 Date 维度上的 weekstart 日期。实际上,您创建的公式清楚地解释了这种情况。谢谢

标签: ssas mdx aggregation


【解决方案1】:

有两种方式:慢速和快速。

1(纯 MDX):

With 
[Measures].[SumWeekStartDateSumLocationMaxPurchaseType] as
Sum(
      existing [Date].[Week Start Date].[Week Start Date].Members,
      [Measures].[2]
)


[Measures].[SumLocationMaxPurchaseType] as
Sum(
      existing [Store Location].[Location].[Location].Members,
      [Measures].[MaxPurchaseType]
)

[Measures].[MaxPurchaseType] as
Max(
      existing [Purchase Type].[Purchase Type].[Purchase Type].Members,
      [Measures].[Number Of Walk In Customers]
) 

select 
[Measures].[SumWeekStartDateSumLocationMaxPurchaseType] on 0
from [YourCube]

但是,对于大尺寸,您可能会发现它真的很慢。

2(一点点 MDX + DWH):使用以下结构向多维数据集添加新度量:

select 
      WeekStartDate,
      Location,
      MaxWalkIn = max(WalkIn)
from FactTableWalkIn
group by WeekStartDate, Location

使用总和聚合 + 计算度量添加 MaxWalkIn 度量:

IIF(
      [Purchase Type].[Purchase Type].CurrentMember is [Purchase Type].[Purchase Type].DefaultMember,
      [Measures].[MaxWalkIn],
      [Measures].[Number Of Walk In Customers]
)

【讨论】:

  • 嗨 Danylo,我尝试了第一种方法。只有使用下面的计算方法似乎可以解决这个问题。 [Measures].[MaxPurchaseType] as Max( 现有 [Purchase Type].[Purchase Type].[Purchase Type].Members, [Measures].[Number Of Walk In Customers] ) 我有两个问题要问你片刻。您能否在使用上面的 MDX 表达式时解释您的逻辑? (现有采购类型...) 发生什么其他维度到位;类似于“购买类型”,没有总结但使用最大值?我们如何避免在所有其他维度上求和?
  • 它并没有避免聚合,它分别为每个购买类型获取一个值,并从那里获取最大值。如果您需要每条记录的最大值(无论使用什么维度),您必须添加一个具有最大值聚合的度量(参见我的第二种方法)。
  • 嗨 Danylo,使用第一种方法,我得到的结果不正确。例如,如果我汇总到城市级别;对于不同的购买类型,走进顾客的总和看起来不同,原因是如果没有该类型的购买,它将顾客走进顾客视为零。 (其实,进店的顾客数应该是市内店铺位置的总和)你觉得我们可以换个角度看情况吗?比如只有位置维度级别为“Store”且日期维度级别为“Week Start Date”时的Maximum?
  • 对于那些维度的更高层次(比如年份或城市)我们开始总结了吗?你觉得范围陈述有用吗?
  • 范围声明不会有太大帮助。老实说,我有点失落。您能否编辑您最初的问题以使其清楚?将您的屏幕截图替换为“您拥有”和“您需要”等每个案例的屏幕截图。很难预测所有事情,所以我强烈建议推第二种方法,它会使事情对于不同维度和属性的使用更加可预测。
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多