When the RadPivotGrid is Ajaxified from the RadAjaxManager, the paging functionality doesn't work as intended.
Steps to reproduce:
The issue can be replicated in the OLAP and KPIs Support demo.
Steps to replicate the issue:
Steps to reproduce:
Use the following live demo - https://demos.telerik.com/aspnet-ajax/pivotgrid/examples/olap/defaultcs.aspx
1. Open the filter dialog for the Year field residing in the ColumnFields and filter by selecting a single Year. (e.g. 2010)
2. Move the Year field to the Filter Fields and Update the Layout
As result, the 2010 filter is not applied anymore but opening the Filter Window keeps the same filter value still selected.
Demonstrating the issue in a basic sample - http://somup.com/c36ilGveZL
While working on pivot grid, we observe that the filtering condition is applied. But there is no visual indicator showing that the current pivot has applied a filtering condition on a given column.
For instance, the following captured picture is obtained from the demo page. I selected Beverages in the "Category" filter and applied it to the pivot grid.
However, there is no visual clue to tell me how many filtering columns are been used at the moment.
Here is how the filtered and non-filtered fields appear in MS Excel:
When defining more than 11 PivotGridColumnField(s), an error is thrown: "An item with the same key has already been added."
Set up to reproduce:
<telerik:RadPivotGrid ID="RadPivotGrid1" runat="server" EmptyValue="No data" AllowPaging="true" PageSize="10"
OnNeedDataSource="RadPivotGrid1_NeedDataSource">
<Fields>
<telerik:PivotGridRowField DataField="ShipCountry" UniqueName="ShipCountry">
</telerik:PivotGridRowField>
<telerik:PivotGridAggregateField DataField="Freight" UniqueName="Freight">
</telerik:PivotGridAggregateField>
<telerik:PivotGridColumnField DataField="ShipCountry1" UniqueName="ShipCountry1"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry2" UniqueName="ShipCountry2"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry3" UniqueName="ShipCountry3"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry4" UniqueName="ShipCountry4"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry5" UniqueName="ShipCountry5"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry6" UniqueName="ShipCountry6"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry7" UniqueName="ShipCountry7"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry8" UniqueName="ShipCountry8"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry9" UniqueName="ShipCountry9"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry10" UniqueName="ShipCountry10"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry11" UniqueName="ShipCountry11"></telerik:PivotGridColumnField>
<telerik:PivotGridColumnField DataField="ShipCountry12" UniqueName="ShipCountry12"></telerik:PivotGridColumnField>
</Fields>
</telerik:RadPivotGrid>
C#
protected void RadPivotGrid1_NeedDataSource(object sender, PivotGridNeedDataSourceEventArgs e)
{
(sender as RadPivotGrid).DataSource = OrdersTable();
}
private DataTable OrdersTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("OrderID", typeof(int)));
dt.Columns.Add(new DataColumn("OrderDate", typeof(DateTime)));
dt.Columns.Add(new DataColumn("Freight", typeof(decimal)));
dt.Columns.Add(new DataColumn("ShipCountry", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry1", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry2", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry3", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry4", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry5", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry6", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry7", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry8", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry9", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry10", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry11", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry12", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry13", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry14", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry15", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry16", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry17", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry18", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry19", typeof(string)));
dt.Columns.Add(new DataColumn("ShipCountry20", typeof(string)));
dt.PrimaryKey = new DataColumn[] { dt.Columns["OrderID"] };
for (int i = 0; i < 70; i++)
{
int index = i + 1;
DataRow row = dt.NewRow();
row["OrderID"] = index;
row["OrderDate"] = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0).AddHours(index);
row["Freight"] = index * 0.1 + index * 0.01;
row["ShipCountry"] = "Country " + index;
row["ShipCountry1"] = "Country " + index;
row["ShipCountry2"] = "Country " + index;
row["ShipCountry3"] = "Country " + index;
row["ShipCountry4"] = "Country " + index;
row["ShipCountry5"] = "Country " + index;
row["ShipCountry6"] = "Country " + index;
row["ShipCountry7"] = "Country " + index;
row["ShipCountry8"] = "Country " + index;
row["ShipCountry9"] = "Country " + index;
row["ShipCountry10"] = "Country " + index;
row["ShipCountry11"] = "Country " + index;
row["ShipCountry12"] = "Country " + index;
row["ShipCountry13"] = "Country " + index;
row["ShipCountry14"] = "Country " + index;
row["ShipCountry15"] = "Country " + index;
row["ShipCountry16"] = "Country " + index;
row["ShipCountry17"] = "Country " + index;
row["ShipCountry18"] = "Country " + index;
row["ShipCountry19"] = "Country " + index;
row["ShipCountry20"] = "Country " + index;
dt.Rows.Add(row);
}
return dt;
}
Hi,
At first I received the same error in this thread and applied the fixed as suggested. This works ok until I Edit Fields in the Designer. On saving the changes the OLAP settings are placed back into the code. I am then required to delete the code to fix this problem. I am constantly back-and-forth using Edit Fields while building my application.
I don't see this as a Feature Request as suggested in the thread, rather a Bug based on this behavior.
https://www.telerik.com/forums/pivotgrid-problem
<OlapSettings>
<XmlaConnectionSettings Encoding="utf-8"></XmlaConnectionSettings>
</OlapSettings>
When the scrolling is enabled and Skin set to Bootstrap, the rows are misaligned:
When the EnableConfigurationPanel is enabled for the PivotGrid and is being rendered without having data bound to it, the "System.NullReferenceException: Object reference not set to an instance of an object." exception will be thrown.
To replicate the problem, add the following PivotGrid declaration to the page without binding data to it:
<telerik:RadPivotGrid ID="RadPivotGrid1" runat="server" EnableConfigurationPanel="true">
</telerik:RadPivotGrid>
The RadGrid attachment shows the Data I need to present in the form of rows of Products each with a start date.
HOWEVER, I need to present the data "per start date" so basically the Date would be a Column Header, then each date would show the duration, start time, and price under each Start Date.
The PivotGrid attachment shows how I was able to take the same data and present it with the start date as a column but is not sufficient for my needs. I need to be able to Page by Start Date, so essentially a custom pager that keeps track of the Start Date and only shows like 3 days at a time. So in the screenshot you see Sept 9th through Sept 25, however I would like to have the pager control which rows are presented and then be able to page on the date column rather than showing the full month with a horizontal scrollbar.
The appearance problem can be seen on http://demos.telerik.com/aspnet-ajax/pivotgrid/examples/firstlook/defaultcs.aspx.
Click on the filter icon for Product name, you will find that the save and cancel buttons are off-screen. And if you hover over Label Filters or Value Filters the window is not wide enough to fit the popout menus that show:
The code in the ASPx file is
<DataCellStyle CssClass="cfDataCell" Width="9%"/>
The expected output in the client browser is
<tr style="height: 35px;">
<td class="rpgDataCell cfDataCell" style="width:9%;">823</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">2,488</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">7,518</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">10,851</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">13,017</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">13,069</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">13,253</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">12,799</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">9,861</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">4,543</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">2,038</td>
<td class="rpgDataCell cfDataCell" style="width:9%;">592</td>
</tr>
However the generated Html is as below:
<tr style="height: 35px;">
<td class="rpgDataCell" style="width:9%;">823</td>
<td class="rpgDataCell" style="width:9%;">2,488</td>
<td class="rpgDataCell" style="width:9%;">7,518</td>
<td class="rpgDataCell" style="width:9%;">10,851</td>
<td class="rpgDataCell" style="width:9%;">13,017</td>
<td class="rpgDataCell" style="width:9%;">13,069</td>
<td class="rpgDataCell" style="width:9%;">13,253</td>
<td class="rpgDataCell" style="width:9%;">12,799</td>
<td class="rpgDataCell" style="width:9%;">9,861</td>
<td class="rpgDataCell" style="width:9%;">4,543</td>
<td class="rpgDataCell" style="width:9%;">2,038</td>
<td class="rpgDataCell" style="width:9%;">592</td>
</tr>
Would be good if ajax pivotgrid filter window supported OLAP dimension hierarchies The Filter window / popup, doesn't seem to respect an OLAP dimension hierarchy. It just shows a flat list at top level (for example case of date hierarchy just shows year). See attached for a date hierarchy example in three different cube browsers, each with the same OLAP SSAS backend. Browsers are a) ajax pivot grid, b) kendo pivot grid and c) excel The Ajax version just shows flat list, whereas kendo pivot and excel show the hierarchy Thanks Chris
Hi I have a straightforward feature request: I would like to be able to "get" the row/column "filter" values the user has selected server-side. Basically need a public property or some type of getter. Currently on the PivotGrid, the row/column "Filter" "Includes/Excludes" can be "set" programmatically, but user selected values can't be easily gotten. I would use it in a couple ways: 1) to display context to the user for the numbers in the grid. (e.g., show the user the active filter values responsible for the numbers they are seeing in the PivotGrid Detail). 2) I need the filter values to close Ticket 1168787. A Telerik employee make a nice sample project to do drill-through functionality: https://www.telerik.com/blogs/how-to-implement-drill-down-functionality-in-telerik-s-pivotgrid-for-asp.net-ajax-part-2 But the PivotGrid counts and RadGrid detail data records returned are not in agreement because selected PivotGrid filters aren't applied to the detail returned in the RadGrid. I need to do that. I need to be able to mimic a drill through action into the detail records that make up the data counts. If I click a cell that says "100" (orders, 2018 year included) I need 100 orders returned in the detail. Not 7000 orders (all order years, unfiltered). In that ticket, I'm trying to mimic the functionality similar to an SSAS "drillthrough action" (like many cube browsers have built in, e.g., RANET OLAP), except here with a regular SQL data source. This way I can drill into the detail records that make up the numbers displayed to the user in the PivotGrid. However, as it stands, the counts and detail will not be congruent until I can get the filter values selected by the user and apply them accordingly to the data set for the detail RadGrid. The BI users expect to be able to drill into the data and I need to provide it. Thank you, Tom
The aggregates functions highlighted in the attached screenshots have common names that are used in the industry and as such they are not localized. This feature request is so that their names can be localized through global resx files along with other strings in the RadPivotGrid control. In the meantime, you can use the ItemDataBound event to change cell texts based on your requirements. You can find similar examples here: https://demos.telerik.com/aspnet-ajax/pivotgrid/examples/appearance/conditionalformatting/defaultcs.aspx For example, to change the Sum aggregate name in the column header, you can do this: else if (e.Cell is PivotGridColumnHeaderCell) { PivotGridColumnHeaderCell cell = e.Cell as PivotGridColumnHeaderCell; cell.Text = cell.Text.Replace("Sum ", "custom ");
The full stract trace of the error can be found in the attached file.
RadPivotGrid returns wrong results when a null-values-containing column is filtered. Steps to reproduce: 1. Run the following code 2. Click the filter button on the second column and try to filter by "1" value Result: the blank results only are shown. <telerik:RadPivotGrid RenderMode="Lightweight" ID="TManagerGrid" runat="server" AllowFiltering="true" OnNeedDataSource="TManagerGrid_NeedDataSource" ShowFilterHeaderZone="true"> <Fields> <telerik:PivotGridRowField DataField="NUM" UniqueName="NUM" ZoneIndex="10" SortOrder="Ascending"> </telerik:PivotGridRowField> <telerik:PivotGridRowField DataField="SOURCE_LINE_ITEM" UniqueName="SOURCE_LINE_ITEM" ZoneIndex="11" SortOrder="Ascending"> </telerik:PivotGridRowField> <telerik:PivotGridRowField DataField="SORTORDER" UniqueName="SORTORDER" ZoneIndex="12" SortOrder="Ascending"> </telerik:PivotGridRowField> <telerik:PivotGridAggregateField DataField="NUM"> </telerik:PivotGridAggregateField> </Fields> </telerik:RadPivotGrid> protected void TManagerGrid_NeedDataSource(object sender, Telerik.Web.UI.PivotGridNeedDataSourceEventArgs e) { TManagerGrid.DataSource = GetData(); } protected DataTable GetData() { DataTable tbl = new DataTable(); tbl.Columns.Add(new DataColumn("NUM")); tbl.Columns.Add(new DataColumn("SOURCE_LINE_ITEM")); tbl.Columns.Add(new DataColumn("SORTORDER")); tbl.Rows.Add(new object[] { "aa", 1, 20 }); tbl.Rows.Add(new object[] { "bb", null, 30}); tbl.Rows.Add(new object[] { "cc", 2, 50 }); return tbl; }