Ssas WHERE子句中的MDX计算成员导致不同的结果
根据我在WHERE子句中使用的[Measures]中的哪一个,以下查询具有不同的结果集。 激活[Measures].[MetricFormula]而不是[Measures].[Actual],查询将提供不同的预期结果Ssas WHERE子句中的MDX计算成员导致不同的结果,ssas,mdx,Ssas,Mdx,根据我在WHERE子句中使用的[Measures]中的哪一个,以下查询具有不同的结果集。 激活[Measures].[MetricFormula]而不是[Measures].[Actual],查询将提供不同的预期结果 WITH MEMBER [Measures].[MetricFormula] AS Measures.[Downloads] MEMBER [Measures].[Actual] AS [Measures].[MetricFormula], LANGUAGE = 1031,FORM
WITH
MEMBER [Measures].[MetricFormula] AS Measures.[Downloads]
MEMBER [Measures].[Actual] AS [Measures].[MetricFormula], LANGUAGE = 1031,FORMAT_STRING='#,##0'
SET [mySet] as
topcount(
nonempty(
filter(
distinct descendants({[AppPackages].[AppPackages].&[F_TAAM00000069]}),
[Measures].[MetricFormula] <> 0 AND ([AppPackages].[AppPackages].PROPERTIES('AppTypeID') = 'DETAIL')
),
[Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00]
)
,6
,aggregate([Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00], [Measures].[MetricFormula]))
select
([Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00]) ON COLUMNS,
([mySet]) ON ROWS
FROM [Facts]
WHERE (
--([Measures].[MetricFormula]),
([Measures].[Actual]),
{[DownloadTypes].[DownloadTypes].&[New]}
)
[Measures].[Downloads]是多维数据集中定义的真实度量值
问题:为什么会产生不同的结果?
我以各种形式使用此构造来简化基于代码的查询生成。
在我开始重新设计查询生成器之前,我想了解它们之间的区别
背景:
该查询应该根据给定的度量,计算给定时间范围内给定AppPackage的前6个子代。我首先查找时间范围的非空子代,在其上添加topcount,确保时间聚合度量值驱动top计算。最后,我将求值集放在行上,时间放在列上,并指定要查看的内容。除了所描述的效果之外,它工作得很好。我在AdvWrks中复制时很开心,但这里是:
WITH
MEMBER [Measures].[x] AS
[Measures].[Internet Order Count]
MEMBER [Measures].[y] AS
[Measures].[x]
,LANGUAGE = 1031
,FORMAT_STRING = '#,##0'
SET [s] AS
TopCount
(
NonEmpty
(
Filter
(
[State-Province].[State-Province].MEMBERS
,
[Measures].[x] <> 0
)
,
[Date].[Calendar].[Month].&[2005]&[10]
:
[Date].[Calendar].[Month].&[2006]&[5]
)
,10
,Aggregate
(
[Date].[Calendar].[Month].&[2005]&[10]
:
[Date].[Calendar].[Month].&[2006]&[5]
,[Measures].[x]
)
)
SELECT
{
[Date].[Calendar].[Month].&[2005]&[10]
:
[Date].[Calendar].[Month].&[2006]&[5]
} ON COLUMNS
,Order
(
[s]
,[State-Province].CurrentMember.Member_Caption
,basc
) ON ROWS
FROM [Adventure Works]
WHERE
(
//([Measures].[x]),
([Measures].[y]),
{[Product].[Product Categories].[Category].&[1]}
);
因此,请尝试以下操作或尝试交换聚合以求和:
有趣的问题-我将针对AdvWks进行测试。如果你简化这个集合,它的行为还是一样的吗?很好。我删除了topcount,并将其他所有内容保留为NoEmptyFilter..=>布景不变。陛下需要考虑的是,度量。[下载]是否直接来自RDBMS?如果是,该列的数据类型是什么?如果没有,您是如何在多维数据集中创建此度量的?@Sourav_Agasti:是的,它来自RDBMS,多维数据集中的类型是货币。@whytheq:我刚刚用一个更简单的topcount进行了测试:问题仍然存在=>我将查看topcount在做什么。为什么这是非法的,亲爱的朋友?@Sourav_Agasti??你自己试试吧。。。我现在为你添加一个脚本-你需要问微软为什么。哦,是的。聚合函数中不允许计算成员。对不起,我没有读你答案的最后一部分。我想说你的调查很棒。@Sourav_Agasti这其中的危险点是,如果你使用聚合、计算的度量作为TopCount的第三个参数,那么它不会抛出错误,只是忽略了计算的度量。。。对我来说好像是个虫子
Aggregate
(
[Date].[Calendar].[Month].&[2005]&[10]
:
[Date].[Calendar].[Month].&[2006]&[5]
,[Measures].[x] //<<this is not allowed so `mdx` is ignoring it!
)
WITH
MEMBER [Measures].[MetricFormula] AS
Measures.[Downloads]
MEMBER [Measures].[Actual] AS
[Measures].[MetricFormula]
,LANGUAGE = 1031
,FORMAT_STRING = '#,##0'
SET [mySet] AS
TopCount
(
NonEmpty
(
Filter
(
(DISTINCT
Descendants({[AppPackages].[AppPackages].&[F_TAAM00000069]}))
,
[Measures].[MetricFormula] <> 0
AND
[AppPackages].[AppPackages].Properties('AppTypeID') = 'DETAIL'
)
,
[Time].[Calendar].[Date].&[2015-03-22T00:00:00]
:
[Time].[Calendar].[Date].&[2015-03-31T00:00:00]
)
,6
,Aggregate
(
[Time].[Calendar].[Date].&[2015-03-22T00:00:00]
:
[Time].[Calendar].[Date].&[2015-03-31T00:00:00]
,Measures.[Downloads] //<<<<<<<<<<<<moved away from using a calculated measure as they are not working as expected inside the function `AGGREGATE`
)
)
SELECT
[Time].[Calendar].[Date].&[2015-03-22T00:00:00]
:
[Time].[Calendar].[Date].&[2015-03-31T00:00:00] ON COLUMNS
,[mySet] ON ROWS
FROM [Facts]
WHERE
(
--([Measures].[MetricFormula]),
[Measures].[Actual]
,{[DownloadTypes].[DownloadTypes].&[New]}
);
WITH
MEMBER [Measures].[j] AS
[Measures].[Internet Order Count]
MEMBER [Measures].[x] AS
Aggregate
(
[Date].[Calendar].[Month].&[2005]&[10]
:
[Date].[Calendar].[Month].&[2006]&[5]
,[Measures].[j] //<<FEEDING "ILLEGAL" CALCULATED MEMBER INTO AGGREGATE FUNCTION
)
SELECT
{[Measures].[x]} ON COLUMNS
,[State-Province].[State-Province].MEMBERS ON ROWS
FROM [Adventure Works];