SSAS(寻找 mdx 度量)在某个日期计算一个类别中的不同客户
SSAS (looking for mdx measure) count distinct customer in a category at a date
我刚刚实施了一个处理客户和时事通讯订阅的 SSAS 结构。
我正在处理一种我现在没有解决的简单问题..
这是我的一个事实的简单摘录 table :
日期 |猫 |联系人
201401 |没有订阅 |保罗
201403 |多|保罗
201602 |单声道 |珍
201604 |单声道 |保罗
201604 |多|保罗
201609 |没有订阅 |珍
201703 |多|保罗
我想获得一个度量值 (contactNumber),它会告诉我在请求时某个类别中有多少个联系人。
我创建了这个度量:(DC_Contact 是一个 Count distinct of contact)
[Measures].[ContactNumber] =
AGGREGATE(
NULL : [Period].[Per Quarter].CURRENTMEMBER
,[Measures].[DC_Contact])
但是当我在 201703 中检查它时,它给了我
noSub = 2 (excepted 1)
Multi = 2 (excepted 1)
Mono = 2 (excepted 0)
而在 201604 年我将拥有
noSub = 2 (excepted 2)
Multi = 1 (excepted 0)
Mono = 1 (excepted 0)
由于我们缺乏有关多维数据集结构的详细信息,因此很难为您提供帮助,但您可能应该使用 DistinctCount (https://docs.microsoft.com/en-us/sql/mdx/distinctcount-mdx)
不要犹豫,添加更多关于您的结构的信息,这应该对您有所帮助。
感谢您的回答。
我找到了解决问题的方法
CREATE MEMBER CURRENTCUBE.[Measures].[mono] AS
filter(
GENERATE(
DynamicContactSet,
tail(
-- ORDER(
filter(
[Contact].[Contact PMID].currentmember
* {null : [Period].[Per quarter].currentmember}
* {null : [Period].[Per week].currentmember}
* [Category].[Category].[Category]
,[Measures].[max_date]>0)
-- ,[Measures].[max_date],desc)
,1)
),cint([Category].[Category].currentmember.MEMBER_KEY)= 1
).count
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[multi] AS
filter(
GENERATE(
DynamicContactSet,
tail(
-- ORDER(
filter(
[Contact].[Contact PMID].currentmember
* {null : [Period].[Per quarter].currentmember}
* {null : [Period].[Per week].currentmember}
* [Category].[Category].[Category]
,[Measures].[max_date]>0)
-- ,[Measures].[max_date],desc)
,1)
),cint([Category].[Category].currentmember.MEMBER_KEY)= 2
).count
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[unsuscriber] as
filter(
GENERATE(
DynamicContactSet,
tail(
-- ORDER(
filter(
[Contact].[Contact PMID].currentmember
* {null : [Period].[Per quarter].currentmember}
* {null : [Period].[Per week].currentmember}
* [Category].[Category].[Category]
,[Measures].[max_date]>0)
-- ,[Measures].[max_date],desc)
,1)
),cint([Category].[Category].currentmember.MEMBER_KEY)=3
).count
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[notopin] as
DynamicContactSet.count - (mono + multi + unsuscriber)
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[ContactNumber] AS
CASE
WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 1 THEN mono
WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 2 THEN multi
WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 3 THEN unsuscriber
ELSE notopin
END
, VISIBLE = 1;
然后我可以随时了解一个类别中有多少联系人:
SELECT [Measures].[ContactNumber] on columns
,(
{[Period].[Per Quarter].[month].[M01-2000]
,[Period].[Per Quarter].[month].[M01-2005]
,[Period].[Per Quarter].[month].[M01-2007]
,[Period].[Per Quarter].[month].[M01-2010]
,[Period].[Per Quarter].[month].[M01-2015]
,[Period].[Per Quarter].[month].[M01-2017]
,[Period].[Per Quarter].[month].[M12-2017]}
,[Category].[Category].[Category]
) ON rows
FROM [BI SUBSCRIPTION]
where
{
[Contact].[Contact PMID].[jean paul]
[Contact].[Contact PMID].[jean michel]
[Contact].[Contact PMID].[jean françois]
[Contact].[Contact PMID].[jean christophe]
[Contact].[Contact PMID].[jean rachid]
}
但现在更大的问题是性能......
但是我没有看到如何在不减少数据量的情况下提高性能。
此致
我刚刚实施了一个处理客户和时事通讯订阅的 SSAS 结构。
我正在处理一种我现在没有解决的简单问题..
这是我的一个事实的简单摘录 table :
日期 |猫 |联系人
201401 |没有订阅 |保罗
201403 |多|保罗
201602 |单声道 |珍
201604 |单声道 |保罗
201604 |多|保罗
201609 |没有订阅 |珍
201703 |多|保罗
我想获得一个度量值 (contactNumber),它会告诉我在请求时某个类别中有多少个联系人。
我创建了这个度量:(DC_Contact 是一个 Count distinct of contact)
[Measures].[ContactNumber] =
AGGREGATE(
NULL : [Period].[Per Quarter].CURRENTMEMBER
,[Measures].[DC_Contact])
但是当我在 201703 中检查它时,它给了我
noSub = 2 (excepted 1)
Multi = 2 (excepted 1)
Mono = 2 (excepted 0)
而在 201604 年我将拥有
noSub = 2 (excepted 2)
Multi = 1 (excepted 0)
Mono = 1 (excepted 0)
由于我们缺乏有关多维数据集结构的详细信息,因此很难为您提供帮助,但您可能应该使用 DistinctCount (https://docs.microsoft.com/en-us/sql/mdx/distinctcount-mdx)
不要犹豫,添加更多关于您的结构的信息,这应该对您有所帮助。
感谢您的回答。 我找到了解决问题的方法
CREATE MEMBER CURRENTCUBE.[Measures].[mono] AS
filter(
GENERATE(
DynamicContactSet,
tail(
-- ORDER(
filter(
[Contact].[Contact PMID].currentmember
* {null : [Period].[Per quarter].currentmember}
* {null : [Period].[Per week].currentmember}
* [Category].[Category].[Category]
,[Measures].[max_date]>0)
-- ,[Measures].[max_date],desc)
,1)
),cint([Category].[Category].currentmember.MEMBER_KEY)= 1
).count
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[multi] AS
filter(
GENERATE(
DynamicContactSet,
tail(
-- ORDER(
filter(
[Contact].[Contact PMID].currentmember
* {null : [Period].[Per quarter].currentmember}
* {null : [Period].[Per week].currentmember}
* [Category].[Category].[Category]
,[Measures].[max_date]>0)
-- ,[Measures].[max_date],desc)
,1)
),cint([Category].[Category].currentmember.MEMBER_KEY)= 2
).count
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[unsuscriber] as
filter(
GENERATE(
DynamicContactSet,
tail(
-- ORDER(
filter(
[Contact].[Contact PMID].currentmember
* {null : [Period].[Per quarter].currentmember}
* {null : [Period].[Per week].currentmember}
* [Category].[Category].[Category]
,[Measures].[max_date]>0)
-- ,[Measures].[max_date],desc)
,1)
),cint([Category].[Category].currentmember.MEMBER_KEY)=3
).count
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[notopin] as
DynamicContactSet.count - (mono + multi + unsuscriber)
, VISIBLE = 0;
CREATE MEMBER CURRENTCUBE.[Measures].[ContactNumber] AS
CASE
WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 1 THEN mono
WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 2 THEN multi
WHEN cint([Category].[Category].currentmember.MEMBER_KEY)= 3 THEN unsuscriber
ELSE notopin
END
, VISIBLE = 1;
然后我可以随时了解一个类别中有多少联系人:
SELECT [Measures].[ContactNumber] on columns
,(
{[Period].[Per Quarter].[month].[M01-2000]
,[Period].[Per Quarter].[month].[M01-2005]
,[Period].[Per Quarter].[month].[M01-2007]
,[Period].[Per Quarter].[month].[M01-2010]
,[Period].[Per Quarter].[month].[M01-2015]
,[Period].[Per Quarter].[month].[M01-2017]
,[Period].[Per Quarter].[month].[M12-2017]}
,[Category].[Category].[Category]
) ON rows
FROM [BI SUBSCRIPTION]
where
{
[Contact].[Contact PMID].[jean paul]
[Contact].[Contact PMID].[jean michel]
[Contact].[Contact PMID].[jean françois]
[Contact].[Contact PMID].[jean christophe]
[Contact].[Contact PMID].[jean rachid]
}
但现在更大的问题是性能...... 但是我没有看到如何在不减少数据量的情况下提高性能。
此致