第二个 MDX 查询必须返回第一个 MDX 查询返回的每一行的结果

发布于 2024-12-04 13:45:42 字数 3109 浏览 4 评论 0原文

我遇到了一种情况,正在寻找 MDX 指南。

环境:SQL Server 2008 R2、SSRS 2008 R2

维度:列 DimMainProvider :提供商名称 DimAcademicYear:学年 DimSectorSubjectArea:Estyn DimLearningAim:学习目标

参考事实:列 Learnings:MainProviderKey,AgeBandKey,LearningAimKey,SuccessFlag

我想要的是 1) 对于特定的 MainProvider,按成功率获取前 10 个学习目标并将其显示在 tablix 中 2)对于 tablix 上的每一行,还显示箱形图,该图本质上需要所有 Mainproviders 中特定 LearningAim 的 Min、Max、Quartile1、Quartile3 成功率

我拥有的是 2 个 MDX 查询

a) 获得主要提供商前 10 项活动的一项(简化版) 下面是 MDX 版本)

WITH
SET Top10LearningAimsForSuccessRate
AS 
NonEmpty(
        TOPCOUNT([ReportedLearningAims],10,[Measures].[SuccessRate]),
        [Measures].[SuccessRate]
        )
SELECT 
    {
      [Measures].[SuccessRate]
    } ON COLUMNS

 ,NON EMPTY 
    {  
        EXISTS( 
                Top10LearningAimsForSuccessRate
               ,,"Learnings")
     } ON ROWS
FROM 
(

SELECT {[Measures].[TerminatedAssessableLASum]
     ,[Measures].[SuccessfulLASum]} ON COLUMNS
     ,{(StrToSet("[DimMainProvider].[ProviderName].&[44]",CONSTRAINED))} On ROWS
FROM [FECube]
)
WHERE 
  ( StrToSet("[DimAcademicYear].[AcademicYear].[AcademicYear].[2009/10]",CONSTRAINED), 
    StrToSet("[DimSectorSubjectArea].[Estyn].&[2]",CONSTRAINED)
  )

b) 另一个查询接受 LearningAim 作为参数并执行 统计计算并给我值(简化版 MDX 如下)

WITH 
SET ProviderwideLearningAims
AS
ORDER(
        NonEmpty( [DimMainProvider].[ProviderName].[ProviderName],
                  [Measures].[SuccessRate]
                )
        ,[Measures].[SuccessRate],BASC        
    )

MEMBER [Measures].[MaxValue]
AS
Max(ProviderwideLearningAims,[SuccessRate]),FORMAT_STRING = "Percent"

MEMBER [Measures].[MinValue]
AS
Min(ProviderwideLearningAims,[SuccessRate]),FORMAT_STRING = "Percent"

MEMBER [Measures].[MedianValue]
AS
Median(ProviderwideLearningAims,[SuccessRate]),FORMAT_STRING = "Percent"


Member [Measures].[ProviderCount] As [ProviderwideLearningAims].Count   

MEMBER [Measures].[MeanValue]
AS 
(SUM(ProviderwideLearningAims,[SuccessRate])/[Measures].[ProviderCount]),FORMAT_STRING = "Percent"


MEMBER [Measures].[LearningAimUniqueName]
AS
[DimLearningAim].[LearningAimReference].CurrentMember.UniqueName                                  

Select
        {     [Measures].[LearningAimUniqueName]
             ,[Measures].[MinValue]     
             ,[Measures].[MaxValue]
             ,[Measures].[MedianValue]
             ,[Measures].[MeanValue]

        } ON COLUMNS,

       {
        NonEmpty([DimLearningAim].[LearningAimReference].[LearningAimReference],ProviderwideLearningAims)
       } ON ROWS
FROM
(
   SELECT 
   StrToSet("[DimLearningAim].[LearningAimReference].&[50024991]",CONSTRAINED) ON COLUMNS
   FROM [FECube]
   )
WHERE 
  ( StrToSet("[DimAcademicYear].[AcademicYear].[AcademicYear].[2009/10]",CONSTRAINED), 
    StrToSet("[DimSectorSubjectArea].[Estyn].&[2]",CONSTRAINED)

  )

我最初的想法是为收到的每个学习目标触发第二个查询 来自第一个查询,但我无法在 SSRS 数据集中实现这一点 模型。 所以现在我回到了 MDX 级别并希望以某种方式合并这些 两个。

I have a Situation where I am looking for MDX Guidance.

Environment: SQL Server 2008 R2,SSRS 2008 R2

Dimension:Columns
DimMainProvider :ProviderName
DimAcademicYear:AcademicYear
DimSectorSubjectArea:Estyn
DimLearningAim:LearningAimReference

Fact:Columns
Learnings:MainProviderKey,AgeBandKey,LearningAimKey,SuccessFlag

What I want is
1) For a particular MainProvider Get Top 10 LearningAims by Success Rate and show it in tablix
2) For a each Row on tablix also show Box plot graph which essentially needs Min,Max,Quartile1,Quartile3 success rates of that particular LearningAim across all Mainproviders

What I have is 2 MDX queries

a) one which gets top 10 Activities for a Main Provider (Simplified
Version of MDX below)

WITH
SET Top10LearningAimsForSuccessRate
AS 
NonEmpty(
        TOPCOUNT([ReportedLearningAims],10,[Measures].[SuccessRate]),
        [Measures].[SuccessRate]
        )
SELECT 
    {
      [Measures].[SuccessRate]
    } ON COLUMNS

 ,NON EMPTY 
    {  
        EXISTS( 
                Top10LearningAimsForSuccessRate
               ,,"Learnings")
     } ON ROWS
FROM 
(

SELECT {[Measures].[TerminatedAssessableLASum]
     ,[Measures].[SuccessfulLASum]} ON COLUMNS
     ,{(StrToSet("[DimMainProvider].[ProviderName].&[44]",CONSTRAINED))} On ROWS
FROM [FECube]
)
WHERE 
  ( StrToSet("[DimAcademicYear].[AcademicYear].[AcademicYear].[2009/10]",CONSTRAINED), 
    StrToSet("[DimSectorSubjectArea].[Estyn].&[2]",CONSTRAINED)
  )

b) Another query which accepts LearningAim as a Parameter and does
Statistical Calculations and gives me values (Simplified Version of
MDX below)

WITH 
SET ProviderwideLearningAims
AS
ORDER(
        NonEmpty( [DimMainProvider].[ProviderName].[ProviderName],
                  [Measures].[SuccessRate]
                )
        ,[Measures].[SuccessRate],BASC        
    )

MEMBER [Measures].[MaxValue]
AS
Max(ProviderwideLearningAims,[SuccessRate]),FORMAT_STRING = "Percent"

MEMBER [Measures].[MinValue]
AS
Min(ProviderwideLearningAims,[SuccessRate]),FORMAT_STRING = "Percent"

MEMBER [Measures].[MedianValue]
AS
Median(ProviderwideLearningAims,[SuccessRate]),FORMAT_STRING = "Percent"


Member [Measures].[ProviderCount] As [ProviderwideLearningAims].Count   

MEMBER [Measures].[MeanValue]
AS 
(SUM(ProviderwideLearningAims,[SuccessRate])/[Measures].[ProviderCount]),FORMAT_STRING = "Percent"


MEMBER [Measures].[LearningAimUniqueName]
AS
[DimLearningAim].[LearningAimReference].CurrentMember.UniqueName                                  

Select
        {     [Measures].[LearningAimUniqueName]
             ,[Measures].[MinValue]     
             ,[Measures].[MaxValue]
             ,[Measures].[MedianValue]
             ,[Measures].[MeanValue]

        } ON COLUMNS,

       {
        NonEmpty([DimLearningAim].[LearningAimReference].[LearningAimReference],ProviderwideLearningAims)
       } ON ROWS
FROM
(
   SELECT 
   StrToSet("[DimLearningAim].[LearningAimReference].&[50024991]",CONSTRAINED) ON COLUMNS
   FROM [FECube]
   )
WHERE 
  ( StrToSet("[DimAcademicYear].[AcademicYear].[AcademicYear].[2009/10]",CONSTRAINED), 
    StrToSet("[DimSectorSubjectArea].[Estyn].&[2]",CONSTRAINED)

  )

My original Idea is to fire 2nd query for each Learning Aim received
from 1st query,but I am not able to implement this in SSRS Dataset
Model.
So Now I am back at MDX level and want somehow to merge these
two.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唔猫 2024-12-11 13:45:42

以下是我在 MSDN 论坛上 Deepak Puri 的帮助下修复该问题的方法

将 [Top10LearningAims] 设置为 TOPCOUNT(

Filter(([ReportedLearningAims]*[DimMainProvider].[ProviderName].MEMBERS),[DimMainProvider].[ProviderName].CURRENTMEMBER
IS STRTOMEMBER("[DimMainProvider].[ProviderName].&[44]") )
,10,[措施].[TermiedAssessableLASum]

成员[测量].[MaxValue] AS
Max(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率]),FORMAT_STRING =
“百分比”成员[测量].[MinValue] AS
Min(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率]),FORMAT_STRING =
“百分比”成员 [措施].[中值] AS
中值(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率]), FORMAT_STRING =
“百分比”

成员[测量值].[平均值] AS
Avg(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率]), FORMAT_STRING =
“百分比”

成员[Measures].[ProviderCount]为
Count(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate])) 成员 [Measures].[PercentileInt25] as
Int(([措施].[提供商计数] - 1) * 25) / 100) 成员
[措施].[PercentileFrac25] as (([措施].[ProviderCount] - 1) *
25) / 100
- [Measures].[PercentileInt25] 成员 [Measures].[PercentileLo25] as
([措施].[成功率],
订单(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率],
BASC).Item([测量].[PercentileInt25]).Item(0)), FORMAT_STRING =
“百分比”成员 [Measures].[PercentileHi25] as
([措施].[成功率],
订单(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率],
BASC).Item([测量].[PercentileInt25] + 1).Item(0)), FORMAT_STRING =
“百分比”成员 [Measures].[Percentile25Value] as
([测量值].[PercentileLo25] * (1 - [测量值].[PercentileFrac25]))
+ ([测量值].[PercentileHi25] * [测量值].[PercentileFrac25]),
FORMAT_STRING = “百分比”成员 [Measures].[PercentileInt75] as
Int(([措施].[提供商计数] - 1) * 75) / 100) 成员
[措施].[PercentileFrac75] as (([措施].[ProviderCount] - 1) *
75) / 100
- [Measures].[PercentileInt75] 成员 [Measures].[PercentileLo75] as
([措施].[成功率],
订单(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率],
BASC).Item([测量].[PercentileInt75]).Item(0)), FORMAT_STRING =
“百分比”成员 [Measures].[PercentileHi75] as
([措施].[成功率],
订单(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]), [措施].[成功率],
BASC).Item([测量].[PercentileInt75] + 1).Item(0)), FORMAT_STRING =
“百分比”成员 [Measures].[Percentile75Value] as
([测量值].[PercentileLo75] * (1 - [测量值].[PercentileFrac75]))
+ ([测量值].[PercentileHi75] * [测量值].[PercentileFrac75]),
FORMAT_STRING = "百分比"

选择 { [测量].[TermulatedAssessableLASum]
,[措施].[成功的LASum]
,[措施].[成功率]
,[措施].[SectorTermiedAssessableLASum]
,[措施].[SectorSuccessfulLASum]
,[措施].[部门成功率]
,[措施].[ProviderCount],[措施].[MinValue]
,[测量值].[最大值],[测量值].[平均值]
,[测量值].[Percentile25Value] ,[测量值].[中值]
,[测量].[Percentile75Value]} 在列上,
EXISTS(NonEmpty(([DimLearningAim].[LearningAimReference].[LearningAimReference],[DimLearningAim].[LearningAimTitle].[Lea rningAimTitle]),([Top10LearningAims],[Measures].[SuccessRate]))*NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[措施].[成功率]),,"学习") 维度属性
FECube WHERE 行中的 MEMBER_CAPTION、MEMBER_UNIQUE_NAME
( StrToSet("[DimAcademicYear].[AcademicYear].[AcademicYear].[2009/10]",约束),
StrToSet("[DimLearnerAgeBand].[AgeBand].[全部]",约束),
StrToSet("[DimLearningCourseLength].[CourseLength].[All]",CONSTRAINED),
StrToSet("[DimLearnerEthnicity].[种族].[全部]",CONSTRAINED),
StrToSet("[DimLearnerGender].[性别].[全部]",CONSTRAINED),
StrToSet("[DimDeprivationDecile].[Decile].[全部]",约束),
StrToSet("[DimSectorSubjectArea].[Estyn].&[2]",CONSTRAINED),
StrToSet("[DimLearningActivityLevel].[ActivityLevel].[全部]",CONSTRAINED),
StrToSet("[DimLearningActivityType].[ActivityType].[全部]",CONSTRAINED)
) 单元格属性值、BACK_COLOR、FORE_COLOR、FORMATTED_VALUE
、FORMAT_STRING、FONT_NAME、FONT_SIZE、FONT_FLAGS

Here is how I fixed it with help from Deepak Puri on MSDN forums

With Set [Top10LearningAims] as TOPCOUNT(

Filter(([ReportedLearningAims]*[DimMainProvider].[ProviderName].MEMBERS),[DimMainProvider].[ProviderName].CURRENTMEMBER
IS STRTOMEMBER("[DimMainProvider].[ProviderName].&[44]") )
,10,[Measures].[TerminatedAssessableLASum]
)

MEMBER [Measures].[MaxValue] AS
Max(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate]),FORMAT_STRING =
"Percent" MEMBER [Measures].[MinValue] AS
Min(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate]),FORMAT_STRING =
"Percent" MEMBER [Measures].[MedianValue] AS
Median(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate]), FORMAT_STRING =
"Percent"

MEMBER [Measures].[MeanValue] AS
Avg(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate]), FORMAT_STRING =
"Percent"

Member [Measures].[ProviderCount] as
Count(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate])) Member [Measures].[PercentileInt25] as
Int((([Measures].[ProviderCount] - 1) * 25) / 100) Member
[Measures].[PercentileFrac25] as (([Measures].[ProviderCount] - 1) *
25) / 100
- [Measures].[PercentileInt25] Member [Measures].[PercentileLo25] as
([Measures].[SuccessRate],
Order(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate],
BASC).Item([Measures].[PercentileInt25]).Item(0)), FORMAT_STRING =
"Percent" Member [Measures].[PercentileHi25] as
([Measures].[SuccessRate],
Order(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate],
BASC).Item([Measures].[PercentileInt25] + 1).Item(0)), FORMAT_STRING =
"Percent" Member [Measures].[Percentile25Value] as
([Measures].[PercentileLo25] * (1 - [Measures].[PercentileFrac25]))
+ ([Measures].[PercentileHi25] * [Measures].[PercentileFrac25]),
FORMAT_STRING = "Percent" Member [Measures].[PercentileInt75] as
Int((([Measures].[ProviderCount] - 1) * 75) / 100) Member
[Measures].[PercentileFrac75] as (([Measures].[ProviderCount] - 1) *
75) / 100
- [Measures].[PercentileInt75] Member [Measures].[PercentileLo75] as
([Measures].[SuccessRate],
Order(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate],
BASC).Item([Measures].[PercentileInt75]).Item(0)), FORMAT_STRING =
"Percent" Member [Measures].[PercentileHi75] as
([Measures].[SuccessRate],
Order(NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]), [Measures].[SuccessRate],
BASC).Item([Measures].[PercentileInt75] + 1).Item(0)), FORMAT_STRING =
"Percent" Member [Measures].[Percentile75Value] as
([Measures].[PercentileLo75] * (1 - [Measures].[PercentileFrac75]))
+ ([Measures].[PercentileHi75] * [Measures].[PercentileFrac75]),
FORMAT_STRING = "Percent"

select { [Measures].[TerminatedAssessableLASum]
,[Measures].[SuccessfulLASum]
,[Measures].[SuccessRate]
,[Measures].[SectorTerminatedAssessableLASum]
,[Measures].[SectorSuccessfulLASum]
,[Measures].[SectorSuccessRate]
,[Measures].[ProviderCount] ,[Measures].[MinValue]
,[Measures].[MaxValue] ,[Measures].[MeanValue]
,[Measures].[Percentile25Value] ,[Measures].[MedianValue]
,[Measures].[Percentile75Value]} on COLUMNS,
EXISTS(NonEmpty(([DimLearningAim].[LearningAimReference].[LearningAimReference],[DimLearningAim].[LearningAimTitle].[LearningAimTitle]),([Top10LearningAims],[Measures].[SuccessRate]))*NonEmpty([DimMainProvider].[ProviderName].[ProviderName],
[Measures].[SuccessRate]),,"Learnings") DIMENSION PROPERTIES
MEMBER_CAPTION,MEMBER_UNIQUE_NAME ON ROWS from FECube WHERE
( StrToSet("[DimAcademicYear].[AcademicYear].[AcademicYear].[2009/10]",CONSTRAINED),
StrToSet("[DimLearnerAgeBand].[AgeBand].[All]",CONSTRAINED),
StrToSet("[DimLearningCourseLength].[CourseLength].[All]",CONSTRAINED),
StrToSet("[DimLearnerEthnicity].[Ethnicity].[All]",CONSTRAINED),
StrToSet("[DimLearnerGender].[Gender].[All]",CONSTRAINED),
StrToSet("[DimDeprivationDecile].[Decile].[All]",CONSTRAINED),
StrToSet("[DimSectorSubjectArea].[Estyn].&[2]",CONSTRAINED),
StrToSet("[DimLearningActivityLevel].[ActivityLevel].[All]",CONSTRAINED),
StrToSet("[DimLearningActivityType].[ActivityType].[All]",CONSTRAINED)
) CELL PROPERTIES VALUE ,BACK_COLOR ,FORE_COLOR ,FORMATTED_VALUE
,FORMAT_STRING ,FONT_NAME ,FONT_SIZE ,FONT_FLAGS

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文