用MDX hos选择第一行?

时间:2016-02-03 14:11:25

标签: mdx

我正在使用sharepoint报告构建器。

在我的数据中(见下图) - 我想获得所有第一行 - 黄色的那些。

enter image description here

我该怎么做。

这是MDX代码。我应该写什么来获得黄色的行?

SELECT 
  NON EMPTY 
    {[Measures].[Antal unikke brugere - Visiteret Tid]} ON COLUMNS
 ,NON EMPTY 
    {
        [Borger].[Anonym Borgernøgle DPR].[Anonym Borgernøgle DPR].ALLMEMBERS*
        [SundhedOgOmsorg - Ydelse].[Ydelse].[Ydelse].ALLMEMBERS*
        [Kalender].[År].[År].ALLMEMBERS*
        [Kalender].[Måned].[Måned].ALLMEMBERS
    }
  DIMENSION PROPERTIES 
    MEMBER_CAPTION
   ,MEMBER_UNIQUE_NAME
   ON ROWS
FROM 
(
  SELECT 
    {
      [SundhedOgOmsorg - Ydelse].[Ydelse].&[12.1 Hjemmetrænerforløb]
     ,[SundhedOgOmsorg - Ydelse].[Ydelse].&[12.2 Komb. Hjemmetræner & Terapeutforløb]
     ,[SundhedOgOmsorg - Ydelse].[Ydelse].&[12.3 Komplekse Rehabiliteringsforløb]
     ,[SundhedOgOmsorg - Ydelse].[Ydelse].&[12.7. hverdagsrehab. revis.gr. m. tp.]
    } ON COLUMNS
  FROM 
  (
    SELECT 
      {[SundhedOgOmsorg - Modul].[Modul].&[Hjemmehjælp]} ON COLUMNS
    FROM [FrbLis]
  )
)
WHERE 
  [SundhedOgOmsorg - Modul].[Modul].&[Hjemmehjælp]
CELL PROPERTIES 
  VALUE
 ,BACK_COLOR
 ,FORE_COLOR
 ,FORMATTED_VALUE
 ,FORMAT_STRING
 ,FONT_NAME
 ,FONT_SIZE
 ,FONT_FLAGS;

1 个答案:

答案 0 :(得分:0)

您可以尝试使用以下迭代mdx函数之一:

Generate - https://msdn.microsoft.com/en-us/library/ms145526.aspx

Filter - https://msdn.microsoft.com/en-us/library/ms146037.aspx

使用过滤器有点复杂,因为您需要根据相对位置指定特定元组。生成更简单一点。我将尝试针对MS AdvWrks多维数据集提供示例。

我认为这与你的情况相似:

SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,NON EMPTY 
      [Product].[Product Categories].[Product]
    * 
      {
          [Date].[Calendar].[Date].&[20050801]
        : 
          [Date].[Calendar].[Date].&[20050807]
      } ON 1
FROM [Adventure Works];

您希望我用红色标记的行(有很多产品只有一行)

enter image description here

因此,如果我们现在将以下多维表达式应用于多维数据集:

WITH 
  SET [prodSet] AS 
    [Product].[Product Categories].[Product] 
  SET [prodDtSet] AS 
    Generate
    (
      [prodSet] AS P
     ,Head
      (
          P.Current
        * 
          NonEmpty
          (
            {
                [Date].[Calendar].[Date].&[20050801]
              : 
                [Date].[Calendar].[Date].&[20050807]
            }
           ,(
              P.Current
             ,[Measures].[Internet Sales Amount]
            )
          )
      )
    ) 
SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,[prodDtSet] ON 1
FROM [Adventure Works];

我们得到了所需的结果:

enter image description here

您是否能够根据您的情境调整我的示例?

我将进一步发挥作用并使用Filter提供解决方案(在某种程度上,它比Generate方法稍微复杂一点)

以下是使用Filter的方法:

WITH 
  SET [prodSet] AS 
    [Product].[Product Categories].[Product] 
  SET [prodDtSet] AS 
    NonEmpty
    (
        [prodSet]
      * 
        {
            [Date].[Calendar].[Date].&[20050801]
          : 
            [Date].[Calendar].[Date].&[20050807]
        }
     ,[Measures].[Internet Sales Amount]
    ) 
  SET [prodDtSetFiltered] AS 
    Filter
    (
      [prodDtSet]
     ,
        (NOT 
            [prodDtSet].Item(
            [prodDtSet].CurrentOrdinal - 1).Item(0)
          IS 
            [prodDtSet].Item(
            [prodDtSet].CurrentOrdinal - 2).Item(0))
      OR 
        [prodDtSet].CurrentOrdinal = 1
    ) 
SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,[prodDtSetFiltered] ON 1
FROM [Adventure Works];

结果如下:

enter image description here