使用 MDX 或 DAX 列出两个维度的交叉连接

List cross join of two dimensions using MDX or DAX

我有一个 SSRS 报告,它使用 SSAS 多维数据集作为源并且报告本身工作正常,其中包括两个参数作为级联下拉列表并且其中有多个值。现在我想在报表服务器中设置一个数据驱动的订阅,我在提供两个维度的交叉连接方面面临问题,这些维度应该作为基础数据源输入到报表参数中。

预期输出的 TSQL 等价物是:

Select programyear,AssignCounty, convert(varchar(10), tb1.year) + '_' + 
tb2.county 'FileName'  from
(select '[Date].[Program Year].&[' + Convert(varchar(10), [Program Year]) 
+ ']' 'ProgramYear', [Program Year] 'year'
From d_mcaa_date) tb1,
(select '[Plan].[Auto Assignment County].&[' + Convert(varchar(10), [Auto 
Assignment County]) + ']' 'AssignCounty', [Auto Assignment County] 
'county' From d_mcaa_plan) tb2

我希望将以下报告参数作为: 计划年份:[日期].[计划年份].&[13] 县:[计划].[自动分配县].&[萨克拉门托]

请注意,日期和计划是我的维度。

我正在寻找一个 MDX/DAX 代码,我可以在其中将日期维度的 "Program Year" 的所有值和计划维度的 "Auto Assignment County" 的所有值列为两列并排作为十字加入。这将制定一个数据集,当您设置订阅时,该数据集又可以输入到 SSRS 报告参数中。

我试过下面的代码:

select {} on 0, 
{
[Date].[Program Year].Children  
*
[Plan].[Auto Assignment County].Children
}  on 1
from [Model]

但这缺少列名称,订阅不接受此代码。

这是预期结果的图像,尽管查询是 TSQL 而不是预期的 MDX/DAX。

我不确定我是否完全理解您的问题,但是要获得交叉连接,您可以使用以下代码

select non empty
{[Date].[Program Year].Children,[Plan].[Auto Assignment County].Children} 
on 0, 
from [Model]

不需要使用行轴,因为你只需要一个交叉连接

编辑:基于图像

with 
member measures.t 
as
[Date].[Program Year].currentmember.name + '_'+ [Plan].[Auto Assignment County].currentmember.name

select measures.t on 0,
non empty
([Date].[Program Year].Children,[Plan].[Auto Assignment County].Children)
on 1, 
from [Model]

根据评论编辑

with 
member measures.t
as
[Date].[Calendar Year].currentmember.name + '_'+ [Product].[Category].currentmember.name

member measures.t1
as
[Date].[Calendar Year].currentmember.unique_name + '_'+ [Product].[Category].currentmember.unique_name

member measures.t3
as
[Date].[Calendar Year].currentmember.unique_name

member measures.t4
as
[Product].[Category].currentmember.unique_name

select {measures.t3,measures.t4,measures.t,measures.t1}
 on 0,
non empty
([Date].[Calendar Year].Children,[Product].[Category].Children)
on 1
from [Adventure Works]

结果

最后我发现要么不能使用 MDX 来实现我想要的,要么至少在 DAX 中很容易做到。以下查询被接受为 SSRS 中数据驱动订阅的有效查询:

Evaluate    
    ADDCOLUMNS(
        CROSSJOIN(
                DISTINCT('Plan'[Auto Assignment County]),DISTINCT('Date'[Program 
Year] )
                )
                ,
                "ProgramYeare", CONCATENATE(CONCATENATE("[Date].[Program Year].& 
        [",'Date'[Program Year]),"]"),
                "AssignCounty", CONCATENATE(CONCATENATE("[Plan].[Auto Assignment 
     County].&[",'Plan'[Auto Assignment County]),"]"),
                "FileName", CONCATENATE('Plan'[Auto Assignment County],'Date'[Program 
       Year])
                )

我不得不承认,这个问题超出了 MDX 本身的范围,而是使用 MDX/DAX 的可行解决方案。我已将问题更新为如此。