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