MDX 查询 - 销售所有给定产品的最佳销售员
MDX query - best salesmen who sold all of given products
假设我有两个简单的维度:
Products - with id and name
Salesmen - with id and name
My fact table is named SALES and contains the ids of the abovementioned.
我需要生成一个查询,以显示销售所有给定产品的销售人员的姓名。
此代码解决了两个项目 X 和 Y 的问题:
SELECT
{} on 0,
EXISTS(
EXISTS(
{[Salesmen].[Name].MEMBERS},
{[Products].[Name].&[X]}
)
,{[Products].[Name].&[Y]}
)
ON 1
FROM [Test];
另一个版本是:
SELECT
{} on 0,
INTERSECT(
NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,([Products].[Name].&[X])
)
,NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,([Products].[Name].&[Y])
)
)
ON 1
FROM [Test];
但是,如果给定的产品列表很大,例如 - 100 个随机产品..
你有 属性 member_key
层次结构 [Products].[Name]
吗?我们可以这样测试:
WITH
MEMBER [Measures].[Meas1] AS
[Products].[Name].CurrentMember.PROPERTIES("KEY ID")
MEMBER [Measures].[Meas2] AS
[Products].[Name].CurrentMember.MEMBER_Key
MEMBER [Measures].[Meas3] AS
[Products].[Name].CurrentMember.MEMBERvalue
select
{
[Measures].[Meas1]
,[Measures].[Meas2]
,[Measures].[Meas3]
} on COLUMNS,
[Products].[Name].MEMBERS on ROWS
FROM [Test];
希望自定义度量值之一能给您带来价值?我假设 Meas2 正在工作(如果 Meas1 或 Meas3 返回数字,则换成另一个)
WITH
MEMBER [Measures].[Meas2] AS
[Products].[Name].CurrentMember.MEMBER_Key
SET [ProdsetA] AS
FILTER(
[Products].[Name].MEMBERS
,[Measures].[Meas2] <100
)
SET [ProdsetB] AS
FILTER(
[Products].[Name].MEMBERS
,[Measures].[Meas2] >500
)
SELECT
{} on 0,
INTERSECT(
NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,[ProdsetA]
)
,NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,[ProdsetB]
)
)
ON 1
FROM [Test];
... >100
和 <500
很重要。这些是 filter
函数使用的标准。自定义集 [ProdsetA]
将仅包含 MEMBER_Key
为 <100
的产品,而自定义集 [ProdsetB]
将仅包含 MEMBER_Key
为 [=] 的产品22=]。您需要使用第一个脚本提供给您的成员值来决定多维数据集上下文中的值 100 和 500 应该是什么(...我不知道多维数据集中的键值,所以只使用 100 和 500 作为占位符)
假设我有两个简单的维度:
Products - with id and name
Salesmen - with id and name My fact table is named SALES and contains the ids of the abovementioned.
我需要生成一个查询,以显示销售所有给定产品的销售人员的姓名。
此代码解决了两个项目 X 和 Y 的问题:
SELECT
{} on 0,
EXISTS(
EXISTS(
{[Salesmen].[Name].MEMBERS},
{[Products].[Name].&[X]}
)
,{[Products].[Name].&[Y]}
)
ON 1
FROM [Test];
另一个版本是:
SELECT
{} on 0,
INTERSECT(
NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,([Products].[Name].&[X])
)
,NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,([Products].[Name].&[Y])
)
)
ON 1
FROM [Test];
但是,如果给定的产品列表很大,例如 - 100 个随机产品..
你有 属性 member_key
层次结构 [Products].[Name]
吗?我们可以这样测试:
WITH
MEMBER [Measures].[Meas1] AS
[Products].[Name].CurrentMember.PROPERTIES("KEY ID")
MEMBER [Measures].[Meas2] AS
[Products].[Name].CurrentMember.MEMBER_Key
MEMBER [Measures].[Meas3] AS
[Products].[Name].CurrentMember.MEMBERvalue
select
{
[Measures].[Meas1]
,[Measures].[Meas2]
,[Measures].[Meas3]
} on COLUMNS,
[Products].[Name].MEMBERS on ROWS
FROM [Test];
希望自定义度量值之一能给您带来价值?我假设 Meas2 正在工作(如果 Meas1 或 Meas3 返回数字,则换成另一个)
WITH
MEMBER [Measures].[Meas2] AS
[Products].[Name].CurrentMember.MEMBER_Key
SET [ProdsetA] AS
FILTER(
[Products].[Name].MEMBERS
,[Measures].[Meas2] <100
)
SET [ProdsetB] AS
FILTER(
[Products].[Name].MEMBERS
,[Measures].[Meas2] >500
)
SELECT
{} on 0,
INTERSECT(
NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,[ProdsetA]
)
,NONEMPTY(
{[Salesmen].[Name].MEMBERS}
,[ProdsetB]
)
)
ON 1
FROM [Test];
... >100
和 <500
很重要。这些是 filter
函数使用的标准。自定义集 [ProdsetA]
将仅包含 MEMBER_Key
为 <100
的产品,而自定义集 [ProdsetB]
将仅包含 MEMBER_Key
为 [=] 的产品22=]。您需要使用第一个脚本提供给您的成员值来决定多维数据集上下文中的值 100 和 500 应该是什么(...我不知道多维数据集中的键值,所以只使用 100 和 500 作为占位符)