如何计算 MDX 中组的总和?

Posted

技术标签:

【中文标题】如何计算 MDX 中组的总和?【英文标题】:How do I calculate the sum total of a group in MDX? 【发布时间】:2014-10-29 18:18:35 【问题描述】:

我需要在 SQL Server Data Tools 中创建一个计算。

想象一下,在我的 OLAP 结构中,我有一个城市维度和一个卖家维度,以及一个事实。在城市维度中,我有一个城市、一个州和一个人口,这是一个维度中的度量。

我需要总结有销售的城市的人口。但我不能只总结有销售额的城市,我只能显示该州的总人口。一个卖家可以在许多城市销售。 示例:

我将按卖家 John 进行过滤,查询返回以下内容:


STATE  |   CITY            |     POPULATION 

CA     |   Los Angeles     |     10.000.000
CA     |   San Francisco   |      1.000.000  
CA     |   Sacramento      |      1.000.000   
CA     |   San Diego       |      1.000.000   
CA     |   Bakersfield     |        500.000 

Total                          37.000.000

总和应该返回 13.500.000,但对我来说,总和返回 37.000.000,这是 CA 的人口。

我没有 MDX 方面的高级知识,无法使用此上下文创建计算成员,也无法提供示例。


简而言之,我只需要返回这个卖家有销售的城市的人口总和,但目前正在返回人口的总和,例如,如果我选择显示国家和城市,返回该国人口总数,如果我选择显示州和城市,则返回该州人口总数

【问题讨论】:

请添加您的试用版。 SUM(FILTER([Measures].[Population],[Sales Amount]>0)) 我用这个来计算人口的总和......但不起作用 【参考方案1】:

如果您只想按卖家和城市显示人口总和,可以使用类似下面的查询。

SELECT Measures.Population 
ON 0,
FILTER(Seller.SellerName.CHILDREN * City.City.CHILDREN, Measures.[Sales Amount] > 0)
ON 1
FROM [YourCube]

SELECT Measures.Population 
ON 0,
(Seller.SellerName.CHILDREN * City.City.CHILDREN)
HAVING Measures.[Sales Amount] > 0
ON 1
FROM [YourCube]

显然,您必须用多维数据集中的实际维度名称替换。

编辑:

如果你只是想要卖家有销售的所有城市的人口总和,试试下面的代码

//Build a set of cities
with set CitiesForSeller as
exists(City.City.CHILDREN, strtoset('Seller.SellerName.&[SomeName]'), "<<Name of the measure group which has the population measure>>")

//Get the sum of population in all the cities combined
member measures.SumOfPopulation as
sum(CitiesForSeller,Measures.Population)

select measures.SumOfPopulation on 0,
CitiesForSeller 
having measures.SumOfPopulation > 0
on 1
from [YourCube]

【讨论】:

是的,它有帮助,但我需要一个 MDX 计算,我在 SQL Server Data Tools 中制定它,我创建的示例没有显示每个城市的人口。以下示例: ____________________________________________________________________ SUM(([Measures].Population],FILTER([Sellers].Sellers].CHILDREN * [Geography].[City].CHILDREN,[Measures].[Sales Amount] > 0))) 不能正常工作...而且我不需要查询,我需要计算 好的,好的...我创建了这个计算 _______________________________________________________________________ CREATE MEMBER CURRENTCUBE.[Measures].[Populacao Representante] AS SUM(NONEMPTY((Filter([Measures].[População],[Measures].[Valor Total] &gt; 0),FILTER([CidadesRadiografia].[Cidade].[Cidade],[Measures].[Valor Total] &gt; 0)))),

以上是关于如何计算 MDX 中组的总和?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列添加到依赖于数据帧或外部数据帧中组的平均值的数据帧?

计算 SQL 中组的重叠时间(以秒为单位)

范围内总和计数的 MDX 计算

如何在 MDX 中将级别的总和显示为其最后一个子级的值

您如何使用 MDX 计算 MTD/YTD 平均工作日销售额?

在R中改变ggplot中组的顺序