比方说,我有两个简单的维度:
产品 - 具有ID和名称
销售人员 - 通过ID和名字我的事实表名为SALES,包含上述的ID。
我需要生成查询,将显示谁卖的所有产品给出的销售人员的名字。
此代码解决了两个项目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
是>500
。 您需要通过第一个脚本使用呈现给大家的成员值来决定哪些值100和500应该在你的立方体上下文(...我不知道在你的立方体键值所以只使用了100和500作为占位符)