Colors icCube-基于最小值和;最大值?

Colors icCube-基于最小值和;最大值?,colors,mdx,interpolation,iccube,Colors,Mdx,Interpolation,Iccube,我知道InterpologerBColors函数是通过值在0和1之间的位置返回颜色。。。所以它似乎只适用于百分比,而不是数字 是否有一种方法可以具有相同的功能,但基于集合中返回的最小值和最大值 我想要的是将颜色赋予我的度量值,但是在最小([Measures].[NbSejours])到最大([Measures].[NbSejours])(不是0到1)的范围内 有什么方法可以做到这一点吗?我不知道icCube,所以即使我使用了标准函数,下面的方法也可能不起作用。正如@George所评论的,您可以使

我知道InterpologerBColors函数是通过值在0和1之间的位置返回颜色。。。所以它似乎只适用于百分比,而不是数字

是否有一种方法可以具有相同的功能,但基于集合中返回的最小值和最大值

我想要的是将颜色赋予我的度量值,但是在最小([Measures].[NbSejours])到最大([Measures].[NbSejours])(不是0到1)的范围内


有什么方法可以做到这一点吗?

我不知道
icCube
,所以即使我使用了标准函数,下面的方法也可能不起作用。正如@George所评论的,您可以使用标准的
RANK
函数来查找每个成员的相对位置

您需要将该值输入到
[Measures].[color]
的定义中

WITH 
SET [estMembersOrdered] AS
  ORDER(
      [Etablissement].[Etablissement].[Etablissement].ALLMEMBERS
     ,[Measures].[NbSejours]
     ,BDESC
  )
MEMBER [Measures].[rnkEtablissement] AS 
   RANK(
     [Etablissement].[Etablissement].CURRENTMEMBER
     , [estMembersOrdered]
   )
MEMBER [Measures].[color] AS 
    InterpolateRGBColors(
        [Measures].[NbSejours] 
        ,rgb(176,224,230)
        ,rgb(135,206,235)
        ,rgb(0,191,255)
        ,rgb(100,149,237)
        ,rgb(0,0,255)
        ,rgb(0,0,139)
        ,rgb(25,25,112) 
    ), BACK_COLOR=currentCellValue()
SELECT 
  {
    {[Measures].[NbSejours]}
   ,[Measures].[color]
   ,[Measures].[rnkEtablissement] 
  } ON COLUMNS
 ,{
    NonEmpty
    (
      [Etablissement].[Etablissement].[Etablissement].ALLMEMBERS
     ,[Measures].[NbSejours]
    )
  } ON ROWS
FROM 
(
  SELECT 
    {{[Periode].[Periode].[All-M].&[2013]}} ON 0
  FROM [Cube]
)
CELL PROPERTIES 
  STYLE
 ,CLASSNAME
 ,VALUE
 ,FORMATTED_VALUE;
插值需要一个介于0和1之间的数值。因此,我们需要调整尺寸以确保获得正确的颜色

在我们的现场演示中有一个示例

我们需要的是在0,1之间缩放[度量值][NbSejours]。icCube DistributionFlat和DistributionRank中有两个没有文档记录的函数

无效版本

WITH
  SET [AxisX] AS  NonEmpty([Etablissement].Etablissement].Etablissement].ALLMEMBERS,[Measures].[NbSejours])
  FUNCTION distr(x_) as  DistributionFlat(  [AxisX], [Measures].[NbSejours], x_ )
  MEMBER [Measures].[color] AS 
InterpolateRGBColors(
    distr([Measures].[NbSejours]) 
    ,rgb(176,224,230)
    ,rgb(135,206,235)
    ,rgb(0,191,255)
    ,rgb(100,149,237)
    ,rgb(0,0,255)
    ,rgb(0,0,139)
    ,rgb(25,25,112) 
), BACK_COLOR=currentCellValue()
....
一旦我有了一点时间,我将使用向量(和)编写一个版本,这个版本的性能会更好,就像上面的例子中我们每次计算集合的值一样


希望它能帮上忙(有趣的问题:我猜
icCube
的人会选这个来帮助你)我不是icCube专家,但常识告诉你,你应该试一下整个集合的RANK()函数输出,然后得到你的数字。非常感谢@ic3!这正是我在功能方面所需要的。。。但必须承认这是没有效率的…:-(尝试将其添加到MDX/#缓存的第一行(mode='ALL',maxSize=42000)
WITH
  SET [AxisX] AS  NonEmpty([Etablissement].Etablissement].Etablissement].ALLMEMBERS,[Measures].[NbSejours])
  FUNCTION distr(x_) as  DistributionFlat(  [AxisX], [Measures].[NbSejours], x_ )
  MEMBER [Measures].[color] AS 
InterpolateRGBColors(
    distr([Measures].[NbSejours]) 
    ,rgb(176,224,230)
    ,rgb(135,206,235)
    ,rgb(0,191,255)
    ,rgb(100,149,237)
    ,rgb(0,0,255)
    ,rgb(0,0,139)
    ,rgb(25,25,112) 
), BACK_COLOR=currentCellValue()
....