Group by descending

Hi.
Is it possible to use the CLAUSE GROUP BY, with desc option ?
select A,B,C
from TABLE
GROUP BY A,B,C DESC
Is it possible ?
Anybody, has any idea ?
Thanks in advanced

Be careful of relying on the GROUP BY clause to do your ORDER BY -- although GROUP BY will mostly give you the same effect as ORDER BY ASC there are many cases where it won't, in particular where parallel query and partitioning are involved.

Similar Messages

  • How to trace an 'order by' issue?

    I'm working with Report Builder 6.0.8.25.0. I have a report that prints lines on a quote. The report is supposed to order by the line_id in one of the tables involved. The problem is that sometimes it sorts in ascending and sometimes in descending order. I can see the bad sort in the report previewer and after moving the report to the server and running it through the Sales Online module in 11.5.9.
    I have spent quite a lot of time trying to figure out where the bad sort is coming from but have thus far failed to identify the culprit.
    Is there a way to trace the report while it's running in the report previewer to identify what forces are acting on the sort?
    -Tracy

    Hi Tracy,
    the column attribute >>group by<< take precedence of the >>order by<< in the sql statement when you have more than one group in data model and the group is a control group.
    1. Example:
    a. SELECT deptno, ename ORDER BY deptno ASCENDING;
    b. deptno + ename are both in group --> Group_1
    c. depotno --> column attribute >>group by<< = DESCENDING
    d. DESCENDING has no effect!
    Deptno Ename
    10---- JAMES
    10---- TURNER
    10---- ALLEN
    10---- BLAKE
    20---- SMITH
    20---- ADAMS
    20---- JONES
    30---- MILLER
    30---- CLARK
    30---- KING
    2. Example:
    a. SELECT car_no, colour_no FROM cars ORDER BY cars_no ASCENDING;
    b. Group_1 --> car_no --> attribute >>group by<< --> DESCENDING
    c. Group_2 --> colour_no --> attribute >>group by<< --> ASCENDING
    d. b. having priority of b.
    e. c. has no effect!
    car_no colour_no
    51450- 4
    51450- 3
    51450- 2
    51450- 1
    26337- 4
    26337- 3
    26337- 2
    26337- 1
    8021-- 4
    8021-- 3
    8021-- 2
    8021-- 1
    Now, when you would like to see colour_no in an ASCENDING order, you must change the order by clause in your sql statement as follows:
    SELECT car_no, colour_no FROM cars ORDER BY colour_no ASCENDING;
    car_no colour_no
    51450- 1
    51450- 2
    51450- 3
    51450- 4
    26337- 1
    26337- 2
    26337- 3
    26337- 4
    8021-- 1
    8021-- 2
    8021-- 3
    8021-- 4
    Know, that the arrows to the left of the column only belongs to the attribute changes. It do not show you the ORDER BY sequence of the sql statement.
    regards,
    Tom
    Message was edited by:
    Tom Rakete

  • How can I sort using a secondary characteristic structure?

    Hello -
    We have started using chracteristic structures in Query Designer 7.0 to group materials/customers for reporting.  Our users love it except that I can't find a way to allow them to sort by a key figure (in a regular column structure) within the characteristic row structure. 
    Here's an example. 
    Net Sales is the Key Figure in the Column Structure.
    Key Customers / Groups is the structure in the rows.  There are selections build for each customer group with indidual customers assigned to each group within the structure.
    The users need to sort the individual customers within each customer group in descending order by Net Sales.
    There's no sorting icon available for the key figure column.
    If you try to sort in the key figure properties, it doesn't work or says "not applicable".
    I've tried creating a condition with 100% but that doesn't work either. 
    We are using BEx Analyzer 7.0 but it doesn't appear to work with the Web Analyzer either.
    Can anyone provide any type of "trick" to accomplish this requirement? 
    Thank you for your help.
    Ann
    Key Customers / Groups                                                                               Net Sales
    Customer Group A (selection)
    Customer 1
    Customer 2
    Customer Group B (selection)
    Customer 3
    Customer 4
    Customer 5
    Customer Group C (selection)
    Customer 6
    Customer 7
    Customer 8

    Hi,
    i think i´ve builded up something similar within a workbook. You just need two querys, one workbook, some standard excel functionality and a makro for sorting the data at the end. I think this should be less work than building a worksheet for every sub group.
    The first query will only select the upper elements of the structure (in your example: "customer group") . The second query will select the complete structure like you´ve builded it originally. The first query needs a ranking key figure. (you can do it by the excel ranking function or BW function, depends on how building that query). Now you put the ranking key figure behind the second query by the excel function "v-lookup". Then you add a second column behind the second query with a excel-ranking funktion for the key figure of the second query which should be sorted. At least you add a third column which identifies the kind of characteristic structure element (for example by if-then function on the key: 1= customer group 0=customer).
    Then you´ll have only to sort the complete second query by those three new columns ´- in best case by a makro - and thats it.
    Hope i could help you with that.
    Greetings,
    Olaf

  • Group Left report does not sort DESCending

    Hello seniors...
    i have the following query that produces result as desired below at SQL level; i am aiming at rows to be displyed in the DESCending order..
    SQL> SELECT Z.ACATG_TYPE, Y.EXPN_CATG, z.ACATG_DESC, y.expn_code, y.expn_name,
      2  DECODE(Z.ACATG_TYPE,'I', x.closing) Income,
      3  DECODE(Z.ACATG_TYPE,'E', x.closing) Expense
      4  FROM(
      5  SELECT PSN_PARTY, expn_name, SUM(nvl(NETT,0)) nett,  SUM(nvl(DEBIT,0)) debit,  SUM(nvl(CREDIT,0
    )) credit,
      6  SUM((nvl(NETT,0)+nvl(DEBIT,0)-nvl(CREDIT,0))) CLOSING
      7  FROM (
      8  SELECT PSN_PARTY, 0 nett, SUM(nvl(debit,0)) DEBIT, SUM(nvl(CREDIT,0)) CREDIT
      9  FROM(
    10   SELECT PSN_TXN_DATE,PSN_PARTY, nvl(DEBIT,0) debit, nvl(CREDIT,0) credit
    11   FROM
    12       (
    94  where PSN_PARTY = expn_code
    95  GROUP BY PSN_PARTY, expn_name) x, expense_master y, Accounts_category z
    96  where x.psn_party = y.expn_code
    97  and   y.expn_catg = z.acatg_code
    98  and   z.acatg_type in ('I','E')
    99  ORDER BY Z.ACATG_TYPE DESC, Y.EXPN_CATG,y.expn_code;
    ACA EXPN_C ACATG_DESC                     EXPN_C EXPN_NAME                             INCOME       EXPENSE
    I   90     Income                         AC2000 Sale                                1333.000
    E   10     Expense                        AC0003 ELECTRICIRTY BILL                                   30.000
    E   10     Expense                        AC0005 TELEPHONE BILL                                      16.000
    E   10     Expense                        AC0007 TEA & SNACKS                                        17.000
    E   10     Expense                        AC0009 REPAIRS & MAINTENANCE                               15.000
    E   10     Expense                        AC0010 MOBILE BILL                                         45.000
    E   10     Expense                        AC0011 REFUND                                             220.000
    E   10     Expense                        AC0019 OFFICE EXPENCE                                      15.000
    E   40     Staff Salaries                 AC0006 STAFF SLALARY                                      250.000
    9 rows selected.But when i made use of the above query in my report with Group Left Option, i dont get it sorted in DESCending order.
    With Tabular type report it sorts correctly as above.
    The screen schot for better idea of my report is attached for the reference.
    [http://i995.photobucket.com/albums/af71/rhnshk/INCEXP.jpg|Report-Preview]
    [http://i995.photobucket.com/albums/af71/rhnshk/INCEXP1.jpg|ReportWizard-DataModel]
    [http://i995.photobucket.com/albums/af71/rhnshk/INCEXP2.jpg|ReportWizard-Groups]
    [http://i995.photobucket.com/albums/af71/rhnshk/INCEXP3.jpg|ReportWizard-Fields]
    [http://i995.photobucket.com/albums/af71/rhnshk/INCEXP4.jpg|ReportWizard-Totals]
    i want the rows with acatg_type = 'I' to be displayed first.
    Sorry for not attaching the complete SQL, but no issues if at all required, i can do that as well.
    Since its a long in-line view created SQL. thought the solution might come out showing this much part only.
    i am using Report 6i on 10g.
    Please help me.

    Thanks Arif,,
    Grouping/Break i need to be done with EXPN_CATG-within-ACATG_TYPE.
    if you can view the my report image links, u'll understand much better.
    EXPN_CODE is not part of the Group Fields.
    Still i tried re-arranging Group fields, but still the same..
    Row with ACATG_TYPE = 'I' is not moving up.
    Please suggest..

  • Can I turn off grouping by date in Finder and also 'Arrange by' and 'Sort by' in ascending and descending order?

    I am trying to arrange my photostream saved search (which doesn't update automatically after I did the search for the first time which is very annoying) but finder won't let me arrange in ascending order of date (i.e.: oldest to newest). Is there a way I can do this or will my folder arrangements always be the one way without the option to change it to the opposite arrangement (same for alphabetical). Also, Finder automatically arranges my photos into groups of dates (e.g.: 'previous 30 days', 'September'). Is there any way I can turn this off?
    Also if anyone can fix this stupid photostream issue for me that would be great!
    thanks very much 

    Even in list view, the photos are grouped by previous seven days, previous 30 days, October, and so on.. there is no option i see that will let me change to order by date modified without these groupings or to just turn these groupings off altogether
    but thank you for your reply
    -Peelo2311

  • Add mp3 to iTunes, delete file from Downloads, add Grouping?

    Can anyone help me make an Applescript (or it may need to be two) that can be used as a folder action to watch the Downloads folder and:
    1) Open .mp3s in iTunes and set track Grouping ID3 field to 'singles', then delete original .mp3s.
    2) Open .zip and .rar archives, parse then unarchived folder for .mp3 files, add them to iTunes, set track Grouping ID3 field to 'albums', then delete original folder of .mp3s.
    2a) Bonus points if the script adds the .mp3s to itunes in descending order based on file name track numbers (track 10, track 9, track 8...).

    bump for more help?

  • Sorting and Grouping in Projects View

    In Projects view, when either of two of the three grouping options is selected, there are two sorts in effect: the groups themselves are sorted, and the contents of each group are sorted. These sorts are handled differently, depending on the grouping selected and the sort order selected.
    (It appears that there is a bit of the old Apple voodoo in here. The results are arbitrary , but they seem to have been carefully chosen to meet most users expectations. That is to say -- and this is an Apple programming trait -- the arbitrariness is faithful to the expected users' needs, not to logic.)
    There are four sorts available, and three groupings
    Sorts:
    . Name
    . Date -- Oldest First
    . Date -- Newest First
    . Library
    Groupings:
    . Ungrouped
    . Group by year
    . Group by folder
    So that's twelve possible ways to display Projects in Projects view.
    Let's look at a few of them. I'm going to refer to the groups as "Year groups" or "Folder groups" and to the contents of the groups as "Projects". So there is sorting of the groups, and sorting of the contents of the groups (same as "within the group"). These I'll refer to as "Groups sorting" and "Projects sorting".
    Sort: Date -- Newest First
    Grouping: Group by Year
    Result: Year groups are sorted in the same order as Projects. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together.
    Sort: Date -- Oldest First
    Grouping: Group by Year
    Results are as expected; a reversal of the "Newest First" sort, but with the same groups: Year groups are sorted in the same order as Projects. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together.
    Sort: Name
    Grouping: Group by Year
    Result: Year groups are sorted by year, oldest first. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together. Projects are sorted alphabetically, descending.
    Sort: Library
    Grouping: Group by year
    Result: Year groups are sorted by year, oldest first. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together. Projects are listed in the order they occur in the Library structure shown on the Library tab of the Inspector. (Note that this last is literal: a Project named "Aardvark Close-ups" if it's in a Folder named "Zoography" will be listed after all the projects in "Yellow Paintings" and all the Projects in "X-rays, thoracic" if those Projects are in alphabetical order by Folder name in the Library. You can see all the Projects in your Library listed on the Library tab of the Inspector by "{Option}+clicking" the disclosure triangle next to "PROJECTS & ALBUMS" twice.)
    Sort: Date - Newest First
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are sorted by date, newest first. Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder.
    Sort: Date - Oldest First
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are sorted by date, oldest first. Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder (where, again, Folder groups are sorted alpha-name, descending, and Projects are sorted alpha-name, descending).
    Sort: Name
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are sorted alphabetically by name, descending. Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder (where, again, Folder groups are sorted alpha-name, descending, and Projects are sorted alpha-name, descending).
    Sort: Library
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are listed in the order they occur in the Library structure shown on the Library tab of the Inspector (see note above). Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder (where, again, Folder groups are sorted alpha-name, descending, and Projects are listed in the order they appear in the Library).
    Ernie [asked:|http://discussions.apple.com/thread.jspa?threadID=2816124&tstart=0]
    +I see those icons but note that those projects in folders will be in different sections arranged alpha, and then date within. Am I correct on that?+
    The answer is, it depends.
    If "Group by year" is selected, the Groups-sorting will always be by date, regardless of the sort order specified. The Groups-sorting order will follow whatever is specified for the Projects sort order (or default to "oldest first").
    If "Group by folder" is selected, the Groups-sorting will always be alphabetical, descending, regardless of the sort order specified. (So if you use Projects view, take care in naming your Folders. Use prefixes if needed to force a desired alpha sort.)
    If "Ungrouped" is selected, there are no Groups and perforce no Groups-sorting.
    That's all I have to say on this topic (today).
    Message was edited by: Kirby Krieger

    In Projects view, when either of two of the three grouping options is selected, there are two sorts in effect: the groups themselves are sorted, and the contents of each group are sorted. These sorts are handled differently, depending on the grouping selected and the sort order selected.
    (It appears that there is a bit of the old Apple voodoo in here. The results are arbitrary , but they seem to have been carefully chosen to meet most users expectations. That is to say -- and this is an Apple programming trait -- the arbitrariness is faithful to the expected users' needs, not to logic.)
    There are four sorts available, and three groupings
    Sorts:
    . Name
    . Date -- Oldest First
    . Date -- Newest First
    . Library
    Groupings:
    . Ungrouped
    . Group by year
    . Group by folder
    So that's twelve possible ways to display Projects in Projects view.
    Let's look at a few of them. I'm going to refer to the groups as "Year groups" or "Folder groups" and to the contents of the groups as "Projects". So there is sorting of the groups, and sorting of the contents of the groups (same as "within the group"). These I'll refer to as "Groups sorting" and "Projects sorting".
    Sort: Date -- Newest First
    Grouping: Group by Year
    Result: Year groups are sorted in the same order as Projects. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together.
    Sort: Date -- Oldest First
    Grouping: Group by Year
    Results are as expected; a reversal of the "Newest First" sort, but with the same groups: Year groups are sorted in the same order as Projects. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together.
    Sort: Name
    Grouping: Group by Year
    Result: Year groups are sorted by year, oldest first. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together. Projects are sorted alphabetically, descending.
    Sort: Library
    Grouping: Group by year
    Result: Year groups are sorted by year, oldest first. Projects which span multiple years are put in multi-year groups. Projects with the same spans are grouped together. Projects are listed in the order they occur in the Library structure shown on the Library tab of the Inspector. (Note that this last is literal: a Project named "Aardvark Close-ups" if it's in a Folder named "Zoography" will be listed after all the projects in "Yellow Paintings" and all the Projects in "X-rays, thoracic" if those Projects are in alphabetical order by Folder name in the Library. You can see all the Projects in your Library listed on the Library tab of the Inspector by "{Option}+clicking" the disclosure triangle next to "PROJECTS & ALBUMS" twice.)
    Sort: Date - Newest First
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are sorted by date, newest first. Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder.
    Sort: Date - Oldest First
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are sorted by date, oldest first. Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder (where, again, Folder groups are sorted alpha-name, descending, and Projects are sorted alpha-name, descending).
    Sort: Name
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are sorted alphabetically by name, descending. Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder (where, again, Folder groups are sorted alpha-name, descending, and Projects are sorted alpha-name, descending).
    Sort: Library
    Grouping: Group by folder
    Result: Folder groups are sorted alphabetically by name, descending. Projects are listed in the order they occur in the Library structure shown on the Library tab of the Inspector (see note above). Clicking a Folder's name in the Project viewer drills down to show the sub-Folders and Projects in the clicked Folder (where, again, Folder groups are sorted alpha-name, descending, and Projects are listed in the order they appear in the Library).
    Ernie [asked:|http://discussions.apple.com/thread.jspa?threadID=2816124&tstart=0]
    +I see those icons but note that those projects in folders will be in different sections arranged alpha, and then date within. Am I correct on that?+
    The answer is, it depends.
    If "Group by year" is selected, the Groups-sorting will always be by date, regardless of the sort order specified. The Groups-sorting order will follow whatever is specified for the Projects sort order (or default to "oldest first").
    If "Group by folder" is selected, the Groups-sorting will always be alphabetical, descending, regardless of the sort order specified. (So if you use Projects view, take care in naming your Folders. Use prefixes if needed to force a desired alpha sort.)
    If "Ungrouped" is selected, there are no Groups and perforce no Groups-sorting.
    That's all I have to say on this topic (today).
    Message was edited by: Kirby Krieger

  • How to show employee names in descending order but 3rd row is fixed and always top on the table ?

    how to show employee names in descending order but 3rd row is fixed and always top on the table ?
    for example employee names is A,B,C, D, E
    and output is     C,E,D,B,A

    Since you are posting in the design forum, the short answer is - you don't.  Rows in a table have no inherent order that you can rely on and the "position" of rows is a visual characteristic that should be implemented by the application that displays
    this information or by the query that is used to generate the resultset.  
    So the next question is how one accomplishes this particular order within a select statement.  That is a tsql question which, for future reference, is best posted to the tsql forum.  In addition, many of the questions or issues that you will face
    have been discussed in the forums - often many, many times.  The first thing you should do when faced with an issue is to simply search the forums and leverage the the knowledge that has already been discussed.  In doing so you are quite likely to
    see suggestions or related issues that you should consider in your search for a solution.  
    Now, to answer the question - you need to formulate a order by clause that forces the rows to be sorted in the manner you desire.  Effectively you have 2 levels of sorting.  The first level divides your rows into 2 groups.  Group 1 consists
    of rows where name = E and Group 2 is everything else.  Following that you then need to sort the rows in each group by name in descending order.  Something like:  
    order by case name when E then 1 else 2 end, name desc

  • Grouping by a Metadata Column in a SharePoint Document Library

    Hi All,
    I have a document library with a managed metadata column. Now I need to create a view in which i need to group by the metadata column but I'm not able to see the managed metadata column in the Group By Columns list. Is it possible to accomplish this? Can
    anyone pls help me out. Thank you.

    It's kind of a lot of code... but here goes!
    This all goes into a separate JS file:
    (Tip, to copy this code chunk, it's easiest to start your selection outside the code block)
    var js_MultiFilter = (function () {
    function js_MultiFilter(listName, site) {
    this.document = document; f (typeof listName == "undefined") { listName = 'Documents'; }if (typeof site == "undefined") { this.useCurrentSite = true; }else { this.useCurrentSite = false; }this.listName = listName;this.listRootfolder = "";this.site = site;this.notificationEnabled = true;this.filterFields = []; this.filterNames = []; this.selectModes = []; this.filterValueLists = []; this.displayFields = []; this.displayNames = []; this.displayModes = []; this.items = []; this.potentialFilters = []; this.queryFields = []; this.selectedFilters = []; this.sortField = "Title"; this.sortDesc = false; this.selectMode = "checkbox"; this.filterHeadingClass = "js_MFFilterHeading"; this.filterTableClass = "js_MFFilterTable"; this.filterColumnClass = "js_MFFilterColumn"; this.innerFilterColumnClass = "js_MFInnerFilterColumn"; this.filterCheckboxClass = "js_MFFilterCell"; this.displayOuterClass = "js_MFResultOuter"; this.displayTableClass = "js_MFResultTable"; this.displayRowClass = "js_MFResultRow";
    this.displayHeaderClass = "js_MFResultHeader"; this.displayCellClass = "js_MFResultCell"; this.filterLabelClass = "js_MFFilterLabel"; this.filterLabelHoverClass = "js_MFFilterHoverLabel"; this.filterLabelSelectClass = "js_MFFilterSelectLabel"; this.filterLabelUnusedClass = "js_MFFilterUnusedLabel"; this.resultCountClass = "js_MFResultCount"; this.maxResultHeight = "270px"; this.rowLimit = 100; this.divId; this.evenColumnWidths = true; this.evenFilterColumnWidths = true; this.resultsId = "js_MultiFilterResults1"; this.showMetadataGuids = false; this.maxFilterHeight = 13;
    /*Methods*/ this.containsString = containsString; this.getIndexOf = getIndexOf; this.addDisplayField = addDisplayField; this.addStaticDisplayField = addStaticDisplayField; this.addFilterField = addFilterField; this.bindToDiv = bindToDiv; this.onQuerySucceeded = onQuerySucceeded; this.onQueryFailed = onQueryFailed; this.getValueAsString = getValueAsString; this.showLoading = showLoading; this.removeLoading = removeLoading; this.toggleAndApplyFilter = toggleAndApplyFilter; this.applyFilter = applyFilter; this.insertDefaultCss = insertDefaultCss; this.get_defaultCss = get_defaultCss; this.isPageInEditMode = isPageInEditMode; this.HoverFilterLabel = HoverFilterLabel; this.DeHoverFilterLabel = DeHoverFilterLabel;
    /*Interface Functions*/
    function isPageInEditMode() { return (document.forms[0].elements["MSOLayout_InDesignMode"].value == "1") }
    function addFilterField(fieldName, displayName, selectMode) { if (typeof (displayName) == "undefined") { displayName = fieldName; } if (typeof (selectMode) == "undefined") { selectMode = this.selectMode; } this.filterFields.push(fieldName); this.filterNames.push(displayName); this.selectModes.push(selectMode.toString().toLowerCase()); var filterValueList = []; this.filterValueLists.push(filterValueList); var potFilterValueList = []; this.potentialFilters.push(potFilterValueList); if (!this.containsString(this.queryFields, fieldName)) { this.queryFields.push(fieldName); } }
    function addDisplayField(fieldName, displayName, displayMode) { if (typeof (displayName) == "undefined") { displayName = fieldName; } if (typeof (displayMode) == "undefined") { displayMode = "default"; } this.displayFields.push(fieldName); this.displayNames.push(displayName); this.displayModes.push(displayMode); if (!this.containsString(this.queryFields, fieldName)) { this.queryFields.push(fieldName); } }
    function addStaticDisplayField(displayText, displayName, displayMode) { if (typeof (displayName) == "undefined") { displayName = displayText; } if (typeof (displayMode) == "undefined") { displayMode = "default"; } this.displayFields.push("@" + displayText); this.displayNames.push(displayName); this.displayModes.push(displayMode); }
    function insertDefaultCss(RevertToDefaultStyles) { var js_style = this.document.createElement("style"); js_style.type = "text/css"; document.getElementsByTagName("head")[0].appendChild(js_style); var newCss = this.get_defaultCss(RevertToDefaultStyles); if (typeof js_style.styleSheet != "undefined") { js_style.styleSheet.cssText = newCss; } else { js_style.appendChild(this.document.createTextNode(newCss)); } }
    function bindToDiv(divId) { /* Causes the control to appear in the specified div.*/ if (typeof (divId) != "undefined") { this.divId = divId; } if (this.notificationEnabled) { showLoading(this); } var clientContext; if (this.useCurrentSite) { clientContext = new SP.ClientContext.get_current(); } else { clientContext = new SP.ClientContext(this.site); } var web = clientContext.get_web(); var lists = web.get_lists(); var list = lists.getByTitle(this.listName); var camlQuery = new SP.CamlQuery(); var descending = ""; if (this.sortDesc) { descending = " Ascending='False'"; } var camlString = '<View><Query><OrderBy><FieldRef Name=\'' + this.sortField + '\'' + descending + '/></OrderBy></Query><RowLimit>' + this.rowLimit + '</RowLimit></View>'; camlQuery.set_viewXml(camlString); this.collListItem = list.getItems(camlQuery); var strFields = "ID,"; if (containsString(this.displayModes, "fileref", true)) { strFields += "FileRef," }
    for (var i = 0; i < this.queryFields.length; i++) { strFields += this.queryFields[i] + ","; } strFields = strFields.substring(0, strFields.length - 1); this.listRootfolder = list.get_rootFolder(); clientContext.load(this.listRootfolder); clientContext.load(this.collListItem, "Include(" + strFields + ")"); clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed)); }
    function showLoading(parent) { parent.notifyId = SP.UI.Notify.addNotification("Loading...", true); }
    function removeLoading(parent) { SP.UI.Notify.removeNotification(parent.notifyId); }
    function getValueAsString(fieldValue, activeHyperlinks, showLinkUrl, displayMode, additionalFieldValue) { var localNull = null; if (typeof (displayMode) == "undefined") { displayMode = "default"; } /*wraps hyperlink text in <a> tag*/ if (typeof (activeHyperlinks) == "undefined") { activeHyperlinks = false; } /*causes hyperlinks to display URL by default instead of description*/ if (typeof (showLinkUrl) == "undefined") { showLinkUrl = true; } var returnValue = []; var isArray = false if (typeof (fieldValue) == "object" && fieldValue != localNull) { if (fieldValue[0] != localNull) { if (fieldValue.length) { for (var i = 0; i < fieldValue.length; i++) { returnValue.push(this.getValueAsString(fieldValue[i])); isArray = true; } } } } if (!isArray) { if (fieldIsText(fieldValue)) { if (displayMode.toString().toLowerCase() == "link") { returnValue = '<a href="' + fieldValue + '">' + fieldValue + '</a>'; }
    else if (displayMode.toString().toLowerCase() == "display") { returnValue = '<a href="' + this.listRootfolder.get_serverRelativeUrl() + '/Forms/DispForm.aspx?ID=' + additionalFieldValue + '">' + fieldValue + '</a>'; } else if (displayMode.toString().toLowerCase() == "edit") { returnValue = '<a href="' + this.listRootfolder.get_serverRelativeUrl() + '/Forms/EditForm.aspx?ID=' + additionalFieldValue + '">' + fieldValue + '</a>'; } else if (displayMode.toString().toLowerCase() == "fileref") { returnValue = '<a href="' + additionalFieldValue + '">' + fieldValue + '</a>'; } else { returnValue = fieldValue; } } else { if (fieldValue == localNull) { returnValue = ""; } else { if (fieldIsDate(fieldValue)) { returnValue = fieldValue._toFormattedString(); } else { if (fieldIsHyperlink(fieldValue)) { var desc = fieldValue.get_description(); var url = fieldValue.get_url(); if (showLinkUrl) { if (url != localNull) { returnValue = url; } else { if (desc != localNull) { returnValue = desc; } } }
    else { if (desc != localNull) { returnValue = desc; } else { if (url != localNull) { returnValue = url; } } } if (activeHyperlinks && url != localNull) { returnValue = '<a href="' + url + '">' + returnValue + '</a>'; } } else { if (fieldIsLookup(fieldValue)) { if (displayMode.toString().toLowerCase() == "link") { returnValue = '<a href="' + fieldValue.get_lookupValue() + '">' + fieldValue.get_lookupValue() + '</a>'; } else { if(fieldValue.get_lookupValue() == ""){ /* When doing a lookup count, the lookup ID is used */ returnValue = fieldValue.get_lookupId(); }else{ returnValue = fieldValue.get_lookupValue(); } } } else { returnValue = ""; } } } } } } return returnValue; }
    function onQuerySucceeded(sender, args) { var listItemEnumerator = this.collListItem.getEnumerator(); while (listItemEnumerator.moveNext()) { var oListItem = listItemEnumerator.get_current(); var localNull = null; var item = new Object(); item.filterValues = []; item.displayValues = []; for (var i = 0; i < this.filterFields.length; i++) { var filterValue = []; /*Collect all filter values*/ var rawValue = this.getValueAsString(oListItem.get_item(this.filterFields[i])); if (typeof (rawValue) == "string") { filterValue.push(rawValue); } else { filterValue = rawValue; } for (var k = 0; k < filterValue.length; k++) { /*if this value hasn't been encountered before, add it to our filter value list for this filter field*/ var thisvalue = filterValue[k]; if (this.showMetadataGuids == false) { if (thisvalue.indexOf('|') != -1) { thisvalue = thisvalue.split('|')[0]; } } if (!containsString(this.filterValueLists[i], thisvalue)) { this.filterValueLists[i].push(thisvalue); } } item.filterValues.push(filterValue); }
    for (var j = 0; j < this.displayFields.length; j++) { var initialValue = this.displayFields[j]; if (initialValue.startsWith("@")) { initialValue = initialValue.substring(initialValue.indexOf("@") + 1); } else { initialValue = oListItem.get_item(this.displayFields[j]) } /*Collect all display values*/ if (this.displayModes[j] == "fileref") { var displayValue = this.getValueAsString(initialValue, true, false, this.displayModes[j], oListItem.get_item("FileRef")); } else { var displayValue = this.getValueAsString(initialValue, true, false, this.displayModes[j], oListItem.get_item("ID")); } item.displayValues.push(displayValue); } this.items.push(item); } var filterSelectBoxes = []; for (var i = 0; i < this.filterFields.length; i++) { var selectbox = this.document.createElement("div"); selectbox.className = this.filterColumnClass; selectbox.setAttribute("index", i); var heading = this.document.createElement("div"); heading.className = this.filterHeadingClass;
    heading.innerHTML = this.filterNames[i]; selectbox.appendChild(heading); var columnContainer = document.createElement("div"); selectbox.appendChild(columnContainer); var innerColumns = []; for (var j = 0; j < this.filterValueLists[i].length; j += this.maxFilterHeight) { var innerColumn = document.createElement("div"); innerColumn.className = this.innerFilterColumnClass; innerColumns.push(innerColumn); columnContainer.appendChild(innerColumn); } this.filterValueLists[i].sort(); for (var j = 0; j < this.filterValueLists[i].length; j++) { var input = document.createElement("input"); input.type = this.selectModes[i]; input.className = this.filterCheckboxClass; var checkboxText = this.filterValueLists[i][j]; input.setAttribute("name", this.filterFields[i]); input.id = "js_mf_" + i + "_" + j; var labelid = "label_" + i + "_" + j; input.setAttribute("label", labelid); input.value = checkboxText; var checkboxlabel = document.createTextNode(checkboxText); var checkboxlabelspan = document.createElement("span");
    checkboxlabelspan.className = this.filterLabelClass; checkboxlabelspan.id = labelid; checkboxlabelspan.setAttribute("checkbox", input.id); checkboxlabelspan.appendChild(checkboxlabel); var parent = this;
    /*ADD EVENT HANDLER*/ if (input.addEventListener) { /*chrome, firefox, and new IE*/ input.addEventListener("change", function (element) { parent.applyFilter(element, parent) }); input.addEventListener("click", function (element) { parent.applyFilter(element, parent) }); checkboxlabelspan.addEventListener("click", function (element) { parent.toggleAndApplyFilter(element, parent) }); checkboxlabelspan.addEventListener("mouseenter", function (element) { parent.HoverFilterLabel(element, parent) }); checkboxlabelspan.addEventListener("mouseout", function (element) { parent.DeHoverFilterLabel(element, parent) }); } else { /*legacy internet explorer*/ input.attachEvent("onchange", function (element) { parent.applyFilter(element, parent) }); input.attachEvent("onclick", function (element) { parent.applyFilter(element, parent) }); checkboxlabelspan.attachEvent("onclick", function (element) { parent.toggleAndApplyFilter(element, parent) });
    checkboxlabelspan.attachEvent("onmouseenter", function (element) { parent.HoverFilterLabel(element, parent) }); checkboxlabelspan.attachEvent("onmouseout", function (element) { parent.DeHoverFilterLabel(element, parent) }); } var currentColumnIndex = 0; for (var k = 0; k < innerColumns.length; k++) { if (j >= k * this.maxFilterHeight) currentColumnIndex = k; } var currentColumn = innerColumns[currentColumnIndex]; currentColumn.appendChild(input); currentColumn.appendChild(checkboxlabelspan); currentColumn.appendChild(document.createElement("br")); } filterSelectBoxes.push(selectbox); } var htmlToWrite = document.createElement("div"); htmlToWrite.className = this.filterTableClass; for (var i = 0; i < filterSelectBoxes.length; i++) { htmlToWrite.appendChild(filterSelectBoxes[i]); }
    /*clear the loading image and add our filters*/ document.getElementById(this.divId).innerHTML = ""; document.getElementById(this.divId).appendChild(htmlToWrite);
    /*Create the div to display the results*/ var detailsDiv = document.createElement("div"); detailsDiv.className = this.displayOuterClass; var detailIdstring = "Details"; iterator = 0; var detailsId = detailIdstring + iterator; while (this.document.getElementById(detailsId) != localNull) { iterator = iterator + 1; detailsId = detailIdstring + iterator; } detailsDiv.id = detailsId; this.resultsId = detailsId;
    /*create a div for a row within the results table*/ var detailDiv = document.createElement("div"); detailDiv.className = this.displayRowClass; detailDiv.appendChild(document.createTextNode("<img src='/_layouts/images/loading.gif' />")); detailsDiv.appendChild(detailDiv);
    /*Add the results below the filters*/ document.getElementById(this.divId).appendChild(detailsDiv); for (var i = 0; i < this.filterFields.length; i++) { var selectedFieldArray = []; this.selectedFilters.push(selectedFieldArray); } if (this.notificationEnabled) { this.removeLoading(this); } applyFilter(null, this); }
    function DeHoverFilterLabel(labelel, parent) { var sourcelabel = labelel.srcElement; if (typeof (sourcelabel) == "undefined") { sourcelabel = labelel; } var checkboxid = sourcelabel.getAttribute("checkbox"); var el = document.getElementById(checkboxid); if (el.checked) { sourcelabel.className = parent.filterLabelSelectClass; } else if (sourcelabel.getAttribute("unused") == "unused") { sourcelabel.className = parent.filterLabelUnusedClass; } else { sourcelabel.className = parent.filterLabelClass; } }
    function SelectFilterLabel(labelel, parent) { var sourcelabel = labelel.srcElement; if (typeof (sourcelabel) == "undefined") { sourcelabel = labelel; hover = false; } var checkboxid = sourcelabel.getAttribute("checkbox"); var el = document.getElementById(checkboxid); if (el.checked) { sourcelabel.className = parent.filterLabelSelectClass; } }
    function HoverFilterLabel(labelel, parent) { var sourcelabel = labelel.srcElement; var hover = true; if (typeof (sourcelabel) == "undefined") { sourcelabel = labelel; } var checkboxid = sourcelabel.getAttribute("checkbox"); var el = document.getElementById(checkboxid); if (el.checked) { sourcelabel.className = parent.filterLabelSelectClass; } else if (sourcelabel.getAttribute("unused") == "unused") { sourcelabel.className = parent.filterLabelUnusedClass; } else if (hover) { sourcelabel.className = parent.filterLabelHoverClass; } else { sourcelabel.className = parent.filterLabelClass; } }
    function toggleAndApplyFilter(labelel, parent) { var sourcelabel = labelel.srcElement; if (typeof (sourcelabel) == "undefined") { sourcelabel = labelel; } var checkboxid = sourcelabel.getAttribute("checkbox"); var el = document.getElementById(checkboxid); var select = false; if (el.checked) { el.checked = false; } else { el.checked = true; select = true; } parent.applyFilter(el, parent); if (select) { sourcelabel.className = parent.filterLabelSelectClass; } else { sourcelabel.className = parent.filterLabelHoverClass; } }
    function applyFilter(el, parent) { var localNull = null; var resultcount = 0; if (el != localNull) { var element = el.srcElement; if (typeof (element) == "undefined") { element = el; } SelectFilterLabel(document.getElementById(element.getAttribute("label")), parent); var filter = element.value; var parentNode = element.parentNode; var tempElement = element.parentNode; while (tempElement.getAttribute("index") == localNull) { tempElement = tempElement.parentNode; } var fieldIndex = tempElement.getAttribute("index"); var elements = document.getElementsByName(element.getAttribute("name")); for (var inc = 0; inc < elements.length; inc++) { var thisel = elements[inc]; if (typeof (thisel.getAttribute("label")) != "undefined") { DeHoverFilterLabel(document.getElementById(thisel.getAttribute("label")), parent); } } if (element.checked) {
    if (parent.selectModes[fieldIndex] == "radio") { /*remove all other filters in this field.*/ parent.selectedFilters[fieldIndex] = []; } if (!containsString(parent.selectedFilters[fieldIndex], filter)) { parent.selectedFilters[fieldIndex].push(filter); } } else { var index = getIndexOf(parent.selectedFilters[fieldIndex], filter); if (typeof (index) != "undefined") { parent.selectedFilters[fieldIndex].splice(index, 1); } } } var resultsOuterDiv = document.createElement("div"); resultsOuterDiv.className = parent.displayTableClass; document.getElementById(parent.resultsId).innerHTML = ""; document.getElementById(parent.resultsId).appendChild(resultsOuterDiv); var resultsHeaderDiv = document.createElement("div"); resultsHeaderDiv.className = parent.displayRowClass; for (var i = 0; i < parent.displayNames.length; i++) { var headerCell = document.createElement("div"); headerCell.className = parent.displayHeaderClass; headerCell.innerHTML = parent.displayNames[i]; resultsHeaderDiv.appendChild(headerCell); }
    resultsOuterDiv.appendChild(resultsHeaderDiv); for (var i = 0; i < parent.potentialFilters.length; i++) { parent.potentialFilters[i] = []; /*initialize an array of empty arrays (one per filter)*/ } for (var i = 0; i < parent.items.length; i++) { /*for each item...*/ var itemfields = parent.items[i].filterValues var itemContainsAllSelectedValues = true; for (var j = 0; j < parent.selectedFilters.length; j++) { /*for each filter field*/ for (var k = 0; k < parent.selectedFilters[j].length; k++) { /*for each selected filter value*/ if (parent.selectedFilters[j].length == 0) continue; /*skip it if nothing is selected.*/ var thisvalue = parent.items[i].filterValues[j]; /*check if the item has that value within that field*/ if (!containsString(thisvalue, parent.selectedFilters[j][k], this.showMetadataGuids)) { itemContainsAllSelectedValues = false; break; } if (!itemContainsAllSelectedValues) break; } }
    if (itemContainsAllSelectedValues) { resultcount++; var rowDiv = document.createElement("div"); rowDiv.className = parent.displayRowClass; for (var j = 0; j < parent.items[i].displayValues.length; j++) { var cellDiv = document.createElement("div"); cellDiv.className = parent.displayCellClass; cellDiv.innerHTML = parent.items[i].displayValues[j]; rowDiv.appendChild(cellDiv); } for (var j = 0; j < parent.items[i].filterValues.length; j++) { for (var k = 0; k < parent.items[i].filterValues[j].length; k++) { parent.potentialFilters[j].push(parent.items[i].filterValues[j][k]); } } resultsOuterDiv.appendChild(rowDiv); } } if (resultcount == 0) { var rowDiv = document.createElement("div"); rowDiv.className = parent.displayRowClass; var cellDiv = document.createElement("div"); cellDiv.className = parent.displayCellClass; cellDiv.innerHTML = "No results were found for the specified criteria."; rowDiv.appendChild(cellDiv); resultsOuterDiv.appendChild(rowDiv); }
    /*Stylize dead-end filter options*/ for (var i = 0; i < parent.filterValueLists.length; i++) { for (var j = 0; j < parent.filterValueLists[i].length; j++) { var labelid = "label_" + i + "_" + j; var checkboxid = "js_mf_" + i + "_" + j; var filterCheck = document.getElementById(checkboxid); var fieldValue = parent.filterValueLists[i][j]; var tempElement = filterCheck.parentNode; while (tempElement.getAttribute("index") == localNull) { tempElement = tempElement.parentNode; } var fieldIndex = tempElement.getAttribute("index"); if (!containsString(parent.potentialFilters[fieldIndex], fieldValue, parent.showMetadataGuids)) { document.getElementById(labelid).className = parent.filterLabelUnusedClass; document.getElementById(labelid).setAttribute("unused", "unused"); } else { if (document.getElementById(checkboxid).checked) { document.getElementById(labelid).className = parent.filterLabelSelectClass; } else { document.getElementById(labelid).className = parent.filterLabelClass; }
    document.getElementById(labelid).setAttribute("unused", "false"); } } } var resultCountId = "js_mf_resultcount"; var resultCountDiv; if (document.getElementById(resultCountId) == null) { resultCountDiv = document.createElement("div"); resultCountDiv.id = "js_mf_resultcount"; resultCountDiv.className = parent.resultCountClass; document.getElementById(parent.divId).appendChild(resultCountDiv) } else { resultCountDiv = document.getElementById(resultCountId); } if (resultcount == 1) { resultCountDiv.innerHTML = resultcount + " result"; } else { resultCountDiv.innerHTML = resultcount + " results"; } }
    function onQueryFailed(sender, args) { this.removeLoading(this); this.document.getElementById(this.divId).innerHTML = 'The page was unable to populate the data this time.' + '<br/><span style="color:white">' + args.get_message() + '</span>\n'; }
    function get_defaultCss(useTheseClasses, includeStyleTags) { if (typeof useTheseClasses != "boolean") useTheseClasses = true; if (useTheseClasses) { this.filterHeadingClass = "js_Heading"; this.filterTableClass = "js_MFFilterTable"; this.filterColumnClass = "js_MFFilterColumn"; this.filterCheckboxClass = "js_MFFilterCell"; this.displayOuterClass = "js_MFResultOuter"; this.displayTableClass = "js_MFResultTable"; this.displayRowClass = "js_MFResultRow"; this.displayHeaderClass = "js_MFResultHeader"; this.displayCellClass = "js_MFResultCell"; this.filterLabelClass = "js_MFFilterLabel"; } if (typeof includeStyleTags != "boolean") includeStyleTags = false; var openstyletag = ""; var closestyletag = ""; if (includeStyleTags) { openstyletag = "<style>"; closestyletag = "</style>"; } var leftright_padding = "padding-left:2px;padding-right:2px;"; var tableLayoutFixed = ""; var filterTableLayoutFixed = ""; if (this.evenColumnWidths || this.dockResultHeaders) { tableLayoutFixed = "table-layout:fixed; "; }
    if (this.evenFilterColumnWidths) { filterTableLayoutFixed = "table-layout:fixed; "; } return openstyletag + "." + this.filterHeadingClass + "{font-weight:bold;background:#DDDDDD;text-align:center;}." + this.filterTableClass + "{background:#EEEEEE;display:table;width:100%;"+filterTableLayoutFixed+"}." + this.filterColumnClass + "{ display:table-cell;border-left:1px solid #CCC; border-right:1px solid #CCC;}." + this.filterCheckboxClass + "{padding-left: 5px;}." + this.displayOuterClass + "{height:" + this.maxResultHeight + "; overflow:auto; border:1px solid #CCC;}." + this.displayTableClass + "{display:table; " + tableLayoutFixed + "width:100%; text-align:left;}." + this.displayRowClass + "{width:100%;text-align:left;display:table-row;border-bottom:1px solid #EEEEEE;}." + this.displayHeaderClass + "{background:gray;color:white;display:table-cell; padding:5px; font-weight:bold;}." + this.displayCellClass + "{border-right:solid #CCC 1px; " + "border-left:0px;border-top:0px;border-bottom:1px solid #EEEEEE;"
    + "display:table-cell;padding:5px;}." + this.innerFilterColumnClass + "{float:left;}." + this.filterLabelClass + "{margin:1px; cursor:pointer;" + leftright_padding + "}." + this.filterLabelHoverClass + "{cursor:pointer; margin:1px;text-decoration:underline;" + leftright_padding + "}." + this.filterLabelSelectClass + "{background: #555; color:white; cursor:pointer; border:1px solid #555;" + leftright_padding + "}." + this.filterLabelUnusedClass + "{color:#bbb;margin:1px;cursor:default;" + leftright_padding + "}." + this.resultCountClass + "{text-align:right;font-weight:bold;}" + closestyletag; }
    function fieldIsLookup(field) { return (typeof field.get_lookupValue == 'function'); }
    function fieldIsDate(field) { return (typeof field._toFormattedString == 'function'); }
    function fieldIsHyperlink(field) { return (typeof field.get_url == 'function'); }
    function fieldIsText(field) { return (typeof field == 'string'); }
    /* HELPER FUNCTIONS*/
    /* Helper function to imitate Array.contains() method */ function containsString(strArray, text, showMetadataGuids) { if (typeof (showMetadataGuids) == "undefined") { showMetadataGuids = true; } var contains = false; for (i in strArray) { if (strArray[i] == text) { contains = true; break; } else if (showMetadataGuids == false) { if (strArray[i].indexOf('|') != -1) { if (strArray[i].split('|')[0] == text) { contains = true; break; } } } } return contains; }
    /* Helper function to imitate Array.indexOf() method */ function getIndexOf(strArray, text) { for (i in strArray) { if (strArray[i] == text) return i; } }
    return js_MultiFilter;})();
    Then you can reference the JS file and put the filter control on your page like so:
    <div id="js_MultiFilterExample"><img src="/_layouts/images/loading.gif"/></div>
    <script src="/[wherever you saved your js file]/js_MultiFilter.js"></script>
    <script>
    ExecuteOrDelayUntilScriptLoaded(newInstance, "sp.js");
    function newInstance(){
    var mf = new js_MultiFilter("Library Name"); // pass the list display name
    //// Optional Parameters
    //mf.maxResultHeight = "100%"; // set the max height of the results (default: "270px")
    mf.sortField = "FileLeafRef"; // specify internal name of field to sort results by (default: Title)
    //mf.sortDesc = true; // sort descending (default: false)
    //mf.evenColumnWidths = false; // equal result column widths (disable at own risk) (default: true)
    mf.evenFilterColumnWidths = false; // equal filter column widths (default: true)
    //mf.rowLimit = 500; // increase the result row limit imposed on the query (default: 100)
    //mf.notificationEnabled = false; // show the fly-out Loading notification (default: true)
    //mf.selectMode = "radio"; // Specify the default select mode i.e. checkbox or radio (default: checkbox)
    //mf.showMetadataGuids = true; // Do not trim the GUID suffix from managed metadata filters (default: false)
    //mf.maxFilterHeight = 20 ; // Specify the maximum number of options to display in a column before adding another column (default: 13)
    //// Filter and Display Fields
    mf.addFilterField("Category","Category","radio"); // (internal name, display name (optional), select mode (optional))
    mf.addFilterField("Tags");
    //// addDisplayField() displays an additional field from each list item
    //// addStaticDisplayField() adds a column that displays the same text for every item
    mf.addDisplayField("FileLeafRef","Link to Doc","fileref"); // (internal name, display name (optional), display mode (optional))
    mf.addStaticDisplayField("View Properties","Display Form","display"); // (display text, display name (optional), display mode (optional))
    mf.addDisplayField("Author","Created By");
    mf.addDisplayField("Modified");
    //// Valid display modes are: default (display value as text), link (treat the value as a hyperlink),
    //// display (link to library display form), edit (link to library edit form), and fileref (link to document)
    //// CSS classes used by the control
    //mf.filterHeadingClass = "js_MFFilterHeading";
    //mf.filterTableClass = "js_MFFilterTable";
    //mf.filterColumnClass = "js_MFFilterColumn";
    //mf.filterInnerColumnClass = "js_MFInnerFilterColumn";
    //mf.filterCheckboxClass = "js_MFFilterCell";
    //mf.displayOuterClass = "js_MFResultOuter";
    //mf.displayTableClass = "js_MFResultTable";
    //mf.displayRowClass = "js_MFResultRow";
    //mf.displayHeaderClass = "js_MFResultHeader";
    //mf.displayCellClass = "js_MFResultCell";
    //mf.filterLabelHoverClass = "js_MFFilterHoverLabel";
    //mf.filterLabelSelectClass = "js_MFFilterSelectLabel";
    //mf.filterLabelUnusedClass = "js_MFFilterUnusedLabel";
    //mf.resultCountClass = "js_MFResultCount";
    mf.insertDefaultCss();
    mf.bindToDiv("js_MultiFilterExample");
    </script>
    Uncomment anything you need to change!

  • How to compare consecutive groups of numbers in arrays

    Hi
    I require to place the solution into a 1D array.
    I need to compare two arrays and save the same numbers that are in both arrays but also save groups of numbers that may be in only one of the two arrays being compared.
    In the example l have not been able to place all consecutive groups of numbers 8,9,10,11,12 into a 1D array.
    In the example l need to filter out the zeros and the number four.
    The numbers in both arrays are always in descending order however may not be in the order of index number of array. That is 15 = 15 index number
    A consecutive group of numbers in this example is a group that increase by a value of 1. E.g.. 8,9,0,22,23,24 are two consecutive groups of numbers.
    Thank  you
    Solved!
    Go to Solution.
    Attachments:
    Compare numbers and consecutive numbers in arrays.vi ‏17 KB

    Hi Lynn
    I did have a look at the consecutive array solution. I have looked and looked l thought l knew how it worked but after a number of separate evaluations with other code l have failed. I am just glad it works. With the consecutive array solution l tried today my own code but l lost either the first number of the last number of a consecutive group of numbers.
    I may have confused you but in doing so you have provided a real different view which l am very grateful. You have viewed the consecutive number problem as just a single 1D array problem. By doing this you have opened my eyes to another way to do the job and a way to handle this type of data. However l am also comparing two arrays. For example l have to pick up say two equal values in two columns that the consecutive array does not detect and then correctly locate a value in the final array if the value is not in the final array.
    What l have not told you is also l have to be able to identify groups of numbers in two 1D arrays. E.g... Array 1 has 1,2,9,10 next array has 9,10 the final array ends up 9,10 when l would like 0,9,10. When viewing numbers by rows later on l can then detect with a array length vi the length of the 1,2 groups of numbers over a large number of columns. If 9,10 jumps to the front it becomes a wrong length. This is actually my main problem which has caused me a large amount of extra programming. I have gone back to basics to see what l can do differently and you have provided the first clue with the consecutive array. I placed it in my main program today and it filtered a lot variable data which l could not remove without losing real data. The main data lost in your solution was the say 17 number in two columns which in an image is a horizontal line. I know what l have just provided you in this paragraph is all new information but it provides a background as to what l am up to. I am getting pixel data from a 2D array and comparing +1 index 1D array with a normal array. This way l can view the data of the next column to see if there is a pattern. I am actually trying to program an array as how humans view objects in images.
    I will have another go at integrating your solution next week
    Regards
    Michael

  • Ideal way to report on Nested Groups and their Members - I can get the script to work if there's one group, but not if there is two or more

    Hi All,
    I like to keep track of Groups and Users added into our Domain Admins.  Yes, it should always be minimal, but if I can have a daily report just to be certain, I'll sleep better.
    The following works just fine if there is a single nested group.  I cannot get it to work properly if there is more than one.  I'm hoping you'll see what I'm missing.
    Works fine:
    $admins = get-adgroupmember "domain admins"
    foreach($i in $admins){if($i.objectClass -eq "group"){ get-adgroupmember $i.samaccountname |foreach {New-Object PSObject -Property @{ username = $_.name;Group = $($i.name)}} | select username,group | export-csv c:\Users_and_Groups.csv -Notypeinformation}}
    Does not work well.  Result is that the "Group" information doesn't change to the correct group:
    $myCol=@()
    foreach($admin in $admins){if($admin.objectClass -eq "group"){$myCol+=$admin.samaccountname}{foreach($i in $myCol){get-adgroupmember $i | foreach {New-Object PSObject -Property @{ username = $_.name;Group = $($admin.name)}} | select username,group
    | export-csv c:\Users_and_Groups.csv -Notypeinformation}}}
    Here is what I have in $myCol:
    PS C:\Users\Administrator> $myCol
    MarketingPSO
    RMSysAdmins
    I tried shortening up the one-liner a bit more, but for some reason the "RMSysAdmins" is the only Group listed even though Leia and Han are in the MarketingPSO Group:
    foreach($i in $myCol){get-adgroupmember $i | foreach {New-Object PSObject -Property @{ username = $_.name;Group = $($admin.name)}} | select username,group }
    username                                                   
    Group                                                     
    Leia Organa                                                
    RMSysAdmins                                               
    Han Solo                                                   
    RMSysAdmins                                               
    c3po                                                       
    RMSysAdmins                                               
    Darth Vader                                                
    RMSysAdmins                                               
    Boba Fett                                                  
    RMSysAdmins
    Thank you very much for your time,
    Mr Mister

    Hi Mr Mister,
    To get nested group members, this script is for your reference:
    function Get-ADNestedGroupMembers {
    [cmdletbinding()]
    param ( [String] $Group )
    Import-Module ActiveDirectory
    $Members = Get-ADGroupMember -Identity $Group|sort-object objectClass -descending
    $members | % {
    if($_.ObjectClass -eq "group") {
    Get-ADNestedGroupMembers -Group $_.samaccountname
    } else {
    New-Object PSObject -Property @{ username = $_.name;Group = $Group }}
    Get-ADNestedGroupMembers "groupname"
    If there is anything else regarding this issue, please feel free to post back.
    Best Regards,
    Anna Wang
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Support, contact [email protected]

  • Is this Oracle Reports bug – "break order property" in "group above" report

    Is this Oracle Reports bug – “break order property” in "group above" report
    Could anybody confirm that in "group above" report, we could only order the brake column's values with ""none" or "ascending" or "descending" provided by "break order property"?
    In the following example, “Dept” is brake column. Oracle Reports allows us to order values in “Dept” with “descending” provided by “break order property”:
    Dept 30
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    Dept 20
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    Dept 10
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    or “ascending” provided by “break order property”:
    Dept 10
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    Dept 20
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    Dept 30
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    I need to do:
    Dept 20
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    Dept 10
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    Dept 30
    job ename salary
    xxx xxx xxx
    xxx xxx xxx
    Could I do this? Could anybody confirm that we could never ever do this, or If yes, how?
    Millions of thanks for advice.
    M.Z.
    Edited by: jielan on Sep 18, 2010 8:23 AM

    Why should that be a bug? You have a custom requirement and have to find a way to fulfill it. But, what is your actual sorting order? Do you have only this three departments? If so, you could add an addtional column in your query like
    DECODE(DEPT,  20, 1, 10, 2, 30, 3, 4) SORTINGput that column in the same group as dept and sort after that new column.

  • Group Sort on formula field

    I am using CR Professional 11.5 on Windows XP/Progress platform.
    I have a formula field that calculates the GM% on the Employee Group Footer level and want to sort the employees in descending order by GM%.  I have gone in circles trying to calculate this field differently in order to be able to perform a Group Sort but this GM% cannot be summarized, which would allow me to use the Group Sort Expert.
    The fact that GM% is used in businesses world-wide each and every day makes this unbelievable that it should prove to be this difficult.  Is there something that I am missing as a newbie to CR design? 
    Any help provided is greatly appreciated!
    Marlene Human

    That's so awesome!  If only I knew how to use sql commands!  Everytime I try to create one it has errors that I dont' understand.  Do you know of a site for sql syntax that might help me to do this?  I have looked and can't find what I need to make this happen.
    So what I need to do is to use 'Formula Workshop' and create a new SQL Expression Field?  Using the formula above, how would this look in SQL?
    Thank you so much for your help...I am so grateful!!!  I have been working on this for months and keep hitting this snag.  I first started out using a cross-table and got confused because you can't summarize the GM% so I then changed the summary to 'weighted average of GM% with Tech/Rev' so that helped, but the Total per Employee has been keeping me stumped. 
    Thanks again.

  • Marker Won't Display When Y Axis in Descending Order

    I'm using an RTF to create charts.  I'm using bi-publisher desktop version 11.1.1 and have Office 10 loaded.
    If I add markerDisplayed="true" to my line chart, the markers display on the line and in the legend.  But, when I add
    <Y1Axis axisMinAutoScaled="false" axisMinValue="1" majorTickStepAutomatic="false" majorTickStep="2" ascending="false" />
    the markers disappear from the lines but stay in the legend.
    For instance, this works (displays markers on lines and legend):
    <Graph markerDisplayed="true" depthAngle="50" depthRadius="8" seriesEffect="SE_AUTO_GRADIENT" graphType="LINE_VERT_ABS"><LegendArea visible="true" /><LocalGridData colCount="{count(xdoxslt:group(.//G_2,  'PERIOD'))}" rowCount="{count(xdoxslt:group(.//G_2,  'BRAND'))}"><RowLabels><xsl:for-each-group select=".//G_2" group-by="BRAND" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><Label><xsl:value-of select="current-group()/BRAND" /></Label></xsl:for-each-group></RowLabels><ColLabels><xsl:for-each-group select=".//G_2" group-by="PERIOD" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><Label><xsl:value-of select="current-group()/PERIOD" /></Label></xsl:for-each-group></ColLabels><DataValues><xsl:for-each-group select="//G_2" group-by="./BRAND" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:variable name="G1" select="current-group()" /><RowData><xsl:for-each-group select="//G_2" group-by="./PERIOD"><Cell><xsl:value-of select="sum($G1[(./PERIOD=current()/PERIOD)]/RANKING[.!=''])" /></Cell></xsl:for-each-group></RowData></xsl:for-each-group></DataValues></LocalGridData></Graph>
    Add the code to sort the Y axis in descending order and start at 1, not o, and the markers disappear from the lines but still show up in the legend:
    <Graph markerDisplayed="true" depthAngle="50" depthRadius="8" seriesEffect="SE_AUTO_GRADIENT" graphType="LINE_VERT_ABS"><LegendArea visible="true" /><Y1Axis axisMinAutoScaled="false" axisMinValue="1" majorTickStepAutomatic="false" majorTickStep="2" ascending="false" /><LocalGridData colCount="{count(xdoxslt:group(.//G_2,  'PERIOD'))}" rowCount="{count(xdoxslt:group(.//G_2,  'BRAND'))}"><RowLabels><xsl:for-each-group select=".//G_2" group-by="BRAND" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><Label><xsl:value-of select="current-group()/BRAND" /></Label></xsl:for-each-group></RowLabels><ColLabels><xsl:for-each-group select=".//G_2" group-by="PERIOD" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><Label><xsl:value-of select="current-group()/PERIOD" /></Label></xsl:for-each-group></ColLabels><DataValues><xsl:for-each-group select="//G_2" group-by="./BRAND" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:variable name="G1" select="current-group()" /><RowData><xsl:for-each-group select="//G_2" group-by="./PERIOD"><Cell><xsl:value-of select="sum($G1[(./PERIOD=current()/PERIOD)]/RANKING[.!=''])" /></Cell></xsl:for-each-group></RowData></xsl:for-each-group></DataValues></LocalGridData></Graph>
    I'm new to bi-pub so please excuse anything that might seem obviously right or wrong to you !
    Krys

    the kext may have gone funky on the Mac. see:
    iPod Updater reports iPod nano or Fifth Generation iPod must be connected using FireWire
    iTunes: No Photos or Videos tab in the iPod preferences pane in Mac OS X
    iPod does not appear in iPod Updater or iTunes in Mac OS X

  • Column_name in user_ind_columns when descending??

    When I create an indexe with a descending column, the value in user_ind_columns.column_name is not the actual column_name, it's something like SYS_NC00002$. I'm trying to build a Select statement to identify the columns in an index, whether ascending or descending. Everything is fine if ascending, but if descending I cannot figure out how to identify the actual column_name. What table should I be joining to?

    Interesting. I notice from analyzing descending index that it appears to include NULL rows - I am not sure why, since B*Tree and FBI do not. Not sure whether that explains the difference times Laurent is getting for his range scan.
    Can't think of a reason to use a descending index on a single column. Tom Kyte points out (in his book, available on Amazon etc. blah blah) that multi-column descending/ascending indexes can be used to sort queries with different sort orders on different columns (providing they match those of the index presumably).
    Anyway, back to NULLs...
    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
    SQL> SELECT DECODE (GROUPING (comm), 1, 'Total:', comm) comm, COUNT (*)
      2  FROM   emp
      3  GROUP BY ROLLUP (comm);
    COMM                                       COUNT(*)
    0                                                 1
    300                                               1
    500                                               1
    1400                                              1
                                                     10
    Total:                                           14
    6 rows selected.
    SQL> -- create normal B*Tree
    SQL> CREATE INDEX index_name ON emp (comm);
    Index created.
    SQL> ANALYZE INDEX index_name COMPUTE STATISTICS;
    Index analyzed.
    SQL> SELECT index_name, index_type, num_rows
      2  FROM   user_indexes
      3  WHERE  index_name = 'INDEX_NAME';
    INDEX_NAME                     INDEX_TYPE                    NUM_ROWS
    INDEX_NAME                     NORMAL                               4
    SQL> DROP INDEX index_name;
    Index dropped.
    SQL> -- create descending FBI
    SQL> CREATE INDEX index_name ON emp (comm DESC);
    Index created.
    SQL> ANALYZE INDEX index_name COMPUTE STATISTICS;
    Index analyzed.
    SQL> SELECT index_name, index_type, num_rows
      2  FROM   user_indexes
      3  WHERE  index_name = 'INDEX_NAME';
    INDEX_NAME                     INDEX_TYPE                    NUM_ROWS
    INDEX_NAME                     FUNCTION-BASED NORMAL               14 <---
    SQL> DROP INDEX index_name;
    Index dropped.
    SQL> -- create normal FBI
    SQL> CREATE INDEX index_name ON emp (comm + 0);
    Index created.
    SQL> ANALYZE INDEX index_name COMPUTE STATISTICS;
    Index analyzed.
    SQL> SELECT index_name, index_type, num_rows
      2  FROM   user_indexes
      3  WHERE  index_name = 'INDEX_NAME';
    INDEX_NAME                     INDEX_TYPE                    NUM_ROWS
    INDEX_NAME                     FUNCTION-BASED NORMAL                4
    SQL>

Maybe you are looking for

  • Stop the carousel from moving

    I've added navigation buttons to this carousel of items that will move the carousel either left or right, however I would like the carousel to STOP anytime an icon is at the center X point. When a nav button is pressed, the carousel moves until the n

  • Flashplayer is not working!

    I am unable to get flashplayer to work.  I currently have Vista (32 bit) and IE9.  It stopped working when I had IE 8 installed.  Everytime I go to a site that requires flash it prompts me to install flash.  I have done alot of research online and tr

  • PDF won't preview in Safari 4.0.3

    Just installed Snow Leopard. Intel Mac Pro. Using Safari 4.0.3. No preview of pdfs in Safari at all. I've removed the Adobe pdf viewer plug-in. And I get a black screen when I try to look at the pdf in browser view. I can download the file and read i

  • I have cs3 and can't get to work on 8.1 windows.  Can I download a trial of Fireworks and use my product key for full activation?

    I use only Photoshop and Fireworks from my CS3 cd.  It is not compatible with 8.1 windows.  Can I download a trial of Fireworks from the Adobe site and activate by using my product key from the original cd's?  I have looked for patches and to no avai

  • Can't print pictures in color

      I have an HP computer and Windows y, Pro. I have HP  4360 Deskjet Printer. I The usual default that I have set for printing is in grayscale. However, no matter what I do, pictures are printed in grayscale, even though I  have changed the default to