【问题标题】:MDX Get Min Max Date From Slicer ElementMDX 从切片器元素获取最小最大日期
【发布时间】:2019-12-20 02:13:32
【问题描述】:

我使用 PowerBI 桌面/服务作为前端,使用多维分析服务作为后端。我想创建一个复杂的计算成员,但成员的某些部分有问题。

例如,我需要在 filter-element-slicer 中使用 TIME 维度的 MIN/MAX DATE。

我已经尝试了一些简单计算的成员开始:

第一个:

MAX
(
   EXISTING
   [Time].[DATE].Members,
   [Time].MEMBER_KEY
)

第二个:

MAX
(
   NONEMPTY
   [Time].[DATE].Members,
   [Time].MEMBER_KEY
)

第三个:

MAX
(
   EXISTING
   [Time].[YQM].[DATE].Members,
   [Time].[YQM].MEMBER_KEY
)

第四个:

MAX
(
   NONEMPTY
   [Time].[YQM].[DATE].Members,
   [Time].[YQM].MEMBER_KEY
)

我也尝试过不同的方法,比如在里面使用这样的度量:

MAX
(
 (
  [Time].[DATE].Members,
  [Measures].[Sales Amount]
 ),
[Time].[DATE].Member_Key
)

所有这些都显示 TIME 维度的最后一个 DATE,而不是 PowerBI 的 filter-element-slider 中选择的 MAX。 有什么想法吗?

这里奇怪的是,如果我将过滤器元素用作简单选择下拉菜单而不是范围切片器,那么我可以使用以下代码检索当前选定的日期:

MAX
(
   EXISTING
   [Time].[YQM].CURRENTMEMBER,
   [Time].[YQM].MEMBER_KEY
)

但是当我切换到范围切片器相同的代码时,返回零(0)!

另外,我已经在不同的表格模型中使用 DAX 并正常工作,但对于多维模型来说似乎太难了

可能问题出在范围上?

【问题讨论】:

  • 我现在无法重现您的问题,但这可能是因为当您切换到范围切片器时生成的查询使用了子立方体。结果是您在先前过滤的多维数据集的成员[All] 上应用了 MAX,这可能解释了为什么您得到 0。您可以尝试运行 Provider 并向我们展示完整的查询吗?
  • 嗨,@HugoSalaun 想象这些确切的查询是我的问题,如果我设法从切片器获得日期,我可以继续处理更大的查询。因此,为了重现它,您需要一个时间维度、一个包含至少一个度量的度量组和这些计算成员之一。

标签: max powerbi ssas mdx min


【解决方案1】:

正如您提到的,问题不是来自 PowerBI,而是来自对 MultiDim 模型的查询。

您可以通过在 Excel 上浏览您的计算成员并过滤日期来重现它。如果你只取一个日期,会员会正确刷新并显示这个日期,但如果你选择多个日期,它会显示“31”,因为“31”是你所有成员的MAX。我试图用 DYNAMIC SET 纠正这种行为:

CREATE DYNAMIC SET setDate AS 
{
   NONEMPTY([Time].[DATE].Members)
};

然后,我用这个集合来计算我的度量:

CREATE MEMBER CURRENTCUBE.[Measures].[MAX_DATE]
AS MAX(
   setDate,
   CDate([Time].[DATE].Properties('Key0', Typed)
),
VISIBLE = 1; 

(请注意 CDate 函数,我使用它将我的 MEMBER_KEY 转换为日期,因此如果您使用美国格式,则 1/31/2020 > 9/9/2000,但您可能不需要它,具体取决于您的型号。 )

在 Excel 中,即使我选择了多个日期,我的新度量也能正常工作。我是 PowerBI 的新手,但我创建了一个报告,它似乎没问题。

希望对你有帮助!

【讨论】:

  • 嗨@HugoSalaun,动态集的非常聪明的方法。我还有一些问题,但我们非常接近。首先,此 CInt([Time].[DATE].MEMBER_KEY) 在 PBI 中产生类型不匹配错误。其次,这个 CInt(Year([Time].[DATE].MEMBER_KEY)) 能够得到正确的年份,但是这个 CInt(Day([Time].[DATE].MEMBER_KEY)) 总是给出最后一个日期每个月都有滑块,而不是滑块上的最大日期。我不明白。
  • 再次嗨@HugoSalaun,经过大量调查,似乎这可能是我的问题,因为它不适用于member_key,但它适用于memver_value。所以这个代码 Day(MAX(EXISTING setDate, [Time].[DATE].MEMBER_VALUE)) 非常适合我!非常感谢!
  • 确实,CInt 函数不是一个好主意,在我的模型中,我使用整数来加快速度。我编辑了我的答案并编辑了度量。请注意,我的“Key0”属性来自 DateTime 列,对你​​来说是一样的吗?
  • 糟糕,没有看到您的最后一条评论,很高兴它与 MEMBER_VALUE 一起为您服务。正如我之前提到的,它对你如何设计你的模型非常敏感,对我来说使用 MEMBER_VALUE 是灾难性的,但我可以用 Properties('Key0', Typed) 做到这一点......好吧,至少它有效!
猜你喜欢
  • 1970-01-01
  • 2022-10-13
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2013-04-01
相关资源
最近更新 更多