使用 MDX hos 到 select 第一行?

With MDX hos to select first row?

我正在使用 Sharepoint 报告生成器。

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

我该怎么做。

这是 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;

您可以尝试使用以下迭代 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];

你想要我用红色标记的行(有很多产品只有 1 行)

因此,如果我们现在将以下多维表达式应用于立方体:

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];

我们得到了需要的结果:

你能根据你的情况调整我的例子吗?


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

这是一种使用 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];

结果如下: