我知道 InterpolateRGBColors 函数通过 0 和 1 之间的值位置返回颜色......所以它似乎只能用百分比而不是数字来实现......

有没有办法具有相同的功能,但基于集合中返回的最小值和最大值?

我想要的是将颜色归因于我的度量,但在 min([Measures].[NbSejours]) 到 max([Measures].[NbSejours])(不是 0 到 1)的范围内......

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

有没有办法做到这一点 ?

最佳答案

InterpolateRGBColors 期望一个介于 0 和 1 之间的数值用于插值。所以我们需要调整我们的度量以确保我们得到正确的颜色。

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

我们需要的是在 0,1 之间缩放 [Measures].[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()
....

一旦我有一点时间,我将使用向量( herehere )编写一个版本,它的性能更高,就像上面的例子一样,我们每次计算集合的值。

希望能帮助到你

关于colors - icCube - 基于最小值和最大值的 InterpolateRGBColors?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28319252/

10-12 19:02