使用 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 的可行解决方案。我已将问题更新为如此。
我有一个 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 的可行解决方案。我已将问题更新为如此。