2015-10-12 4 views
0
12 Total := 
SWITCH (
    TRUE(), 
    HASONEVALUE ([level04]), CALCULATE (
     [Local], 
     DATESINPERIOD (
      Calendar[Date], 
      MAX (Calendar[Date]), 
      -12, 
      MONTH 
     ) 
    ), 
    HASONEVALUE ([level03]),If([level 03]= "calculation:" && [level03]= "Cash:" && [level03]= "Costs:"=>0, Blank(), CALCULATE (
     [Local], 
     DATESINPERIOD (
      Calendar[Date], 
      MAX (Calendar[Date]), 
      -12, 
      MONTH 
     ) 
) 
     ), 
     HASONEVALUE ([level02]), BLANK() 
    ) 

Я хотел бы добавить условие, что если рычаг 03 = наличные деньги, расчет и стоимость, то возвратите пустое, чтобы удалить подстрочные ряды. Я пробовал что-то вроде этого и не работал должным образом, он дает мне ошибку «значение для столбца level03 не может быть определено в текущем контексте». как я могу добавить это условие в столбец level03?DAX HASONEVALUE row filter

ответ

2

Просто сторона примечания, «ее не работает должным образом» чрезвычайно бесполезно в определении источника проблем. В частности, в модели Power Pivot/Tabular, this link provides a list of ways to help answerers help you.

Синтаксически возникают некоторые ошибки. Давайте рассмотрим их и посмотрим, подходит ли поведение до погружения в альтернативные определения мер.

В этом разделе проблема:

... 
,HASONEVALUE([level03]) 
    // Note, you are inconsistent in referring to [level03] and 
    // [level 03] 
,If(// Below you are testing column references against scalar 
    // literals. DAX doesn't understand how to do this, so you 
    // have to wrap each reference in a VALUES() function, which 
    // can be implicitly converted to a scalar value 
    [level 03] = 'calculation:' // DAX needs double quotes: "" 
     && [level03]= 'Cash:'  // You have multiple predicates 
     && [level03]=' Costs:'=>0 // for a single field combined 
            // with a logical and - these 
            // can't all simultaneously be true 
    ,Blank() 
    ,CALCULATE(
     [Local] 
     ,DATESINPERIOD(
      Calendar[Date], 
      MAX (Calendar[Date]), 
      -12, 
      MONTH 
     ) 
    ) 
) 
,.... 

Я просто хочу, чтобы изменить комбинацию предикатов к логическому или в моем переписываем, так что это возможно для этого IF() возвращать BLANK. То, как это написано выше, даже исправление синтаксических ошибок приведет к тому, что он всегда будет оценивать условие else, потому что [уровень 03] не может одновременно иметь значение «расчет:», «Наличные деньги» и «Затраты: => 0», ,

... 
,HASONEVALUE('<table>'[level03]) 
    // As a best practice, you should always use fully qualified 
    // column references - 'table'[field] 
    // Also, I've referred only to [level03] below 
,IF(// Note we've wrapped [level 03] in VALUES() below - this will 
    // allow our comparisons to scalar literals 
    VALUES('<table>'[level03]) = "calculation:" // double quotes 
     || VALUES('<table>'[level03]) = "Cash:" 
      // Note: we've changed the logical and, &&, to a logical 
      // or, || - meaning if any 1 of these predicates is true, 
      // we'll return BLANK 
     || VALUES('<table>'[level03]) = " Costs:=>0" 
    ,BLANK() 
    ,CALCULATE(
     [Local] 
     ,DATESINPERIOD(
      Calendar[Date] 
      ,MAX(Calendar[Date]) 
      ,-12 
      ,MONTH 
     ) 
    ) 
) 
,.... 

Что это будет сделать, это проверить для любой ячейки на сводной таблице, где [level03] имеет ровно один определенное значение - если это так, он будет оценивать функцию IF().

Функция IF() проверяет значение [level03]. Если это значение является любым из трех следующих значений: «Расчет:», «Наличные деньги» или «Затраты: => 0», он возвращает BLANK. Если значение [level03] не является ни одним из этих трех, оно будет оценивать значение CALCULATE(), которое возвращает меру [Local] в течение 12-месячного периода.

+0

Спасибо большое! Я никогда не думал о функциях функций, спасибо! – HAIZD

Смежные вопросы