首页 > 解决方案 > 使用日期小于的 MDX 获取数据

问题描述

我有查询我在哪里取双值,然后是日期(例如 2020-03)。这是它的外观:

SELECT 
  NON EMPTY 
    {[Measures].[Revenue]} ON COLUMNS
 ,NON EMPTY 
    {[DimDates].[YearMonthNum].[YearMonthNum].ALLMEMBERS}
  DIMENSION PROPERTIES 
    MEMBER_CAPTION
   ,MEMBER_UNIQUE_NAME
   ON ROWS
FROM 
(
  SELECT 
    {[TransactionsData].[FirstYearMonth].&[ALL]} ON COLUMNS
  FROM 
  (
    SELECT 
      {[TransactionsDataExtra].[Cluster].[All]} ON COLUMNS
    FROM 
    (
      SELECT 
        {[TransactionsDataExtra].[Campaign].[All]} ON COLUMNS
      FROM 
      (
        SELECT 
          {[TransactionsData].[RevenueGenerating].[All]} ON COLUMNS
        FROM 
        (
          SELECT 
            {[TransactionsData].[Product].[All]} ON COLUMNS
          FROM 
          (
            SELECT 
              {[TransactionsDataExtra].[Channel].[All]} ON COLUMNS
            FROM 
            (
              SELECT 
                {[TransactionsDataExtra].[Custom4].[All]} ON COLUMNS
              FROM 
              (
                SELECT 
                  {[TransactionsDataExtra].[Custom5].[All]} ON COLUMNS
                FROM 
                (
                  SELECT 
                    {[TransactionsDataExtra].[Custom6].[All]} ON COLUMNS
                  FROM 
                  (
                    SELECT 
                      {[TransactionsData].[ClientId].&[233]} ON COLUMNS
                    FROM [Model]
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)
WHERE 
  (
    [TransactionsDataExtra].[Channel].[All]
   ,[TransactionsData].[Product].[All]
   ,[TransactionsData].[RevenueGenerating].[All]
   ,[TransactionsDataExtra].[Campaign].[All]
   ,
    [TransactionsData].[FirstYearMonth] <= '2020-01'
   ,[TransactionsDataExtra].[Cluster].[All]
   ,[TransactionsData].[ClientId].&[233]
  )
CELL PROPERTIES 
  VALUE
 ,BACK_COLOR

我想要实现的是如果选择了任何一个日期,则按单个日期过滤此查询,例如

[TransactionsData].[FirstYearMonth] <= '2020-01'

但我得到错误: 该函数需要一个 5 参数的元组集表达式。使用了字符串或数字表达式。

我也尝试过像这样的日期:

[TransactionsData].[FirstYearMonth] <= ['2020-01'] 但这也没有用。

我是 DAX 的新手,如果我使用 sql,我会尝试应用我会使用的东西,这显然不是正确的方法。谁能帮帮我?

标签: mdx

解决方案


您可以使用运算符:来定义日期范围。

所以在 Adventure Works 中这是有效的:

{[Date].[Date].&[20130101]:[Date].[Date].&[20130131]}

现在,如果您将一侧保留为空,那么它将意味着直到并包括右侧的日期。所以这是有效的:

select 
[Measures].[Internet Sales Amount]
on columns
from [Adventure Works]
where {null:[Date].[Date].&[20130131]}

因此,您WHERE需要适应以下内容:

WHERE 
  (
    [TransactionsDataExtra].[Channel].[All]
   ,[TransactionsData].[Product].[All]
   ,[TransactionsData].[RevenueGenerating].[All]
   ,[TransactionsDataExtra].[Campaign].[All]
   ,{null:[TransactionsData].[FirstYearMonth].&[20200101]}
   ,[TransactionsDataExtra].[Cluster].[All]
   ,[TransactionsData].[ClientId].&[233]
  )

在上面,您需要确保该表达式[TransactionsData].[FirstYearMonth].&[20200101]是您的多维数据集中的成员。


推荐阅读