MDX查询-销售所有给定产品的最佳推销员
假设我有两个简单的维度: 产品-带有id和名称 销售人员-带id和姓名 我的事实表名为SALES,包含上述的ID 我需要生成一个查询,显示销售所有给定产品的销售人员的姓名 此代码解决了两个项目X和Y的问题:MDX查询-销售所有给定产品的最佳推销员,mdx,data-warehouse,Mdx,Data Warehouse,假设我有两个简单的维度: 产品-带有id和名称 销售人员-带id和姓名 我的事实表名为SALES,包含上述的ID 我需要生成一个查询,显示销售所有给定产品的销售人员的姓名 此代码解决了两个项目X和Y的问题: SELECT {} on 0, EXISTS( EXISTS( {[Salesmen].[Name].MEMBERS}, {[Products].[Name].&[X]} ) ,{[Products].[Name].&a
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个随机产品,则此方法会变得很麻烦。您是否有层次结构
[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返回数字,则换成另一个)
与
成员[措施][措施2]如下:
[产品].[名称].CurrentMember.MEMBER\u密钥
将[ProdsetA]设置为
滤器(
[产品].[名称].成员
,[措施][措施2]500
)
挑选
{}在0上,
相交(
非空(
{[Salesmen].[Name].MEMBERS}
,[ProdsetA]
)
,非空(
{[Salesmen].[Name].MEMBERS}
,[ProdsetB]
)
)
在1号
来自[测试];
。。。
>100
和我认为存在
版本不起作用?当两个维度具有相同的层次结构时,存在可以起作用-在我编写的一个简单示例中,情况并非如此。然而,在更详细的项目中,exists解决方案实际上起了作用(因为维度在同一层次结构中)-我将在其他版本的数据库中进行编辑-你是对的(我忘记了),exists解决方案适用于同一维度中的不同层次结构,例如,假设你需要从城镇层次结构中查找城镇(在地理维度中)从国家层级(也在地理维度)来看,波兰国家存在这种情况。我提到的第三个参数(度量值组)是扩展的,因此它可以跨维度运行。下面是此函数的MSDN
定义:@whytheq谢谢!我很快就会分析你的答案!(顺便说一句,到目前为止,我知道第二个成员确实有效!但我不知道你键入>100
和的意思>100
和谢谢!终于有时间回到这一点上了-它真的很有帮助:)
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];