【问题标题】:icCube - InterpolateRGBColors based on min & max values?icCube - 根据最小值和最大值插入 RGB 颜色?
【发布时间】:2015-04-03 20:23:13
【问题描述】:

我知道 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;

有没有办法做到这一点?

【问题讨论】:

  • (有趣的问题:我猜icCube 的人会选择这个来帮助你)
  • 我不是 ICcube 专家,但常识告诉你,你应该尝试整个集合的 RANK() 函数输出,然后得到你的数字。

标签: colors mdx interpolation iccube


【解决方案1】:

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()
....

一旦有时间,我将使用 Vectors(herehere)编写一个性能更高的版本,如上例所示,我们每次计算集合的值。

希望对你有帮助

【讨论】:

  • 非常感谢@ic3!这正是我在功能方面所需要的......但不得不承认这效率不高...... :-(
  • 尝试将此添加到 MDX 的第一行 //#Cache( mode = 'ALL', maxSize = 42000 )
【解决方案2】:

我不知道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;

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2019-09-06
    • 2011-07-13
    • 2018-10-09
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多